接近2D位置

时间:2011-06-19 22:57:15

标签: android math trigonometry sqrt

我开始研究一个概念,要求我找到一种方法,以给定的速度将矩形移向给定的点。我正在为Android开发,所以这是相对速度的关键(它可以计算每一帧可能有数百个对象。)

我能想到的解决方案如下:

float diff_x = x2 - x1;
float diff_y = y2 - y1;
float length = sqrt((diff_x * diff_x) + (diff_y * diff_y));
float dir_x = diff_x / len;
float dir_y = diff_y / len;

float move_x = dir_x * MOVE_SPEED;
float move_y = dir_y * MOVE_SPEED;

正如您所看到的,这种方式需要一个平方根,我知道这是非常昂贵的。我想到了一种使用三角法的替代方案,但它也很昂贵。

float diff_x = x2 - x1;
float diff_y = y2 - y1;
float angle = atan2(diff_y, diff_x);

float move_x = sin(angle) * MOVE_SPEED;
float move_y = cos(angle) * MOVE_SPEED;

还有其他方法吗?如果没有,我的哪种解决方案会更快?谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

你可以使用的一个非常常见的技巧是将所有平方/幂/ 2 / ^ 2

这种方式而不是使用sqrt,你只需使用

length = (diff_x * diff_x) + (diff_y * diff_y);
diff_x*diff_x/length