Wie drehe ich einen Scheitelpunkt um einen bestimmten Punkt?
Stellen Sie sich vor, Sie haben zwei Punkte im 2D-Raum und müssen einen dieser Punkte um X Grad drehen, wobei der andere Punkt als Mittelpunkt fungiert.
float distX = Math.abs( centerX -point2X );
float distY = Math.abs( centerY -point2Y );
float dist = FloatMath.sqrt( distX*distX + distY*distY );
Bisher habe ich nur den Abstand zwischen den beiden Punkten gefunden ... irgendwelche Ideen, wohin ich davon gehen soll?
Der einfachste Ansatz besteht darin, drei Transformationen zu erstellen:
- Eine Übersetzung, die Punkt 1 zum Ursprung bringt
- Drehung um den Ursprung um den gewünschten Winkel
- Eine Übersetzung, die Punkt 1 an seine ursprüngliche Position zurückbringt
Wenn Sie dies alles herausarbeiten, erhalten Sie die folgende Transformation (wobei x
der gewünschte Drehwinkel im Bogenmaß ist):
newX = centerX + (point2x-centerX)*Math.cos(x) - (point2y-centerY)*Math.sin(x);
newY = centerY + (point2x-centerX)*Math.sin(x) + (point2y-centerY)*Math.cos(x);
Beachten Sie, dass dies die Annahme macht, dass der Winkel x
für die Drehung im Uhrzeigersinn negativ ist (die sogenannte Standard- oder Rechtsausrichtung für das Koordinatensystem). Wenn dies nicht der Fall ist, müssen Sie das Vorzeichen für die betreffenden Bedingungen umkehren sin(x)
.