如何获得从0到1的值?

时间:2012-10-10 11:38:38

标签: c#

我试图寻找这个问题的答案,但我想没有人需要这样的东西,或者这是一件非常简单的事情,我无法理解。所以:

我的值从45变为20.

我需要一个从0到1的值,同时45变为20.我知道45 - 20 = 25,这将是我的100%,因此数字为1。

我会用Lerp值实现这个:

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

convertedValue = ??? (像45 - 20 = 25 = 100%)* 0.01;

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

希望有人可以帮助我。我对编码很新,我只是想知道这是否可行。谢谢你的时间!

6 个答案:

答案 0 :(得分:4)

我相信与您的解释相符的计算将是

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

:)

答案 1 :(得分:2)

我认为您的Mathf.LerpUnity3D API的一部分。已经存在一个函数来执行您要执行的操作:Mathf.InverseLerp。你应该使用它。

答案 2 :(得分:1)

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

float curHeight = 25.0f;

float newValue = ( curHeight - minHeight ) / ( maxHeight - minHeight );

答案 3 :(得分:0)

minvalue=20
maxvalue=45
result=(aktvalue-minvalue)/(maxvalue-minvalue)

这样的事情?

答案 4 :(得分: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)
    }
}

答案 5 :(得分: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;
}