我有这个功能将旋转限制在0.0到360.0的范围内:
private float ClampRotation( float rotation ) {
while( rotation < 0.0f ) rotation += 360.0f;
while( rotation >= 360.0f ) rotation -= 360.0f;
return rotation;
}
这个函数效果很好,它可能效率不高,但我只是想知道是否有一个本机Java函数可以做同样的事情?
我得到的最接近的是Math.min / max,但它不能正常工作。 -10.0的旋转应该输出350.0而不是0.0,因为min / max会这样做。
答案 0 :(得分:4)
%(模数)适用于浮点值,因此请使用rotation % 360.0f
(之后需要将360.0添加到负数)
答案 1 :(得分:4)
使用模数运算符,然后使用小于0的值;
private float ClampRotation( float rotation ) {
rotation = rotation % 360f;
if (rotation < 0f) rotation += 360f;
return rotation;
}
答案 2 :(得分:3)
这只是数学......你可以这样做:
private float ClampRotation( float rotation ) {
return rotation+360.0f*Math.ceil(-rotation/360.0f);
}
我很确定没关系
答案 3 :(得分:1)
你有传统的缠绕角度,它比所需范围小一个数量级。
对于浮点模数有点奇怪 - 它为负数返回负数,所以你仍然必须有一个分支,它涉及一个除法,这在一些机器上比较慢(因为我没有找到一台机器在哪里%比使用两次或三次减法的循环要便宜得多。
如果您的值在-1000到+1000之间,那么您的版本更清晰,更快。如果您的值比这更宽,请选择基于模数的版本。如果它非常重要,请使用您要使用的值范围在硬件上进行测试。