Кто-нибудь знает, как определить, пересекаются ли два сектора одного круга?Определите, пересекаются ли два сектора данного круга?
Предположим, что у меня есть сектор 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
Заранее спасибо.
Привет, Я попробовал ваш код, но не похоже на работу для этих тестовых значений (все значения в градусах) подшипник A0 = 337,5 заголовок B0 = 97.37 objectWidth = 72.86 vie wportWidth = 60 Диапазон подшипников (A) равен [337.5..37.5], тогда как диапазон заголовка (B) равен [97.37..170.23]. Очевидно, что диапазон заголовков (B) не перекрывается с подшипником (A), но вы отвечаете выше, передает его. oneWay = 245.13, otherWay = 114.87, objectWidth + viewPortWidth = 132.86 – adib
@adib Диапазоны, которые вы показываете здесь, вычисляются в одностороннем порядке, т.е. '[заголовок, заголовок + ширина]', тогда как код, показанный в вопросе, является двусторонним, '[ширина заголовка, заголовок + ширина]'. (Это то, к чему относится моя заметка о полууголе.) В одностороннем случае вам нужно вдвое уменьшить сумму, используемую для проверки столкновений. – walkytalky
спасибо за объяснение (я думал, что ваш ответ для соглашения [заголовок, заголовок + ширина], поэтому я изменил свой код). Грубые проверки показывают, что ваша формула работает. Спасибо за ваш ответ. – adib