2

Я не знаю, имеет ли процесс определенное имя. Я хочу получить многоугольник, который создается путем перевода многоугольника. Есть ли для этого алгоритм. Например: Example.Получить многоугольник, созданный перемещением многоугольника

Выпуклый корпус работает для выпуклых многоугольников, но я хочу общее решение. Также я был бы рад услышать, есть ли способ получить многоугольник, созданный вращением.

+0

Итак, вам нужны решения, которые также работают для вогнутых полигонов? – m69

+0

@ m69 Да. В противном случае работает выпуклая оболочка. –

+0

Ваша проблема не указана. Каким должен быть результат, когда, например, многоугольник W-образный и перетаскивается горизонтально? – Gene

ответ

4

Возможно, вы ищете Minkowski sum вашего полигона и отрезок, описывающий ваше движение.

CGAL library package 2D Minkowski Sums может их вычислить, например.

+0

Это тот ответ, который я искал. Спасибо. –

2

Учитывая объяснение вы дали в комментариях простой подход заключается в следующем:

Let v be a vector describing the linear movement 
For each edge (p,q) in the polygon 
    construct quadrilateral (p, q, q+v, p+v) 
Compute the union of all the quadrilaterals plus the original polygon 

Computing многоугольник объединения является хорошо изученной проблема с эффективными алгоритмами.

+0

Объединение четырехугольников * и * оригинального или переведенного многоугольника; в противном случае, если вы слегка перемещаете многоугольник, вы получаете узкий контур. – m69

+0

@ m69 Хороший улов. Благодарю. – Gene

+0

Хороший алгоритм, и его легко реализовать. Но похоже, что существует более эффективное решение. Благодарю. –