android - 接近 2D 位置

标签 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;

还有其他方法吗?如果不是,我的哪个解决方案会更快?感谢您的帮助。

最佳答案

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

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

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

关于android - 接近 2D 位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6405583/

相关文章:

android - 在 Android 和 iOS 上的 Unity 中录制屏幕视频的最佳方式?

math - 确定一个点是否位于特定的几何区域内

language-agnostic - 有人可以解释这个立方体旋转脚本如何工作的数学原理吗?

javascript - 在 JavaScript 中查找 Angular

java - 处理:弧码只创建圆。如何正确识别起始值和终止值

java - 怎么听EditText?

android - 如何在 android 中选项卡方向更改时删除进度对话框

android - 应定义“名称”属性 - android list 中的错误

c - 如何使用字符串划分大数

javascript - 根据另一个矩形的旋转移动矩形的位置