- ベストアンサー
レインボー色ってどうやって表現する?
レインボー、つまり全ての色を時間変化で表現したいのです。 今このような式で色が表現できるとします。 GetColor(R,G,B); R,G,Bには0~255までの数値が入ります。 ループする処理の終わりに Time++; を書き、int型のTimeが時間変化の値とします。 つまり、黒から赤へ時間変化で表現するには G=0; B=0; GetColor(Time,G,B); で表現できます。 赤、緑、青を時間変化で表現はできるのですが、全ての色を時間変化で表現したい時はどうしたらいいのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 レインボーという意味はそういういみですか。 了解しました。だったら,レインボウは(R,G,B)の色空間のなかの一本の曲線として表現できます。 一番簡単なのは直線です。 なので,xをパラメータとして, R=P*x+A,G=Q*x+B, B=R*x+C として,xをR,G,Bの値が0から255に収まる範囲で 変化させてGetColorをよべばレインボウになります。 P,Q,R,A,B,Cといろいろかえることでいろんなレインボウができると思います。 直線以外でもよいので R=X^2とかいろいろためしてみると面白いと思いますよ。
その他の回答 (2)
- keibou21
- ベストアンサー率31% (18/58)
RGBのみの制御で行おうとすると条件分けが必要になります。 Color(Max,0,0) // 赤 Color(Max,Max,0) // 黄 Color(0,Max,0) // 緑 Color(0,Max,Max) // 水色 Color(0,0,Max) // 青 Color(Max,0,Max) // 紫 Color(Max,0,0) // 赤 の順番に増減分を制御してあげればレインボーは作れます。 しかし、これでは色相の変化は表現できても、彩度・明度の変化を表現しきれません。 なのでHSBからRGBに変換することをお勧めします。 参考URLを張っておきます。
- chiezo2005
- ベストアンサー率41% (634/1537)
GetColor(TimeR,TimeG,TimeB); としておいて3重ループをつくりそれぞれのループの先頭で0を入れるようにすれば,すべての組み合わせが表現できます。 あるいは24BITのバイナリ型の変数を用意して, それ0からFFFFFFまでカウントアップして,それぞれの色用に,8bitずつ切り出してもよいと思います。
お礼
ありがとうございます。 確かにソウなんですよね! 全ての組み合わせをする事はできるんですけど 連続して表示した場合、 この方法だとforで255から0に飛んだとき 色が飛んでしまうんです。 突然色が変化してしまうんですね。 レインボーの色が段々かわるようにしたいのですが・><