[解決済み] パワーメーターの赤と緑の間の色を生成する?
質問
Javaでゲームを作っているのですが、何かを強く撃つときのパワーメーターを実装したいのです。
0~100のintを取り、その数値の高さに応じて、緑(パワースケール0)と赤(パワースケール100)の間の色を返す関数を書きたいのですが、可能でしょうか?
ボリュームコントロールがどのように機能するかに似ています。
緑と赤の間の色を生成するには、色の赤、緑、青の成分に対してどのような操作をすればよいのでしょうか。
だから、私は以下を実行することができます。
getColor(80)
を実行すると、オレンジ系の色(R, G, B の値)を返します。
getColor(10)
とすると、より緑や黄色に近いRGB値を返します。
新しい色のために R、G、B 値のコンポーネントを増やす必要があることは分かっていますが、色が緑から赤にシフトするときに何が上がるか下がるかは具体的に分かっていません。
進捗状況です。
結局、HSV/HSB 色空間を使用することにしました。なぜなら、グラデーションがより好きだったからです (中央に暗い茶色がない)。
私が使用した関数は
public Color getColor(double power)
{
double H = power * 0.4; // Hue (note 0.4 = Green, see huge chart below)
double S = 0.9; // Saturation
double B = 0.9; // Brightness
return Color.getHSBColor((float)H, (float)S, (float)B);
}
ここで "power" は 0.0 から 1.0 の間の数値である。 0.0は明るい赤を返し、1.0は明るい緑を返します。
Java色相図です。
どのように解決するのですか?
赤と緑の値をリニアにスケーリングすればよいのです。赤、緑、青の最大値を次のように仮定します。
255
で、かつ
n
は範囲
0 .. 100
R = (255 * n) / 100
G = (255 * (100 - n)) / 100
B = 0
(整数計算のために修正。Ferrucioに脱帽)
別の方法としては
HSVカラーモデル
を使用し、色相を
0 degrees
(赤) から
120 degrees
(緑) に、好きな彩度と値で変換します。これで、より美しいグラデーションになるはずです。
上のグラデーションはRGB、下のグラデーションはHSVを使用しています。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] モジュラスディビジョンのしくみ
-
[解決済み] 関数は return 文を1つだけ持つべきですか?
-
[解決済み] ディープコピーとシャローコピーの違いは何ですか?
-
[解決済み] GUIDは100%一意ですか?
-
[解決済み】GOTOはまだ有害と考えられている?[クローズド]
-
[解決済み】なぜソースファイルの最後に空行を入れることが推奨されるのですか?
-
[解決済み] 2つの角度の差を求めるにはどうすればよいのでしょうか?
-
[解決済み] プログラミングにおける "Context "という言葉?[クローズド]
-
[解決済み】10行以下の簡単なコードでできる最もクールなことは何ですか?初心者を鼓舞するのに役立つ [終了しました]
-
[解決済み] モノリシックカーネルとマイクロカーネルの違いは何ですか?