Задача алгоритма ребра многоугольника - PullRequest
1 голос
/ 15 июня 2011

У меня есть 2D многоугольники, вершины которых расположены в локальном пространстве многоугольников.Я пытаюсь вычислить новые вершины, которые будут образовывать ребро одинаковой длины внутри многоугольника.

В настоящее время для вычисления ребра я в основном сужаю исходные вершины.Для каждой вершины многоугольника я вычисляю отрицательный единичный вектор и умножаю его на постоянный коэффициент длины ребра.Затем я добавляю это к исходной вершине многоугольника.

Псевдокод: const float edgeLength = 0.5; for each vertex v vec2 n = -v.unit(); vec2 edgeVertex = v + n * edgeLength;

Результат отлично работает на правильных многоугольниках: снимок экрана 1

Однако в других многоугольниках, таких как прямоугольники, длины ребер не одинаковы: снимок экрана 2

Я пробовал много разных попыток, но пока ничего не работает, любая помощь будет принята с благодарностью, спасибо!(Пожалуйста, не обращайте внимания на то, что полигоны отображаются в 3D, фактические данные полигонов - 2D).

1 Ответ

1 голос
/ 15 июня 2011

Переместите каждый край на фиксированное расстояние в направлении, перпендикулярном краю (все влево, если края идут против часовой стрелки). Затем вычислите пересечения новых ребер - это новые вершины.

...