color/HSV.go

30 lines
628 B
Go

package color
import "math"
// HSV represents a color using hue, saturation and value.
func HSV(hue Value, saturation Value, value Value) Color {
hue = math.Mod(hue, 360)
c := value * saturation
x := c * (1 - math.Abs(math.Mod(hue/60, 2)-1))
var r, g, b Value
switch {
case hue >= 0 && hue < 60:
r, g, b = c, x, 0
case hue >= 60 && hue < 120:
r, g, b = x, c, 0
case hue >= 120 && hue < 180:
r, g, b = 0, c, x
case hue >= 180 && hue < 240:
r, g, b = 0, x, c
case hue >= 240 && hue < 300:
r, g, b = x, 0, c
case hue >= 300 && hue < 360:
r, g, b = c, 0, x
}
m := value - c
return RGB(r+m, g+m, b+m)
}