Android 接近2D位置

Android 接近2D位置,android,math,trigonometry,sqrt,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 =

我开始研究一个概念,它要求我找到一种方法,以给定的速度将矩形移动到给定的点。我是为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;

还有别的办法吗?如果不是,我的解决方案中哪一个会更快?谢谢您的帮助。

您可以使用的一个非常常见的方法是将所有内容都设置为平方/二的幂/^2

这种方法不使用sqrt,而只使用

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

想不出别的办法了。如果点不移动,你可以缓存单位向量。知道你正在做的操作叫做规范化向量可能会有帮助。哦,谢谢,我没有想到这一点。令人惊讶的是,我以前从未见过它。