Я не думаю, что есть простое решение.
Я хотел бы обратиться к этому, взяв каждый круг по очереди и выполняя логическое вычитание всех других кругов. (Круги, которые достаточно далеко - R0 + R1 < D12 - не будут мешать.)
После того, как куски были съедены, круг становится криволинейным многоугольником из круговых дуг или множеством таких полигонов, быть сломанным. Многоугольник может быть представлен списком кругов, которые вносят дугу его контура, а конечные точки дуг определяются общим пересечением двух последовательных соседей или окружности цели и соседа. Обратите внимание, что один и тот же сосед может появляться несколько раз.
Чтобы сделать вещи немного больше, полигоны могут иметь отверстия, которые вам также необходимо представлять.
Тогда важной операцией является вычитание круга из криволинейного многоугольника. Вам нужно обнаружить дуги, которые полностью находятся внутри нового круга, и те, которые пересекают его. После получения оставшихся частей дуг вам необходимо перестроить оставшиеся дуги и новые (ы).
Я думаю, что все эти операции могут быть построены из одного примитива, который находит часть дуги (определяемую тремя кругами), которая находится внутри диска.
Рассмотрите большой круг, и его граница полностью покрыта небольшими кругами. Центр большого круга определенно не будет покрыт небольшими кругами. И если я правильно понимаю вопрос, это касается кругов с их интерьером. – maxim1000
Правильно. Белые круги соответствуют области, а другой круг может перекрывать эту область или ее часть. Это то, что мне нужно проверить. – oscarm
Да, вы правы! Хорошая точка зрения. Голосуйте! : D – forestgril