gpt4 book ai didi

c# - 将值标准化为 -1 到 1 之间的范围

转载 作者:太空宇宙 更新时间:2023-11-03 19:40:52 24 4
gpt4 key购买 nike

我想以“标准化”值位于 -1 和 1 之间的方式处理操纵杆值(包括带小数位的数字,例如 0.0129)。

具体来说,我正在处理 Wiimote Controller 棒的输入。

X 轴的范围在 35 到 228 之间,Y 轴的范围在 27 到 220 之间。

两者的中心都是 128。

现在我想使 X 轴上的值 35 的结果为 -1,128 的值应为 0,而 228 的值应为 1。

有什么特殊的方法可以做到这一点吗?

我能想到的最好的是:

public float[] GetStickNormalizedDataXY() 
{
float[] ret = new float[2];

ret[0] = _stick[0];
ret[0] -= 35;
ret[1] = stick[1];
ret[1] -= 27;

for (int x = 0; x < 2; x++)
{
ret[x] /= 193f;
}

return ret;
}

但我的结果只在 0 和 1 之间变化,所以我想我一定是这里做错了什么。

最佳答案

这应该可以解决问题:

float[] NormalizeStickData(float[] stickData)
{
return new[]
{
Normalize(stickData[0], 35, 228, 128, -1, 1, 0),
Normalize(stickData[1], 27, 220, 128, -1, 1, 0)
};
}

float Normalize(float value, float oldMin, float oldMax, float oldMid, float newMin, float newMax, float newMid)
{
if (value < oldMid)
return Interpolate(value, oldMin, oldMid, newMin, newMid);
else if (value > oldMid)
return Interpolate(value, oldMid, oldMax, newMid, newMax);
else
return newMid;
}

float Interpolate(float value, float oldMin, float oldMax, float newMin, float newMax)
{
return (float)(newMin + (newMax - newMin)*(value - oldMin)/(oldMax - oldMin));
}

Example

关于c# - 将值标准化为 -1 到 1 之间的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53696996/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com