2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Площадь пересечения секторов круга
Сообщение24.07.2015, 20:12 
Граждане, помогите плз. с таким вопросом
Есть круг c центром $O$, на окружности которого отмечены точки $A$, $B$, $C$, $D$ и $R$
Радиусы к точкам $A$, $B$, $C$, $D$ образуют два сектора. Первый сектор $AOB$ ограничен радиусами $OA$ и $OB$, второй сектор $COD$ - радиусами $OC$ и $OD$. Нужно найти площадь наложения этих секторов друг на друга.

Известны углы радиусов $OA$, $OB$, $OC$, $OD$ относительно радиуса $OR$ - его принимаем за систему отсчета, $0^{\circ}$.
Секторы могут накладываться друг на друга, могут не накладываться. Точки $A$, $B$, $C$, $D$ могут быть расположены на окружности в любом порядке.

Если $\angle ROA <\angle ROB$ и $\angle ROC <\angle ROD$, то всё считается - берем $\max (\min (\angle ROB,\angle ROD) - \max (\angle ROA,\angle ROC),0)$ - дальше по формуле площади сектора.

Но вот что делать, если $\angle ROA = 300^{\circ}$, а $\angle ROB=60^{\circ}$? т.е. сектор повернут как бы "через $0^{\circ}$" (радиус $OR$ оказывается внутри одного или двух секторов)? По идее, надо как-то повернуть оба сектора на некоторый угол, чтобы возникла ситуация, когда они не проходят "через $0^{\circ}$". На какой именно угол нужно повернуть?

Вообще, насколько понимаю, возможны следующие разновидности наложений секторов:
  1. Если оба сектора не проходят через $0^{\circ}$, то это можно описать как
    1. сектора не накладываются друг на друга.
    2. сектора накладываются друг на друга одним участком (тогда считаем угол сектора наложения по формуле, приведенной выше).
  2. Если один или оба сектора проходят через $0^{\circ}$, то тут уже такие варианты:
    1. сектора не накладываются друг на друга.
    2. сектора накладываются друг на друга одним участком
    3. сектора накладываются двумя участками (например, $\angle ROA=90^{\circ}, \angle ROB = 15^{\circ}, \angle ROC=60^{\circ} и \angle ROD=30^{\circ}$)

В общем, голову поломал уже, плиз хелп.

 
 
 
 Posted automatically
Сообщение24.07.2015, 20:48 
Аватара пользователя
 i  Тема перемещена из форума «Помогите решить / разобраться (М)» в форум «Карантин»
Причина переноса: формулы не оформлены $\TeX$ом

MaxZ
Наберите все формулы и термы $\TeX$ом.
Инструкции по оформлению формул здесь или здесь (или в этом видеоролике).
См. также тему Что такое карантин, и что нужно делать, чтобы там оказаться.
После исправлений сообщите в теме Сообщение в карантине исправлено, и тогда тема будет возвращена.

 
 
 
 Posted automatically
Сообщение26.07.2015, 13:16 
 i  Тема перемещена из форума «Карантин» в форум «Помогите решить / разобраться (М)»

 
 
 
 Re: Площадь пересечения секторов круга
Сообщение26.07.2015, 13:45 
Под сектором Вы понимаете штуку с раствором меньше $180^\circ$ (что вовсе не для всех обязательно, поэтому стоит оговорить).
Вам, возможно, помогут переопределения углов типа
если $\alpha - \beta < -180$, то $\alpha=\alpha+360$ либо $\beta=\beta-360$.
Например, так:
Код:
if (a - b < -180) {
    if (a <= 0) {a = a+360;} else {b=b-360;}
} else if  (a - b > +180) {
    if (a >= 0) {a = a-360;} else {b=b+360;}
}

 
 
 
 Re: Площадь пересечения секторов круга
Сообщение26.07.2015, 14:19 
Аватара пользователя
Алексей К. в сообщении #1040625 писал(а):
Под сектором Вы понимаете штуку с раствором меньше $180^\circ$ (что вовсе не для всех обязательно, поэтому стоит оговорить).

Вряд ли -- в таком случае не получить два участка наложения.

С другой стороны, здесь тоже не понятно:
MaxZ в сообщении #1040235 писал(а):
сектора накладываются двумя участками (например, $\angle ROA=90^{\circ}, \angle ROB = 15^{\circ}, \angle ROC=60^{\circ} и \angle ROD=30^{\circ}$)

