Существует действительно не простое решение вашей проблемы, особенно с кривыми (безьерами и сплайнами). Помимо сложностей отсечения полигонов существует значительная проблема восстановления обрезанных кривых (предполагая, что вы хотите, чтобы результат отсечения оставался в виде безьеров и сплайнов, а не только «сплющенных» приближений линий).
Недавно я выпустил бета-версию * в мою библиотеку обрезки полигона «Clipper», которая делает обрезку линии-полигона и линии (там, где строки также могут быть кривыми). Однако, хотя основная библиотека написана в Delphi, C++ & C#, новый бета-код до сих пор только в Delphi, который может вам не помочь. Тем не менее, если вы посмотрите на код, вы поймете, почему я утверждаю, что нет простого решения.
- Редактировать 15 Июл 2011: Этот «обновление» не получил за этой бета-версии, и теперь просто «проверка концепции». В настоящее время он основан на старой версии моей библиотеки Clipper и нуждается в основном переписывании, чтобы быть легкодоступным и расширяемым. (На каком-то этапе я могу вернуться к нему, но я в настоящее время намерения по дальнейшему совершенствованию библиотеки ядра.) Тем не менее, это «проверка концепции» Delphi код может быть загружен here
Спасибо.Какой метод вы использовали для обрезки кривых? – Buzz
Подход, который я взял, первоначально состоял в том, чтобы сгладить кривые (и маркировать каждый сплющенный сегмент), поскольку алгоритм отсечения работает только на линиях. Как только пересечения обнаружены, помеченные сегменты используются для идентификации подсегментов кривой (алгоритм де Кастеляу). Затем речь идет о повторном применении алгоритма де Кастеля к исходной кривой, но только к частям кривой, которые содержат пересечения. Имеет ли это смысл? –
Да. Имеют смысл. Благодаря! – Buzz