C# 如何将值设置为从0到1?
我试图寻找这个问题的答案,但我想没有人需要像这样的东西,或者是一些超级简单的东西,我就是想不起来。因此: 我有一个从45变为20的值 我需要一个从0到1的值,与45到20的时间相同。我知道45-20=25,这将是我的100%,因此是数字1 我会在Lerp值中这样实现:C# 如何将值设置为从0到1?,c#,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=???(大约
public float minHeight = 10.0f;
public float maxHeight = 30.0f;
public float convertedValue;
convertedValue=???(大约45-20=25=100%)*0.01
希望有人能帮助我。我对编码相当陌生,我只是想知道这是否可能。谢谢你的时间
minvalue=20
maxvalue=45
result=(aktvalue-minvalue)/(maxvalue-minvalue)
类似这样的情况?我相信与您的解释相匹配的计算结果是
newValue = (convertedValue - minHeight) / (maxHeight - minHeight);
i、 e.newValue=0
@minHeight
和1@maxHeight
编辑
我以前从未见过Lerp,但它显然是简单的线性插值
然而,从
Lerp定义为
value1 + (value2 - value1) * amount
i、 e.在您的示例中,convertedValue
应该是分数,答案是插值结果,这意味着您的问题/my(以及Esailja)对其的解释是相反的:)
i、 e
鉴于
InvertedLerp(10.0, 30.0, 20) = 0.5 // My / Esailja's calc
:)房产怎么样
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)
}
}
我认为您的应用程序是
Unity3D
api的一部分。已经存在一个函数来执行您尝试执行的操作:。你应该用这个。你的问题让人困惑,你说的是45和20,但显示的是10和30。啊,对不起。我的意思是控制我的lerp的值是45-20,10和30只是其中的一部分。我很快就会把它清理干净。谢谢你的快速而好的解决方案!感谢所有参与清理的人。对不起,这个问题太麻烦了。
InvertedLerp(10.0, 30.0, 20) = 0.5 // My / Esailja's calc
public float minHeight = 10.0f;
public float maxHeight = 30.0f;
float curHeight = 25.0f;
float newValue = ( curHeight - minHeight ) / ( maxHeight - minHeight );
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)
}
}
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;
}