Types/LightScript.Color/FromColorTemperature.ps1

param(
[int]
$ColorTemperature
)


if ($ColorTemperature -lt 1200) {
    $ColorTemperature = (1000000/$ColorTemperature)
}

$ct100 = $ColorTemperature / 100

$red, $green = 
    if ($ct100 -le 66) {
        255 # red
        [Math]::Min([Math]::Max(
            (99.4708025861 * [Math]::Log($ct100)) - 161.1195681661,
            0
        ), 255)
    } else {    
        # red
        [Math]::Min([Math]::Max(
            329.698727446 * [Math]::Pow($ct100 - 60,-0.1332047592),
            0
        ), 255)
        # green
        [Math]::Min([Math]::Max(
            288.1221695283 * [Math]::Pow($ct100 - 60,-0.0755148492),
            0
        ), 255)        
    }

$blue =
    if ($ct100 -ge 66) {
        255
    } elseif ($ct100 -le 19) {
        0
    } else {
        [Math]::Min([Math]::Max(
            (138.5177312231 * [Math]::Log($ct100 - 10)) - 305.0447927307,
            0
        ), 255)
    }



$hslVal = $this.RGBToHSL($red, $green, $blue)

[PSCustomObject]@{
    PSTypeName='LightScript.Color'
    Hue=$hslVal.Hue
    Saturation=$hslVal.Saturation
    Luminance=$hslVal.Luminance
    Red=$red
    Green=$green
    Blue=$blue
}


<#
If Temperature <= 66 Then
    Green = Temperature
    Green = 99.4708025861 * Ln(Green) - 161.1195681661
    If Green < 0 Then Green = 0
    If Green > 255 Then Green = 255
Else
    Green = Temperature - 60
    Green = 288.1221695283 * (Green ^ -0.0755148492)
    If Green < 0 Then Green = 0
    If Green > 255 Then Green = 255
End If

Calculate Blue:

If Temperature >= 66 Then
    Blue = 255
Else

    If Temperature <= 19 Then
        Blue = 0
    Else
        Blue = Temperature - 10
        Blue = 138.5177312231 * Ln(Blue) - 305.0447927307
        If Blue < 0 Then Blue = 0
        If Blue > 255 Then Blue = 255
    End If

End If
#>