Определить дугу, на которую "закатится" шарик
От: saturas  
Дата: 27.07.10 07:12
Оценка:
Добрый день. Натолкните пожалуйста на верную мысль.
Задача такая.


Дан отрезок. Из конца отрезка выходит N дуг окружности.
Известно, что дуги не пересекаются с отрезком и друг другом (кроме единственной точки А, см. рисунок).
По отрезку катится шарик. Когда он достигает точки А, он "закатывается" на одну из дуг и продолжает движение.
По нашему бытовому опыту понятно, что это будет дуга под номером 1. Потому что она "выше" остальных. Если дуги 1 не будет — тогда на №2 и т.п.
Т.е. на рисунке я изобразил очередность, пронумеровав дуги.

Нужно сделать такую очередность сделать для произволного набора дуг (все параметры дуг и отрезка заданы, размер шарика значения не имеет — я его добавил просто для иллюстрации).

Сейчас это сделано через касательные — т.е. в точке пересечения вычисляем касательную, находим угол между касательной и отрезком, и упорядочиваем от наименьшего угла к наибольшему.
Но можно построить сколько угодно дуг,у которых касательные будут одинаковы, к примеру номера 2 и 3. Или рисунок b).
Пока есть только идея такая:
1.Упорядочить по углам касательных
2.Равные касательные упорядочить от наименьшего радиуса к наибольшему
Но если рассмотреть случай когда шарик катится по нижней части отрезка, то для верной последовательности придется делать наоборот — упорядочивать от наибольшего радиуса к наименьшему.
В общем как-то все запустанно получается. Может кто-нибудь предложит способ проще?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.