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) }