一連の線を 90 度回転させようとしました (一緒にポリラインを形成します)。各行には、(x1, y1) と (x2, y2) などの 2 つの頂点が含まれます。私が現在やろうとしているのは、中心点 |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])