通往某一点的路径上的最近点,或者:亲爱的目标,抱歉,我想念你

时间:2010-02-05 20:21:37

标签: math geometry

对于我正在研究的2D游戏,我想知道一个射弹何时到达其最接近目标的位置。

射弹是每帧移动一个常数dx,dy的点。 目标是另一个点,其相对于射弹的速度足够慢以至于被认为是静止的。 当它(大约)接近目标时,我希望抛射物爆炸。

计算这个的好方法是什么?

绝对精度并不重要,这是已在服务器上解析的事件的客户端模拟。我更喜欢一种像素完美的快速而简单的算法。

5 个答案:

答案 0 :(得分:5)

点与线之间的最小距离:(实际上问题归结为)

http://local.wasp.uwa.edu.au/~pbourke/geometry/pointline/

他的一般几何部分中的更多参考资料:

http://local.wasp.uwa.edu.au/~pbourke/geometry/

答案 1 :(得分:2)

计算与目标相交的路径的法线。法线和路径的交点将是目标路径上的最近点。

答案 2 :(得分:2)

跟踪之前的距离,并检查距离开始增加的第一时刻。

if ((currentDistance==0) || (currentDistance > previousDistance)) Explode()

只是这很简单,因为路径几何是微不足道的(即一条直线),但它的工作正常。

当目标比你描述的更快时,这还有一个额外的好处,只要两个轨道都是直的(或者至少是轻微的弯曲)。

限制,与爆炸的“大小”相比,步长需要小,否则这将无法正常工作。在这种情况下,您需要预先计算 next 距离......

答案 3 :(得分:1)

好像你的'弹丸'基本上是直线移动。

可视化的一个简单方法是变换2D平面,使线变为x轴。这将涉及arctan(dy / dx)的旋转。

将相同的变换应用于相关点,并获取y坐标。

如果您愿意,可以手动完成并弄清楚,但游戏API应该已经非常适合这一点。

答案 4 :(得分:0)

你可以使用毕达哥拉斯定理,它只使用(a)2 +(b)2 =(c)2公式。因此,您的距离将等于产品的SQUARE ROOT。这是一篇关于如何使用网格上的点实现它的好文章。

http://www.mathwarehouse.com/algebra/distance_formula/