だから、あなたは、いくつかの任意の値V
を持っている、とあなたは0 < = V
< = Vmax
ことを知っています。ピクセルのx座標を計算したい場合は、X
と呼びます。ここでは、「スクリーン」のx座標は0からXmax
までです。あなたが言うように、この「通常」の方法を行うために、あなたは私が最初にV/Vmax
を計算することにより、0と1の間にあるように値を正規化してるようにそれを考えるのが好き、そして
X = Xmax * V/Vmax
V = Vmax * X/Xmax
にしてくださいこの値に最大値を掛けて、0とその最大値の間の値を取得します。
同じログを行うには、V
の値に異なる下限値が必要です。 Vがいつでも< = 0であれば、ValueError
となります。それでは0とすると、< Vmin
< = V
< = Vmax
となります。次に、を調べる必要があります。無限に多いので、使用する対数はです。我々は左に表現から指数で得ることができる場合、原則的にはそう
------|------|------|------|---- ------|------|------|------|----
2^-1 2^0 2^1 2^2 == 0.5 1 2 4
------|------|------|------|---- ------|------|------|------|----
e^-1 e^0 e^1 e^2 == 0.4 1 2.7 7.4
------|------|------|------|---- ------|------|------|------|----
10^-1 10^0 10^1 10^2 == 0.1 1 10 100
、:3つは、一般的に、次のようになり、x軸にもたらされるベース2、E及び10を有するものを、遭遇しています我々は0とXmax
の間の値を取得するには、上記と同じ原理を使用することができ、およびログの出番これはもちろんであるあなたがベースb
を使用すると仮定すると、あなたは前後に変換するために、これらの式を使用することができます。
from math import log
logmax = log(Vmax/Vmin, b)
X = Xmax * log(V/Vmin, b)/logmax
V = Vmin * b ** (logmax * X/Xmax)
それはあなたが最初にlog(somevalue, b)
があなたに非負性を与えることを確認する必要があることを除いて、ほぼ同じ考え方ですe値。これを行うには、関数内のVmin
で除算します。これで、式が得られる最大値で除算することができます。これはもちろんlog(Vmax/Vmin, b)
です。これまでと同じように、0と1の間の値が得られます。
最初に正規化(X/Xmax
)する必要があるもう1つの方法は、逆関数によって予想される最大値(* logmax
)に再びスケールアップします。反対に、ちょっとb
をいくつかの値に上げることです。今度はX
が0の場合、b ** (logmax * X/Xmax)
は1になります。正しい下限を得るには、Vmin
を掛けます。それとも別の言い方をすると、私たちが最初にやったのは、Vmin
で割ることだったので、私たちは最後にVmin
を掛ける必要があります。
方程式の「右辺」を「ズーム」するには、方程式を切り替えるだけでよいので、累乗をV
からX
に累乗して逆になるようにしてください。原則としてそうです。あなたもX
が0することができるという事実で何かを持っているので:
logmax = log(Xmax + 1, b)
X = b ** (logmax * (V - Vmin)/(Vmax - Vmin)) - 1
V = (Vmax - Vmin) * log(X + 1, b)/logmax + Vmin
すべての値のログを取り、残りは同じです。 0(log(0)は負であることはできません)に注意してください。また、記号を交差させないでください。 – yosukesabai
@yosukesabai: 'max'の値が非常に低い場合のヒント? –
これは '(X/max)* V'であり、' X * V/max'として読みやすくなります – wim