0

我有一个传感器,它对在其范围内移动的物体施加力。我想确定一个身体是否正在接触该传感器的中心。

我可以轻松检测物体是否在传感器内部/接触传感器或另一个物体,但我不确定如何检查物体是否在给定传感器的中心。

编辑:传感器实际上是我在这个问题中询问的涡流。当物体接触(或实际上在其中或之上)传感器时,它会向其自身的中点施加力。当物体到达中点时,我希望它们做一些事情,但我不确定如何检查给定的身体是否在接触/在传感器的边界内并接触到它的中点。

在下面的(画得非常好)图中,蓝色圆圈是传感器,绿色圆圈是身体,小蓝点是中点。

在此处输入图像描述

更新:最后我在中间放了一个传感器并检查了它——这是最简单的方法。

4

1 回答 1

0

我认为这会奏效。

  1. 将传感器的世界位置转换为您要测试的身体的局部点。
  2. 循环遍历 body 的所有夹具,并检查您转换的本地点是否在夹具中。
  3. 如果你找到一个,打破。否则它不会接触到身体的中心。

我的Objective-C不好,所以我会用C++写一个代码示例:

bool checkForTouchingCenter(b2Body *sensorBody, b2Body *bodyToTest)
{

    b2Vec2 sensorPosition = sensorBody->GetPosition();
    b2Vec2 localPosition = bodyToTest->GetLocalPoint(sensorPosition);

    // An AABB check would be nice here, unless you test only the bodies that
    // are already touching the sensor.

    for (b2Fixture *fixture = bodyToTest->GetFixtureList(); fixture != 0; fixture = fixture->GetNext())
    {
        if (fixture->TestPoint(localPosition))
        {
            return true;
        }
    }
    return false;

}

提示:仅测试已经接触传感器的物体。

于 2012-05-23T19:04:36.180 回答