确定给定圆的两个扇区是否相交?

时间:2010-08-25 08:37:33

标签: math geometry geospatial trigonometry augmented-reality

有人知道如何确定同一个圆圈的两个扇区是否相交?

假设我有一个扇区A,用起始角度A1和结束角度A2表示,扇区B用起始角度B1和结束角度B2表示。所有角度范围为0..2 * PI弧度(或0..360度)。

如何确定角度A是否与角度B相交?

我尝试了two rectangle intersection problem的变体,如下所示:

if(a1 <= b2 && a2 >= b1) {
    // the sectors intersect
} else {
    // the sectores doesn't intersect
}

只要没有扇区超过0度点,这种方法就可以了。但如果任何一个扇区越过它,计算就会变得不正确。

潜在的问题是创建一个定向(基于标题)的增强现实应用程序。扇区A是对象,而扇区B是视口。角度如下:

A0 = bearing of the object
A1 = A0 - objectWidthInRadians
A2 = A0 + objectWidthInRadians

B0 = heading of the user (device)
B1 = B0 - viewportWidthInRadians
B2 = B0 + viewportWidthInRadians

提前致谢。

1 个答案:

答案 0 :(得分:1)

您真正关心的是轴承的最短差异是否小于碰撞范围:

// absolute difference in bearings gives the path staying within the 0..2*pi range
float oneWay = abs(A0 - B0);

// .. but this may not be the shortest, so try the other way around too
float otherWay = 2 * pi - oneWay;

if ( min(oneWay, otherWay) < (objectWidthInRadians + viewPortWidthInRadians) )
{
    // object is visible...
}

请注意,您的width定义有点奇怪(似乎实际上是半角),并且A1等显示的计算实际上并没有剪切到指定的[0..2*pi]范围...