Tôi đã cố gắng xoay một loạt các đường thẳng 90 độ (với nhau tạo thành một polyline). Mỗi dòng chứa hai đỉnh, nói (x1, y1) và (x2, y2). Những gì tôi đang cố gắng làm là xoay quanh điểm trung tâm của đường thẳng, cho điểm trung tâm | x1 - x2 | và | y1 - y2 |. Đối với một số lý do (tôi không phải là rất hiểu biết về toán học) Tôi không thể có được các dòng để xoay chính xác.Xoay đường quanh điểm trung tâm cho hai đỉnh
Ai đó có thể xác minh rằng toán học ở đây là chính xác? Tôi nghĩ rằng nó có thể là chính xác, tuy nhiên, khi tôi thiết lập các đỉnh của các dòng để các đỉnh xoay mới, dòng tiếp theo có thể không nắm lấy đỉnh mới (x2, y2) từ dòng trước đó, làm cho các đường quay không chính xác .
Dưới đây là những gì tôi đã viết:
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])
'p2y' công thức sai cho dấu trừ thứ hai. – didierc
Tốt, cảm ơn bạn. Là một lỗi đánh máy! – adchilds
nevermind rồi. – didierc