如何检测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;
}
答案 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
}