From f48c2b2d84d929cc9bab6a4e3b276a8dc72a8114 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Sat, 21 Jun 2014 09:19:08 -0700 Subject: [PATCH] colors.luv: implement CIELUV colors. --- extra/colors/luv/authors.txt | 1 + extra/colors/luv/luv-docs.factor | 14 ++++++ extra/colors/luv/luv-tests.factor | 19 ++++++++ extra/colors/luv/luv.factor | 77 +++++++++++++++++++++++++++++++ extra/colors/luv/summary.txt | 1 + 5 files changed, 112 insertions(+) create mode 100644 extra/colors/luv/authors.txt create mode 100644 extra/colors/luv/luv-docs.factor create mode 100644 extra/colors/luv/luv-tests.factor create mode 100644 extra/colors/luv/luv.factor create mode 100644 extra/colors/luv/summary.txt diff --git a/extra/colors/luv/authors.txt b/extra/colors/luv/authors.txt new file mode 100644 index 0000000000..e091bb8164 --- /dev/null +++ b/extra/colors/luv/authors.txt @@ -0,0 +1 @@ +John Benediktsson diff --git a/extra/colors/luv/luv-docs.factor b/extra/colors/luv/luv-docs.factor new file mode 100644 index 0000000000..8aebbca49e --- /dev/null +++ b/extra/colors/luv/luv-docs.factor @@ -0,0 +1,14 @@ +USING: help.markup help.syntax ; +IN: colors.luv + +HELP: luva +{ $class-description "The class of CIELUV colors with an alpha channel." } ; + +ARTICLE: "colors.luv" "CIELUV colors" +"The " { $vocab-link "colors.luv" } " vocabulary implements CIELUV colors, together with an alpha channel." +{ $subsections + luva + + >luva +} +{ $see-also "colors" } ; diff --git a/extra/colors/luv/luv-tests.factor b/extra/colors/luv/luv-tests.factor new file mode 100644 index 0000000000..6f4f7f7242 --- /dev/null +++ b/extra/colors/luv/luv-tests.factor @@ -0,0 +1,19 @@ +! Copyright (C) 2014 John Benediktsson +! See http://factorcode.org/license.txt for BSD license + +USING: arrays colors kernel locals math.functions math.ranges +sequences tools.test ; + +IN: colors.luv + +{ t } [ + 0.0 1.0 0.1 [| r | + 0.0 1.0 0.1 [| g | + 0.0 1.0 0.1 [| b | + r g b 1.0 dup >luva >rgba + [ >rgba-components 4array ] bi@ + [ 0.00001 ~ ] 2all? + ] all? + ] all? + ] all? +] unit-test diff --git a/extra/colors/luv/luv.factor b/extra/colors/luv/luv.factor new file mode 100644 index 0000000000..fef7518eb4 --- /dev/null +++ b/extra/colors/luv/luv.factor @@ -0,0 +1,77 @@ +! Copyright (C) 2014 John Benediktsson +! See http://factorcode.org/license.txt for BSD license + +USING: accessors colors colors.xyz kernel locals math +math.functions ; + +IN: colors.luv + +TUPLE: luva l u v alpha ; + +C: luva + + d + 4 x * d / + 9 y * d / ; foldable + +CONSTANT: wp_x 0.95047 +CONSTANT: wp_y 1.00000 +CONSTANT: wp_z 1.08883 + +PRIVATE> + +M: luva >rgba >xyza >rgba ; + +M: luva >xyza + [ + [let + wp_x wp_y wp_z xyz-to-uv :> ( u_wp v_wp ) + [ l>> ] [ u>> ] [ v>> ] tri :> ( l u v ) + + 52 l * 13 l * u_wp * u + / 1 - 3 / :> a + l xyz_kappa xyz_epsilon * > [ + l 16 + 116 / 3 ^ wp_y * + ] [ + l xyz_kappa / wp_y * + ] if :> y + y -5 * :> b + 39 l * 13 l * v_wp * v + / 5 - y * :> d + d b - a 1/3 + / :> x + a x * b + :> z + + x y z + ] + ] [ alpha>> ] bi ; + +GENERIC: >luva ( color -- luva ) + +M: object >luva >xyza >luva ; + +M: luva >luva ; inline + +M: xyza >luva + [ + [let + wp_x wp_y wp_z xyz-to-uv :> ( u_wp v_wp ) + [ x>> ] [ y>> ] [ z>> ] tri :> ( x_ y_ z_ ) + x_ y_ z_ xyz-to-uv :> ( u_ v_ ) + + y_ wp_y / :> y + + y xyz_epsilon > [ + y 1/3 ^ 116 * 16 - + ] [ + xyz_kappa y * + ] if :> l + 13 l * u_ u_wp - * :> u + 13 l * v_ v_wp - * :> v + + l u v + ] + ] [ alpha>> ] bi ; diff --git a/extra/colors/luv/summary.txt b/extra/colors/luv/summary.txt new file mode 100644 index 0000000000..674333c6f1 --- /dev/null +++ b/extra/colors/luv/summary.txt @@ -0,0 +1 @@ +CIELUV colors