3

この問題の答えを探してみましたが、誰もこのようなものを必要としていないか、非常に単純なもので頭が回らないと思います。そう:

45 から 20 に変化する値があります。

45 が 20 になるのと同時に 0 から 1 になる値が必要です。45 - 20 = 25 であり、それが私の 100% であり、したがって 1 になります。

これを Lerp 値で次のように実装します。

public float minHeight = 10.0f;
public float maxHeight = 30.0f;
public float convertedValue;

変換値 = ??? (45 - 20 = 25 = 100% のようなもの) * 0.01;

newValue = Mathf.Lerp(minHeight, maxHeight, convertedValue);

うまくいけば、誰かが私を助けることができます。私はコーディングにかなり慣れていないので、これが可能かどうか疑問に思っていました. 御時間ありがとうございます!

4

6 に答える 6

5

あなたの説明に一致する計算は

newValue = (convertedValue - minHeight) / (maxHeight - minHeight);

すなわちnewValue = 0@ minHeight、および 1 @maxHeight

編集

私はこれまで Lerp を見たことがありませんが、単純な線形補間であることは明らかです。

ただし、MSDNから

Lerp は次のように定義されます。

value1 + (value2 - value1) * amount

つまり、あなたの例convertedValueでは分数である必要があり、答えは補間された結果です。つまり、あなたの質問/私の(およびEsailjaの)解釈が逆になっていることを意味します:)

すなわち

Mathf.Lerp(10.0, 30.0, 0.5) = 20.0

一方

InvertedLerp(10.0, 30.0, 20) = 0.5 // My / Esailja's calc

:)

于 2012-10-10T11:41:47.263 に答える
2

私はあなたをAPIMathf.Lerpの一部として認識しています。Unity3Dあなたがやろうとしていることをするための関数がすでに存在します:Mathf.InverseLerp。これを使用する必要があります。

于 2012-10-10T12:04:26.563 に答える
1
public float minHeight = 10.0f;
public float maxHeight = 30.0f;

float curHeight = 25.0f;

float newValue = ( curHeight - minHeight ) / ( maxHeight - minHeight );
于 2012-10-10T11:42:40.160 に答える
0
minvalue=20
maxvalue=45
result=(aktvalue-minvalue)/(maxvalue-minvalue)

このようなもの?

于 2012-10-10T11:41:19.323 に答える
0

物件はいかがですか?

public int neededvalue
{
    get
    {
        if (value == 45)
            return 1;
        else if (value == 20)
            return 0
        else
            throw new Exception("wrong input");
    }
}

public float neededvaluealternative
{
    get
    {
        return (value - 20) / (45 - 20)
    }
}
于 2012-10-10T11:44:57.877 に答える
0

public float AnswerMureahkosQuestion(float input)
{
   const float minValue = 20;
   const float maxValue = 45;
   float range = maxValue - minValue;

   // nominalise to 1
   // NOTE: you don't actually need the *1 but it reads better
   float answer = (input+0.00001/*prevents divbyzero errors*/) / range * 1; 

   // invert so 45 is 0 and 20 is 1
   answer =  1 - answer;
   return answer;
}
于 2012-10-10T11:45:34.283 に答える