Поверните линию вокруг центральной точки, учитывая две вершины

Я пытался повернуть ряд линий на 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])

Ответы на вопрос(2)

Ваш ответ на вопрос