检测2D移动物体何时穿过自己的路径?

时间:2012-12-13 19:47:43

标签: math

如何检测2D移动物体何时越过自己的路径? enter image description here

我根据飞机的先前位置将路径存储为点阵列。
伪码或任何编程语言都可用于描述解决方案。

这是我已经尝试过的代码 - 它检测到完整的360循环。我想我需要一种不同的方法。

    CGFloat angleDiff = angleCurr - lastAngleRecorded;
    lastAngleRecorded = angleCurr;

    // Ensure -180 < angleDiff < 180
    angleDiff = angleDiff > M_PI ? angleDiff - (M_PI*2) : angleDiff;
    angleDiff = angleDiff < -M_PI ? angleDiff + (M_PI*2) : angleDiff;

    // Reset tracking of the loop of the plane's angle exceeds (turns too sharply) or falls below the limits

    if(fabsf(angleDiff) < angleDiffMinAllowed || fabsf(angleDiff) > angleDiffMaxAllowed) {
        if(++ringFaultCount >= ringFaultCountMax) {
            [self resetTracking];
            return;
        }
    }

    ringFaultCount = 0;

    // Add plane position to ring polygon
    [ringPoints addObject:[NSValue valueWithCGPoint: ccp(targetPlane.position.x, targetPlane.position.y)]];


    // Add angleDiff to angleTotal
    angleTotal += angleDiff;

    // Completed loop?
    if(fabsf(angleTotal) >= M_PI * 2.f) {

        [self resetTracking];

        if(isRingJoined){
            CCLOG(@"%@ RING COMPLETE", NSStringFromSelector(_cmd));
        }

        return;
    }

1 个答案:

答案 0 :(得分:1)

我也有问题,我通过在坐标系中做一条直线来解决它:

y = mx+q±­tolerance

让我解释一下: 该线是您检查是否存在碰撞的点处的曲线的切线,这是该点处“飞行器”所遵循的线。 公差将使线条向上移动一点点并且稍微向下移动一点。 所以你得到2个parralel线,女巫可以看作是边界。 你还必须在x轴上做出公差

m是线的方向,它是:tan(角度),角度是与x轴的角度。

如果完成所有设置,则必须执行此操作:

if(y_point < mx+q+tolerance && y_point> mx+q-tolerance && x_points > x-tolerance && x_point< x+tolerance
{
// some code
}