我有一个由三个变量描述的对象(即矩形):x (int), y (int)
- 对象的位置和rangel (float)
- 指示对象方向移动的天使。现在我想用它的方向(天使)来转换对象中的对象。我想出了如何计算它的新坐标:
x += (int)(shift*Math.sin(Math.toRadians(rangel));
y -= (int)(shift*Math.cos(Math.toRadians(rangel));
但我不确定这种方法是否足够有效。你现在有没有其他方法来执行这个操作,但是这比上面提到的更快?感谢。
答案 0 :(得分:1)
根据this thread Math.sin不一定使用最佳实现。 由于你已经转换为int,我强烈建议使用一些近似而不是Math.sin。我发现this post似乎为近似sin(x)提供了准确而快速的算法。我很确定你会找到cos(x)的近似值,或者可以从给定的解决方案中自己推导出它。
此外,我认为对于忽略小数精度的特殊情况,有更快的近似值。
祝你好运, SAM
答案 1 :(得分:0)
这是以角度平移对象的正确方法。如果角度是任意的,则没有更快的方法。
答案 2 :(得分:0)
首先计算Math.toRadians(rangel)
并将其存储在局部变量中可能稍快一些,因此您只需计算一次,而不是两次。但是这样做的节省很小。除此之外,这看起来对我来说非常理想。
但请注意,如果rangel
只有少量不同的可能值(例如,您只能在24个不同的方向上移动对象,或类似的东西),那么你就会通过使用sin
和cos
值的查找表来节省一些费用。