Как сместить края многоугольника? - PullRequest
0 голосов
/ 04 января 2019

У меня есть список point2D, который делает замкнутый многоугольник.Теперь я хочу создать еще один набор 2D-точек, смещая полигон с заданным параметром внутри или снаружи и значением смещения.Как мне это сделать?enter image description here

Ответы [ 2 ]

0 голосов
/ 04 января 2019

enter image description here

Для каждой вершины многоугольника вычислите вектор внешней биссектрисы как сумму нормализованных нормалей na и nb двух соседних ребер), затем нормализуйте его

 bis = na + nb 
 bis = bis / Length(bis)

Затем найдите необходимую длину биссектрисы, чтобы обеспечить расстояние смещения как

 l = d / Sqrt(1 + dotproduct(na,nb))

И получите смещенную вершину многоугольника (используйте минус для внутреннего смещения!):

P' = P + l * bis
0 голосов
/ 04 января 2019

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

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

Пример: P0 = (5,2) & P1 = (2, 1,7)

V1 = -3, -0,3.Вращение по часовой стрелке на 90 градусов дает нам вектор -0,3, 3 (a, b) -> (b, -a)

Разделите вектор на 3 (то есть расстояние на чертеже) и мы получим (-0,1,1) точки установки P0 вектором дают P0 '(5,2) - v (-0,1,1) = (4,9,3)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...