我数学不好,觉得这应该很容易,但我希望它是优雅的,而不是一个黑客。
我有一个360度的角度,需要计算到255度的旋转自由度。人进入角度,精确输出至255度圆。
int north = 90;
float outputNorth = north/360f * 255f; //Results: 90 angle-> 63 angle但它必须是:
int north = 90;
float outputNorth = north/xf* yf; //Results: 90 angle -> 128 angle问题:对于255度的旋转,和弦有点奇怪。不知道怎么翻译。
Should be the following:
//90 -> 128
//0 -> 192
//270 -> 0
//180 -> 64

发布于 2020-06-13 07:41:45
你的数学有一些四舍五入的问题。我将使用不同的映射,其中360 deg将是256 -> 0而不是255。否则,您的8位值将有相同的角度0存储两次,这很可能会导致其他问题后。
这里使用线性插值对deg/8位进行转换
int i; // angle [deg int]
int o; // 0..255 [8bit uint]
o=(192-((i<<8)/360))&255;
i=((192-o)*360)>>8;在这里,值:
i o
0 192
90 128
180 64
270 0
360 192i可以是任何甚至是负的或大于360度的转换将仍然工作.
https://stackoverflow.com/questions/62353643
复制相似问题