0

我正在开发另一个 3d 游戏引擎并遇到以下问题。为了提高性能,我想检查两个对象是靠近还是远离。只有当它们彼此靠近时才会发生碰撞检测。

目前,代码使用两个对象的位置计算当前距离。然后围绕速度矢量移动两个位置并计算预期距离。等等

public class Model{

    public boolean isApproaching(Model model) {
        float [] otherPosition = model.getPosition();
        float [] otherVelocity = model.getVelocity();
        double currentDistance = Math.pow(this.position[0] - otherPosition[0], 2)
                                + Math.pow(this.position[1] - otherPosition[1], 2)
                                + Math.pow(this.position[2] - otherPosition[2], 2);
        double expectedDistance = Math.pow(this.position[0] + this.velocityVector[0]/1000 - otherPosition[0] - otherVelocity[0]/1000, 2)
                                + Math.pow(this.position[1] + this.velocityVector[1]/1000 - otherPosition[1] - otherVelocity[1]/1000, 2)
                                + Math.pow(this.position[2] + this.velocityVector[2]/1000 - otherPosition[2] - otherVelocity[2]/1000, 2);
        if(currentDistance < expectedDistance)
            return false;
        return true;
    }

}

正如您在图片中看到的,它不适用于快速移动的物体。有什么好的方法可以显示两点是否相互靠近?

在此处输入图像描述

4

2 回答 2

1

鉴于这两条直线轨迹,它们会在一个独特的时间最接近,这可能已经过去了。如果是在过去,则意味着对象正在彼此远离,但如果是在未来,则意味着它们正在靠近。但即使他们越来越靠近,我猜想知道您需要多长时间才能获得信息,以便您可以安排何时担心它。这种方法应该同时适用于慢速移动和快速移动的物体。

于 2013-05-27T19:51:13.927 回答
1

您似乎/1000出于某种未说明的原因使用了与任何其他值相比,这可能会否定以下内容。

通过更改此比例因子,您可以更好地检测快速物体。执行相同的isApproaching()计算,但使用 a/(1000*N)而不是/1000。然后,您将有 N 倍更好的灵敏度来了解他们是否正在接近。

于 2013-05-28T03:36:00.547 回答