3

如何检测 2D 移动对象何时越过自己的路径? 在此处输入图像描述

我将路径存储为基于平面先前位置的点数组。
可以使用伪代码或任何编程语言来描述解决方案。

这是我已经尝试过的代码 - 它检测到完整的 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;
    }
4

1 回答 1

1

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

y = mx+q±­tolerance

让我解释一下:这条线是曲线在您检查是否存在碰撞的点处的切线,这是“飞机”在该点所遵循的线。容差将使线向上移动一点,也向下移动一点。所以你得到 2 条平行线,女巫可以被视为边界。您还必须在 x 轴上设置公差

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

如果所有这些都设置好了,那么您必须这样做:

if(y_point < mx+q+tolerance && y_point> mx+q-tolerance && x_points > x-tolerance && x_point< x+tolerance
{
// some code
}
于 2013-01-20T18:20:58.510 回答