====== VCIでHSVtoRGBを実装する ====== **RGB**とは、Red,Green,Blueの**赤、緑、青の割合**で色を表現する方法です。\\ **HSV**とは、Hue,Saturation,Valueの**色相、彩度、明度**で色を表現する方法です。\\ ここではHSVの値をRGBの値に変換する方法を説明します。 * [[https://ja.wikipedia.org/wiki/RGB | RGBカラーモデル (Wikipedia)]] * [[https://ja.wikipedia.org/wiki/HSV%E8%89%B2%E7%A9%BA%E9%96%93 | HSV色空間 (Wikipedia)]] color型に[[vci:script:reference:color|HSVToRGB]]が追加されたため、下記の実装をしなくても変換可能になりました。 ===== 概要 ===== {{:vci:script:tips:hsv2rgb.jpg?direct&600|}} プログラムの世界では色は Redの赤、Greenの緑、Blueの青の割合で表現されます。\\ それに対して、色相(Hue)・彩度(Saturation)・明度(Value)によって色を表現する方法をHSVと言いいます。\\ HSVはイメージしている色を指定する方法が直感的に分かりやすいのに対して、RGBで色を作るのは難しいです。\\ なので、プログラムによってHSVからRGBに変換する方法がよく使われます。 また、オブジェクトの縮尺や座標などの連続的な値を使って色相を変化させる事で、虹色に変化させる事も可能です。 ===== サンプルコード ===== -- すべて[0,1]の範囲に正規化してください -- Hue(色相) [0,1] / Saturation(彩度) [0,1] / Value(明度) [0,1] function HSVtoRGB(h, s, v) local r = v local g = v local b = v if 0 < s then h = h * 6.0 local i = math.floor(h) local f = h - i if i == 0 then g = 1.0 - s * (1.0 - f) b = 1.0 - s end if i == 1 then r = 1.0 - s * f b = 1.0 - s end if i == 2 then r = 1.0 - s b = 1.0 - s * (1.0 - f) end if i == 3 then r = 1.0 - s g = 1.0 - s * f end if i == 4 then r = 1.0 - s * (1.0 - f) g = 1.0 - s end if i == 5 then g = 1.0 - s b = 1.0 - s * f end end return Color.__new(r, g, b) end 実行結果 hsvを引数にして、rgb値(カラー型)を返します。