Поверните линию вокруг центральной точки, учитывая две вершины
Я пытался повернуть ряд линий на 90 градусов (которые вместе образуют ломаную линию). Каждая строка содержит две вершины, скажем, (x1, y1) и (x2, y2). В настоящее время я пытаюсь вращаться вокруг центральной точки линии, учитывая центральные точки | x1 - x2 | и | y1 - y2 |. По какой-то причине (я не очень разбираюсь в математике) Я не могу заставить линии вращаться правильно.
Может ли кто-нибудь проверить, что математика здесь верна? Я думаю, что это может быть правильно, однако, когда я устанавливаю вершины линии в новые повернутые вершины, следующая строка может не захватывать новую (x2, y2) вершину из предыдущей строки, вызывая неправильное вращение линий ,
Вот что я написал:
def rotate_lines(self, deg=-90):
# Convert from degrees to radians
theta = math.radians(deg)
for pl in self.polylines:
self.curr_pl = pl
for line in pl.lines:
# Get the vertices of the line
# (px, py) = first vertex
# (ox, oy) = second vertex
px, ox = line.get_xdata()
py, oy = line.get_ydata()
# Get the center of the line
cx = math.fabs(px-ox)
cy = math.fabs(py-oy)
# Rotate line around center point
p1x = cx - ((px-cx) * math.cos(theta)) - ((py-cy) * math.sin(theta))
p1y = cy - ((px-cx) * math.sin(theta)) + ((py-cy) * math.cos(theta))
p2x = cx - ((ox-cx) * math.cos(theta)) - ((oy-cy) * math.sin(theta))
p2y = cy - ((ox-cx) * math.sin(theta)) + ((oy-cy) * math.cos(theta))
self.curr_pl.set_line(line, [p1x, p2x], [p1y, p2y])