将 360 度的自定义部分映射到从 0 到 1 的浮点数
Map a custom portion of 360 degress to an float from 0 to 1
我正在从我的传感器获取从 0
到 360
的输入。但我想映射事物,因此 340
度等于 0
并且 20
度等于 1
。
我试过使用 map
函数
float myInput = readData();
float myVar = map(myInput, 0, 360, 0, 1);
但这只会让 340
高于 20
。我认为它从 340
到 0
然后到 20
的事实使事情变得复杂。当我的较低点的数字高于较高点时,有没有办法将 360
度的自定义部分从 0
映射到 1
?
您可以先将输入转换为不同的范围。像这样:
if(myInput > 180) {
myInput = myInput - 360;
}
这会将 340
之类的值转换为 -20
。所以现在你的输入范围是 -20
到 20
你可以使用 map
函数:
float mappedInput = map(myInput, -20, 20, 0, 1);
您没有说明如果您的输入超出该范围会发生什么,因此您可能需要更加仔细地考虑这些情况,但一般方法应该可行。
我正在从我的传感器获取从 0
到 360
的输入。但我想映射事物,因此 340
度等于 0
并且 20
度等于 1
。
我试过使用 map
函数
float myInput = readData();
float myVar = map(myInput, 0, 360, 0, 1);
但这只会让 340
高于 20
。我认为它从 340
到 0
然后到 20
的事实使事情变得复杂。当我的较低点的数字高于较高点时,有没有办法将 360
度的自定义部分从 0
映射到 1
?
您可以先将输入转换为不同的范围。像这样:
if(myInput > 180) {
myInput = myInput - 360;
}
这会将 340
之类的值转换为 -20
。所以现在你的输入范围是 -20
到 20
你可以使用 map
函数:
float mappedInput = map(myInput, -20, 20, 0, 1);
您没有说明如果您的输入超出该范围会发生什么,因此您可能需要更加仔细地考虑这些情况,但一般方法应该可行。