如何在Box2D/Farseer中计算夹具和点之间的距离

本文关键字:夹具 之间 距离 计算 Box2D Farseer | 更新日期: 2024-11-01 00:19:30

基本上,我有一个固定装置和一个点。我想知道它们之间的距离(而不是它们的中心之间)。

我知道存在距离 API,但它仅适用于 2 个灯具:/

如何在Box2D/Farseer中计算夹具和点之间的距离

你应该知道更多的数学知识。两个物体之间的距离是它们坐标之间的矢量长度。Farseer 使用 Xna 类型 Vector2 或 Vector3。只需减去两个所需的向量即可获得所需的向量,并通过相应向量类型的方法获得长度。灯具的坐标位于其主体位置下。

对于使用灯具形状到特定点的距离,只需从中创建假点形状(用于您的需要具有最小半径的圆),然后使用距离类。

float getDistance(Vector2 point, Fixture fixture)
{
    var proxyA = new DistanceProxy();
    proxyA.Set(fixture.Shape, 0);
    var proxyB = new DistanceProxy();
    // prepare point shape
    var pointShape = new CircleShape(0.0001, 1);
    proxyB.Set(pointShape, 0);
    Transform transformA;
    fixture.Body.GetTransform(out transformA);
    Transform transformB = new Transform();
    transformB.Set(point, 0);
    DistanceOutput distance;
    SimplexCache cache;
    FarseerPhysics.Collision.Distance.ComputeDistance(out distance, out cache,
                new FarseerPhysics.Collision.DistanceInput(){
                    UseRadii=true,
                    ProxyA=proxyA,
                    ProxyB=proxyB,
                    TransformA=transformA,
                    TransformB=transformB
                });
}