あるmin \ maxセットから別のmin \ maxセットに数値を変換する方法は?[閉まっている]


19

私は地形の生成を行っており、-1〜+1の乱数を生成するperlinライブラリを持っています。これを0〜255のスケールに変換します。これを行う適切な方法は何ですか?

回答:


23

基本式は次のとおりです。

Result := ((Input - InputLow) / (InputHigh - InputLow))
          * (OutputHigh - OutputLow) + OutputLow;

あなたの場合:

結果:=((入力 - -1)/(1 - -1)*(255 - 0)+ 0 ;

係数が静的な場合、ここから変換を最適化できますが、おそらくコンパイラーもそれを単独で行います。

結果:=((入力 - -1)/ 2)* 255 + 0

結果:= 入力 * 127.5 + 127.5 ;


2
この答えは、私のプログラマーの脳にとって最も理にかなっています。:)素晴らしい回答をいただいた他の皆さんへの「ありがとう」。
トラカ

10

範囲-1には、1合計範囲です2。そのため、に到達するには適切にスケーリングする必要があります255。このようなもの:

(randomPerlin + 1.0) * 127.5

したがって、最初にを追加1してから0..2に乗算し、乗算し127.5て範囲を取得します0..255


3

スケーリングとバイアスの力を通して。

値から、範囲の最小値を引きます。これにより、範囲[0..2]の値が得られます。

それをソース範囲の幅で割り、範囲[0..1]の値を与えます。

それにターゲット範囲の幅を掛けて、範囲[0..255]の値を与えます。

ターゲット範囲のベースを追加して、ターゲット範囲内の値を取得します。この場合、前の手順と同じです。

要約すれば:

            (v - (-1.0)) 
v' = 0 + ---------------- * (255 - 0)
          (1.0 - (-1.0))

3
oldRange = oldMax - oldMin
newRange = newMax - newMin

newValue = ((oldValue - oldMin) * newRange / oldRange) + newMin

お役に立てれば。


2

入力範囲を変換して、1(最小入力の負の値)-1 .. 1-> 0 .. 2を追加して最小値をゼロにします

出力範囲はゼロから始まるので、何もしません。

出力範囲に収まるように新しい入力範囲をスケーリングします。これは両方がゼロで始まるため、簡単です。値に255/2 0..2 * 2/255-> 0..255を掛けます

できた!

例:

0.5になります:(0.5 + 1)* 127.5 = 191.25 -0.5になります:(-0.5 + 1)* 127.5 = 63.75


2

x元の入力でyあり、期待される出力であるとしましょう。少なくとも2つのポイント (x、y)(-1、0)(1、255)があります

線形補間を行いたいので、形式の方程式を調べることができます y = m*x + c

二点以上で、我々はのために解決することができますmし、c それが完了したら、あなたは変換式を得ます。

このメソッドは、他のタイプの方程式でも機能することに注意してください。たとえば、指数補間または二次補間が必要な場合。


この分野では、線形補間の一般的な意味は、次のような混合係数を使用して2つの量を線形に混合することですv = (1-a)*x + (a)*y。彼が望んでいるのは範囲のマッピングだけなので、この答えが質問にどのように関連するのかわかりません。
ラースヴィクルンド

平面内の2点が一意に線を定義します。範囲マッピングを直線として扱うことができます。そして、その線上の2点を知っています。それを解くと直線方程式が得られます。線形補間はここでは正しい言葉ではないかもしれませんが、私はこの線上のそれらの2点の間の内部点のセットを意味したかったです。
アンクッシュ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.