質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Q&A

解決済

2回答

4755閲覧

RGBのグラデーション補間

seri

総合スコア422

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

0グッド

0クリップ

投稿2016/09/06 08:08

よく
Color.r=sin(time)
といったような、カラーのRGB値を、それぞれSin関数やCos等で、タイムを使ってグラデーション処理をしている記述を見かけますが

仮に
Color.r=sin(time)
Color.g=sin(time)
Color.b=sin(time)
とすると、黒から白といった単調なものになります

そこで質問なのですが
今回実装したいのは

3つの玉(赤、青、紫、黄色等のバラバラな色)のColor値をグラデーションさせる際
それぞれ3つの玉が、被ることのない違う色であり続けるようなグラデーション処理です

Sphere01=ColorRGB(255,0,0); Sphere02=ColorRGB(0,255,0); Sphere02=ColorRGB(random,random,random);

ColorRGBとゆうのは、言語での違いを解消するために、適当につけた名前です、そのままRGBの値を持っていると思ってください。
また、Randomは0~255のうちランダムな値をとるものとします。

これらの玉をそれぞれの色が重なる事なくグラデーション処理させるにはどのようにすればいいのでしょうか?(Sphere03の初期値はSphere01、02と被っていないものとします)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

色を指定するための色空間というものがあり
RGBの他にはHSV(HSB,HSL)やCMYKやLabなどがあります

あなたの希望を解決するにはHSV色空間を使うのが良いでしょう
Hは色相
Sは彩度
Vは明るさを表します
色相Hは赤・橙・黄・緑・青・藍・紫などの「色み」を表し、
「紫→ピンク→赤」と循環するため角度で指定します(角度なら0°=360°となるため)
彩度Sは鮮やかさを表し、
高いと原色になり、低いとどんな色みを持っていても灰色となります
明るさVは文字通り明るさで、
低いと黒、高いと白に近づきます(Vの他にBやLなどが使われるようです)

玉ごとに固有のHの値を持たせ
Sは灰色にならないように高めに固定し
明るさVの値をsin(time)で揺らす
とご希望の処理になると思います

色をHSVで指定する環境がない場合はHSV→RGBの変換を行うために
h,s,vの3つの引数からr値,g値,b値をそれぞれ計算する3つの関数か
(複数の戻り値を返せる場合は1つの関数ですむ)
プロパティh,s,v,からr,g,bを計算し
Colorオブジェクトを返すメソッドを持つクラスが必要となります

HSV→RGBの具体的な変換方法については
Wikipedia「HSV色空間」に具体的なコードが載っています

投稿2016/09/10 08:11

e-cube

総合スコア284

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

こんにちは。

質問の意味を取り違えていたらすいません。

Color.r=sin(time)

Color.g=sin(time)
Color.b=sin(time)
とすると、黒から白といった単調なものになります

を単調でないようにするには、「timeに定数を加えて位相をずらす」、「timeに定数を掛けて波長を変える」ことで、できると思います。
複数回呼び出すと思いますが、隣り合う呼び出しの際に、角度の変化を十分に小さくしておかないと、滑らかな変化にならないので要注意です。

投稿2016/09/06 09:46

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

seri

2016/09/07 16:42

sin(time*0.4)のように、小数点を加え位相をずらしてみたところうまくいきました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問