 
 : hsv>rgb ( hsv -- rgb )
 dup Hi
-{ { 0 [ dup V swap dup t swap p ] }
-  { 1 [ dup q over V rot p ] }
-  { 2 [ dup p over V rot t ] }
-  { 3 [ dup p over q rot V ] }
-  { 4 [ dup t over p rot V ] }
-  { 5 [ dup V over p rot q ] } } case 3array ;+{ { 0 [ [ V ] [ t ] [ p ] tri ] }
+  { 1 [ [ q ] [ V ] [ p ] tri ] }
+  { 2 [ [ p ] [ V ] [ t ] tri ] }
+  { 3 [ [ p ] [ q ] [ V ] tri ] }
+  { 4 [ [ t ] [ p ] [ V ] tri ] }
+  { 5 [ [ V ] [ p ] [ q ] tri ] } } case 3array ;


USING: kernel combinators arrays sequences math ;

IN: cfdg.hsv



: Hi ( hsv -- Hi ) H 60 / floor 6 mod ;

: f ( hsv -- f ) [ H 60 / ] [ Hi ] bi - ;

: p ( hsv -- p ) [ S 1 swap - ] [ V ] bi * ;

: q ( hsv -- q ) [ [ f ] [ S ] bi * 1 swap - ] [ V ] bi * ;

: t ( hsv -- t ) [ [ f 1 swap - ] [ S ] bi * 1 swap - ] [ V ] bi * ;

PRIVATE>