Если бы $A$ и $B$ поменять местами, тогда было бы два участка, а так весь первый сектор попал внутрь второго.

Какую помощь Вы ожидаете? Проверить, что у Вас все случаи разобраны? или ещё что-то?

MaxZ в сообщении #1040235 писал(а):
На какой именно угол нужно повернуть?

Зачем? Если варианты и так можно перебрать, то не нужно усложнять.

MaxZ в сообщении #1040235 писал(а):
В общем, голову поломал уже, плиз хелп.

Может, тупо и методично перебрать все варианты $>,\ <$ между точками? В полном переборе их будет 24 варианта. Как-то не очень весело. Зато надёжно :D А откуда пришла задача?

 
 
 
 Re: Площадь пересечения секторов круга
Сообщение26.07.2015, 15:11 
grizzly в сообщении #1040628 писал(а):
Вряд ли -- в таком случае не получить два участка наложения.
Видимо, до этого места не дочитал.

Но тогда надо определиться, какой из двух вариантов сектора ($AB$ --- 100 градусов или 260?) рассматривается.
Либо это известно заранее --- тогда в алгоритме надо этот факт зафиксировать. Например, этот случай
MaxZ в сообщении #1040235 писал(а):
Но вот что делать, если $\angle ROA = 300^{\circ}$, а $\angle ROB=60^{\circ}$?
описывать
или как $60\to 300\; (+240)$
или как $300\to 420\; (+120)$.

Либо это заранее не известно --- тогда не избежать перебора вариантов $AB\cap CD$, $AB\cap DC$, $BA\cap CD$, $BA\cap DC$.

В любом случае полезно обеспечить договорённости:
а) значения углов, например, неотрицательны: $\varphi_i\geqslant 0$ (или $\varphi_i>-180^\circ$ --- смотря по тому, как работает Ваша функция atan2(y,x)).
б) сектор заметается против часовой стрелки: значения углов поправляются так, что конечное значение всегда больше начального (+120, +240).

По-моему, это упростит анализ (на этот раз думать мешает обилие лисичек, поберёзовиков и помидоров).

 
 
 
 Re: Площадь пересечения секторов круга
Сообщение26.07.2015, 19:39 
Спасибо за комментарии.
Сектор может быть развернут на любой угол менее 360, предположим, с шагом в 1.
Вот как я считаю:
  1. если $\angle ROA<\angle ROB$ и $\angle ROC<\angle ROD$, то угол сектора пересечения $\gamma = \max (\min (\angle ROB,\angle ROD)-\max (\angle ROA,\angle ROB),0)$.
  2. если $\angle ROA>\angle ROB$ и $\angle ROC<\angle ROD$, то угол сектора пересечения $\gamma = \max (\angle ROA-\angle ROD,0)+\max (\angle ROB-\angle ROC,0)$.
  3. если $\angle ROA<\angle ROB$ и $\angle ROC>\angle ROD$, то угол сектора пересечения $\gamma = \max (\angle ROD-\angle ROA,0)+\max (\angle ROC-\angle ROB,0)$ (здесь, по сравнению с предыдущим случаем, уменьшаемое и вычитаемое меняются местами).
  4. если $\angle ROA>\angle ROB$ и $\angle ROC>\angle ROD$ (оба сектора пересекают $0^\circ$), то.... вот тут и затык.
Алексей К. в сообщении #1040639 писал(а):
б) сектор заметается против часовой стрелки: значения углов поправляются так, что конечное значение всегда больше начального (+120, +240).
Вот в этом направлении никак не получается додумать до конца: какой из углов нужно взять как поправочный? Ведь оба сектора должны повернуться синхронно, чтобы конечное значение в обоих секторах было больше начального. Мне кажется, что именно здесь и лежит решение по упрощению алгоритма - условно, если мы повернем сектора на некий угол (скорее всего, это будет один из начальных углов?), то тогда надобность в проверке условий по п.2,3,4 отпадет, и мы будем решать только п.1

Вопрос именно в том, как упростить - как говорится, нутром чую, что можно не перебирать все эти варианты расположения точек. Но никак не могу нащупать, на какой угол, как его определить.

 
 
 
 Re: Площадь пересечения секторов круга
Сообщение26.07.2015, 20:52 
Аватара пользователя
MaxZ
Вам действительно кажется, что Ваш подход проще?

