2017-07-10 3 views
0

私は3色の間に線形勾配が必要です。複数のカラーストップを持つ線形グラデーションはどのように生成できますか?

rgb(255, 000, 000) 
rgb(255, 255, 000) 
rgb(000, 255, 000) 

どのように私は与えられた長さを持つ単一のライン間の線形補間を計算していますか?次のような単純な行です。

enter image description here

どのようにして、入力からすべての補間された色の値の別の配列を出力カラーストップのリスト/配列、与えられた、関数を作成することができますか?

上記の画像は私にとっては使えますが、入力の長さに渡って複数のカラーストップでRGB配列を生成できる必要があります。

またはであり、別のオプションは、カラーストップアレイとラインに沿ったポイントに基づいて単一のカラーサンプルを返す関数です。

この関数は次のようになります。sample(stops[rgb...], point, length)

私は何回か試してみましたが、私は起動する方法が分からないとあきらめました。私は3つの別々の色のバンドの視点としてそれを見てみましたが、まだそれほどマッチしませんでした。

私はこれが数学的な脳ブロックの単純なケースであり、実際にプログラミングに固有の問題ではないことを知っていますが、他にどこで質問するのか分かりません。

P.S:適切な正当なプログラミング言語の回答は問題ありません。しかし、正規表現パターンのように見えるもので答えを出そうとしないでください。

答えて

0

一定の間隔で各色成分に対して線形補間を行う必要があります。

N個の区間があり、N + 1個のノードがあるとします。ノードには、範囲0..1とRGBカラーの位置が含まれます。

RGBColor NodeColors[N+1] 
Double NodePositions[N+1] 

最初から与えられた距離で色を取得するには、線画がちょうどNodePositionsエントリで現在の距離を比較し、必要なときにKをインクリメントし、最後まで始めから行く場合はインターバル数K.

を決定する必要があります。

DistNorm = Dist/Length; 

while (DistNorm > NodePositions[K]) 
    K++ 

あなたは、ラインで任意のポイントを得るあなたは間隔番号を持っている場合は

K = BinarySearch(DistNorm, NodePositions) 

バイナリ検索を使用して、この間隔

Red = NodeColors[K].Red + 
     (NodeColors[K+1].Red - NodeColors[K].Red) * 
     (DistNorm - NodePositions[K])/
     (NodePositions[K+1] - NodePositions[K]) 
same for Green, Blue 
上で線形補間を計算したい場合
関連する問題