module GoldenColor VERSION = "0.1.0" struct Color getter r : Float64 getter g : Float64 getter b : Float64 def initialize(@r = 0, @g = 0, @b = 0) end def self.from_rgb(r, g, b) self.new r, g, b end def self.from_hsv(h, s, v) h *= 6.0 chroma = s * v x = chroma * (1.0 - (h.modulo(2.0) - 1.0).abs) r, g, b = if h >= 0.0 && h <= 1.0 {chroma, x, 0.0} elsif h >= 1.0 && h <= 2.0 {x, chroma, 0.0} elsif h >= 2.0 && h <= 3.0 {0.0, chroma, x} elsif h >= 3.0 && h <= 4.0 {0.0, x, chroma} elsif h >= 4.0 && h <= 5.0 {x, 0.0, chroma} else {chroma, 0.0, x} end m = v - chroma self.new(r + m, g + m, b + m) end def rgb { r, g, b } end end class ColorGen getter seed : Float64 def initialize(@saturation = 0.5, @value = 0.95, @seed = Random.rand(1.0)) end def generate color = Color.from_hsv @seed, @saturation, @value @seed = (@seed + 0.618033988749895).modulo(1.0) color end end end