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