将 360 度角映射到 255 度但坐标 x->y 被翻转的公式
Formula to map 360 angle to 255 but coords x->y are flipped
我的数学很烂,觉得这应该很简单,但我希望它优雅而不是 hack。
我有一个 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
你的数学有一些舍入问题。我会使用不同的映射,其中 360 度为 256 -> 0
而不是 255
。否则,您的 8 位值将具有相同的角度 0
存储两次,这很可能会导致其他问题。
这里转换to/fromdeg/8bit使用线性插值:
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 192
i
可以是任何负数或大于 360 度,转换仍然有效...
我的数学很烂,觉得这应该很简单,但我希望它优雅而不是 hack。
我有一个 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
你的数学有一些舍入问题。我会使用不同的映射,其中 360 度为 256 -> 0
而不是 255
。否则,您的 8 位值将具有相同的角度 0
存储两次,这很可能会导致其他问题。
这里转换to/fromdeg/8bit使用线性插值:
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 192
i
可以是任何负数或大于 360 度,转换仍然有效...