Давайте, я ещё раз попробую поагитировать за перебор всех вариантов.
Нас интересует порядок расположения точек при движении по окружности против часовой. У нас окружность, следовательно нам инвариантно с какой буквы начинать. Начинать будем всегда с буквы $A$. Вот полный перебор вариантов:
$ABCD$ -- нет пересечений.
$ABDC$ -- пересечение равно $AB$.
$ACBD$ -- пересечение равно $CB$.
$ACDB$ -- пересечение равно $CD$.
$ADBC$ -- пересечение равно $AD$.
$ADCB$ -- пересечение равно $CB\cup AD$.

Кажется, всё.

 
 
 
 Re: Площадь пересечения секторов круга
Сообщение27.07.2015, 09:02 
grizzly в сообщении #1040690 писал(а):
порядок расположения точек при движении по окружности против часовой.

Наверное, всё же по часовой?
Спасибо за наводку, подумаю в этом направлении.

 
 
 
 Re: Площадь пересечения секторов круга
Сообщение27.07.2015, 09:17 
Аватара пользователя
MaxZ в сообщении #1040755 писал(а):
Наверное, всё же по часовой?

Вопрос договорённости, конечно, но всегда в таких случаях ездят против часовой. Вы же углы будете против часовой отмерять, как все нормальные люди?

Если бы Вы ответили на мой первый вопрос про "откуда задача", было бы проще. Ведь в зависимости от целей, разные подходы к решению могут быть в разной степени удобны. Если Вам для компьютерной программы, например (я это предположил), то перебор небольшого количества простых вариантов обычно предпочтительнее, чем поиск сложной общей формулы.

 
 
 
 Re: Площадь пересечения секторов круга
Сообщение27.07.2015, 10:55 
grizzly в сообщении #1040759 писал(а):
Вы же углы будете против часовой отмерять, как все нормальные люди?

ммм... нет :) я воображаю круг, где $0^\circ$ - вверху, и отмеряю градусы по часовой.

grizzly в сообщении #1040759 писал(а):
"откуда задача", было бы проще

может быть.
Изначально задача пришла из задачи, требующей решения в Excel, по определению пересечения двух смен работы оборудования, когда смены указаны только часами, без указания дат. В Excel время суток указывается как доля от 1 (сутки принимаются за 1).
В процессе размышлений над этой задачей возник 24-часовой циферблат, который прекрасно преобразовался в круг с секторами. А что находить для сектора - площадь, длину дуги или центральный угол - не так важно, всё равно всё упирается в центральный угол, который может быть преобразован в долю от $360^\circ$, т.е. долю суток в исходной задаче.

Задача в Excel решается массой способов, в том числе кучей вложенных конструкций ЕСЛИ() и так далее. Однако в итоге формулы получаются очень громоздкие, и хотелось бы эту формулу оптимизировать. Плюс к этому, не давало покоя ощущение, что должно существовать более элегантное математическое или тригонометрическое решение, чем куча проверок входных параметров (или, хотя бы, сводящее проверки к минимуму).

 
 
 
 Re: Площадь пересечения секторов круга
Сообщение27.07.2015, 11:34 
Аватара пользователя
MaxZ в сообщении #1040774 писал(а):
ммм... нет :) я воображаю круг, где $0^\circ$ - вверху, и отмеряю градусы по часовой.

Нужно предупреждать, если Вы знаете, что Ваши обозначения противоречат общепринятым в математике.

Для экселя мой вариант тоже будет проще других, я думаю. Я исхожу из следующего: когда Вы решаете задачу для (условно) практических целей и есть шанс, что Ваше решение будут использовать другие люди (начальники смен для работы или преподаватели для оценки Ваших знаний, неважно), то решение, построенное на нескольких однотипных формулах с прозрачной логикой будет восприниматься намного проще, чем одна навороченная формула. И ошибку проще будет найти / исправить и шаблон для других целей потом использовать.

 
 
 
 Re: Площадь пересечения секторов круга
Сообщение27.07.2015, 11:53 
grizzly в сообщении #1040783 писал(а):
Нужно предупреждать, если Вы знаете, что Ваши обозначения противоречат общепринятым в математике.

Простите, не знал, что мои обозначения противоречат общепринятым, честно.
В любом случае спасибо за подсказки.

 
 
 [ Сообщений: 13 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group