Ho cercato di ruotare un gruppo di linee di 90 gradi (che insieme formano una polilinea). Ogni riga contiene due vertici, ad esempio (x1, y1) e (x2, y2). Quello che sto cercando di fare è ruotare attorno al punto centrale della linea, dato i punti centrali | x1 - x2 | e | y1 - y2 |. Per qualche ragione (non sono molto matematicamente esperto) non riesco a far ruotare correttamente le linee.Ruota la linea attorno al punto centrale dato due vertici
Qualcuno potrebbe verificare che la matematica qui sia corretta? Sto pensando che potrebbe essere corretto, tuttavia, quando ho impostato i vertici della linea ai nuovi vertici ruotati, la linea successiva potrebbe non afferrare il nuovo vertice (x2, y2) dalla riga precedente, causando una rotazione scorretta delle linee .
Ecco quello che ho scritto:
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])
La formula 'p2y' è sbagliata per il segno meno. – didierc
Buona cattura, grazie. È stato un errore di battitura! – adchilds
allora non importa. – didierc