Obróć linię wokół punktu środkowego, podając dwa wierzchołki

Próbowałem obrócić kilka linii o 90 stopni (które razem tworzą polilinię). Każda linia zawiera dwa wierzchołki, powiedzmy (x1, y1) i (x2, y2). Obecnie staram się obracać wokół punktu środkowego linii, podając punkty środkowe | x1 - x2 | i | y1 - y2 |. Z jakiegoś powodu (nie bardzo rozumiem matematycznie) nie mogę poprawnie obrócić linii.

Czy ktoś może sprawdzić, czy matematyka jest tutaj poprawna? Myślę, że może to być poprawne, jednak kiedy ustawię wierzchołki linii na nowe obrócone wierzchołki, następny wiersz może nie chwytać nowego wierzchołka (x2, y2) z poprzedniej linii, powodując niepoprawne obracanie się linii .

Oto co napisałem:

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])

questionAnswers(2)

yourAnswerToTheQuestion