我试图寻找这个问题的答案,但我想没有人需要这样的东西,或者这是一件非常简单的事情,我无法理解。所以:
我的值从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);
希望有人可以帮助我。我对编码很新,我只是想知道这是否可行。谢谢你的时间!
答案 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.Lerp
是Unity3D
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;
}