Re: Общая точка
От: subdmitry Россия  
Дата: 09.03.09 14:09
Оценка: 37 (3)
Здравствуйте, _defrager, Вы писали:

_>На плоскости разбросаны круги разных радиусов (не больше 25). Как можно определить имеется ли точка принадлежащая им всем ?


Три варианта.

1. Простой. Берется какая-то сетка, закрашиваются клетки, покрываемые всеми кругами (рисуются один за одним алгоритмом Брезенхема). Алгоритм приблизительный, чем точнее хочется иметь решение, тем больше брать точность сетки.

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

3. Сложный. Пересечение кругов — это или круг (возможно, нулевого радиуса) или этакий выпуклый многоугольник, у которого вместо строн дуги окружностей. Надо только написать процедуру, которая будет пересекать такую фигуру с очередной окружностью. Как это делать с целым кругом, надеюсь, понятно. Теперь многодугник Для этого будем рассматривать, как новый круг пересекается с каждой из дуг многодугника. Возможны три случая — а) новый круг содержит дугу целиком б) новый круг пересекается с дугой (в этом случае находим точки пересечения и строим на них стороны нового многодугника (эта сторона может заканчиваться как на этой дуге, так и на других дугах)) в) дуга за пределами круга (смотрим пересечения с другими дугами). Это уже точное решение.
And if you listen very hard the alg will come to you at last.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.