1

同じ円の 2 つのセクターが交差しているかどうかを判断する方法を知っている人はいますか?

開始角度 A1 と終了角度 A2 で表されるセクター A と、開始角度 B1 と終了角度 B2 で表されるセクター B があるとします。すべての角度の範囲は 0..2*PI ラジアン (または 0..360 度) です。

角度 A が角度 B と交差するかどうかを判断する方法は?

次のような2 つの四角形の交差問題のバリエーションを試しました。

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

前もって感謝します。

4

1 に答える 1

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(実際には半角のようです)、A1etcに示されている計算は実際には指定された[0..2*pi]範囲に収まりません...

于 2010-08-25T08:55:50.613 に答える