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

Math 确定给定圆的两个扇区是否相交?,math,geometry,geospatial,trigonometry,augmented-reality,Math,Geometry,Geospatial,Trigonometry,Augmented Reality,有人知道如何确定同一圆的两个扇区是否相交吗 假设有一个扇区a,用起始角A1和结束角A2表示,还有一个扇区B,用起始角B1和结束角B2表示。所有角度的范围为0..2*PI弧度(或0..360度) 如何确定角度A是否与角度B相交 我尝试了一种类似以下内容的变体: if(a1 <= b2 && a2 >= b1) { // the sectors intersect } else { // the sectores doesn't intersect }

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

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

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

我尝试了一种类似以下内容的变体:

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

提前感谢。

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

// 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...
}
//方位角的绝对差使路径保持在0..2*pi范围内
单向浮动=abs(A0-B0);
// .. 但这可能不是最短的,所以也可以尝试另一种方法
浮动其他方式=2*pi-单向;
if(最小值(单向,另一向)<(objectWidthInRadians+viewPortWidthInRadians))
{
//对象是可见的。。。
}

请注意,您的
width
定义有点奇怪(似乎实际上是半角),并且为
A1
等显示的计算实际上并不符合规定的
[0..2*pi]
范围…

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

// 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...
}
//方位角的绝对差使路径保持在0..2*pi范围内
单向浮动=abs(A0-B0);
// .. 但这可能不是最短的,所以也可以尝试另一种方法
浮动其他方式=2*pi-单向;
if(最小值(单向,另一向)<(objectWidthInRadians+viewPortWidthInRadians))
{
//对象是可见的。。。
}

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

嗨,我尝试了您的代码,但似乎对这些测试值不起作用(所有值都以度为单位)方位A0=337.5航向B0=97.37 objectWidth=72.86 viewportWidth=60方位(A)范围为[337.5..37.5],而航向(B)范围为[97.37..170.23]。很明显,航向范围(B)与方位(A)没有重叠,但你的答案是上面的。单向=245.13,另一条=114.87,objectWidth+viewPortWidth=132。86@adib此处显示的范围是单向计算的,即
[标题,标题+宽度]
,而问题中显示的代码是双向的,
[标题宽度,标题+宽度]
。(这就是我关于半角的注释所涉及的。)在单向情况下,您需要将用于测试碰撞的宽度之和减半。感谢您的解释(我以为您的答案是[heading,heading+width]约定,所以我更改了代码)。粗略的测试表明你的配方似乎有效。谢谢你的回答。嗨,我已经试过你的代码,但对于这些测试值(所有值都以度为单位)来说似乎不起作用,方向角A0=337.5,标题B0=97.37,对象宽度=72.86,视口宽度=60,方向角(A)范围是[337.5..37.5],而标题(B)范围是[97.37..170.23]。很明显,航向范围(B)与方位(A)没有重叠,但你的答案是上面的。单向=245.13,另一条=114.87,objectWidth+viewPortWidth=132。86@adib此处显示的范围是单向计算的,即
[标题,标题+宽度]
,而问题中显示的代码是双向的,
[标题宽度,标题+宽度]
。(这就是我关于半角的注释所涉及的。)在单向情况下,您需要将用于测试碰撞的宽度之和减半。感谢您的解释(我以为您的答案是[heading,heading+width]约定,所以我更改了代码)。粗略的测试表明你的配方似乎有效。谢谢你的回答。