補間はあなたが望むものです。内挿は、データセット内の既知のサンプル間のサンプルを生成します。
ここで、既知のサンプルはあなたの色です。青、緑、黄、オレンジ、赤。これらの既知の色の間の色は、探しているものです。
補間関数の優れたビジュアライザーへのリンクを次に示します。
便宜上、いくつかの補間関数を次に示します。それらと遊んで、あなたに最適なものを見つけてください!
public float linearInterpolation(float start, float end, float normalizedValue) {
return start + (end - start) * normalizedValue;
}
public float sinInterpolation(float start, float end, float normalizedValue){
return (start+(end-start)* (1 - Math.cos(normalizedValue * Math.PI)) / 2;
}
//usage
linearInterpolation(red, green, .5f);//halfway between red and green.
//same with other demonstrations.
編集:
ここで、start と end は、開始サンプルと終了サンプルを指します。normalizedValue は、[0, 1] の両端を含む値です (つまり、正確に 0 または 1、または 0 と 1 の間の任意の値に等しくなる可能性があります。これが、この用語normalized
が通常意味することです)。
したがって、あなたにとってstart
とend
は 2 つの色になりnormalizedValue
、開始色または終了色にどれだけ近いかを表します。
たとえば、linearInterpolation を取り上げます。
red = 1;
green = 2;
float midway = 1 + (2 - 1) * .5;
//midway = 1.5, which is halfway between red and green.
float allRed = 1 + (2 - 1) * 0;
//allRed = 1, which is the value of red (or start)
float allGreen = 1 + (2 - 1) * 1;
//allGreen = 2, which is the value of green (or end)
したがって、線形補間の場合、normalizedValue
が 1 に近づくほど、返される値が に近づきますend
。0 に近いnormalizedValue
ほど、戻り値は に近くなりますstart
。
これは、他の補間関数には必ずしも当てはまりません。線形補間は、値を接続する単純な線分と考えることができます。これらのセグメントの中間の値が必要ですか? 正規化された 0.5 の値を使用してください。ビオラです!
他の関数は勾配が急であったり、 と の間で振動したりする場合がstart
ありend
ます。
色の観点から考えるのをやめて、もっと抽象的に考えてみてください。色は一定の距離離れています。補間は、それらの間の距離にある値を定義するのに役立ちます。