0

我有一个由三个变量描述的对象(即矩形):x (int), y (int)- 对象的位置和rangel (float)- 指示对象方向运动的角度。现在我想根据它的方向(天使)来翻译对象。我想出了如何计算它的新坐标:

x += (int)(shift*Math.sin(Math.toRadians(rangel));
y -= (int)(shift*Math.cos(Math.toRadians(rangel));

但我不确定这种方法是否足够有效。您现在是否有任何其他方式来执行此操作,但这会比上面介绍的更快?谢谢。

4

3 回答 3

1

根据这个线程Math.sin 不一定使用最佳实现。由于您已经转换为 int,我强烈建议使用一些近似值而不是 Math.sin。我发现这篇文章似乎为近似 sin(x) 提供了一种既准确又快速的算法。我很确定您会找到 cos(x) 的近似值,或者可以从给定的解决方案中自行推导出它。

此外,我认为对于忽略小数精度的特殊情况,还有更快的近似值。

最好的问候,山姆

于 2013-09-22T10:10:13.260 回答
0

这是将物体平移一个角度的正确方法。如果角度是任意的,那么就没有更快的方法了。

于 2013-09-22T09:35:30.377 回答
0

首先计算并将其存储在局部变量中可能会稍微快一些Math.toRadians(rangel),因此您只需计算一次,而不是两次。但由此节省的资金将是微乎其微的。除此之外,这对我来说看起来非常理想。

但是请注意,如果只有少量不同的可能值rangel(例如,您只能在 24 个不同的方向上移动对象,或类似的东西),那么您可以通过使用外观来节省一些成本——sincos值的表。

于 2013-09-22T10:02:11.933 回答