Dreieck um einem Winkel drehen. kann jemand helfen?
Hallo,
ich habe ein Problem was mir seit einigen Tagen keine Ruhe mehr lässt. Ich würde gerne ein gleichschenkliges Dreieck um den Mittelpunkt um einen bestimmten Winkel den ich angebe drehen.
Ich habe mir schon ein paar Sachen angeschaut wie Polarkoordinaten oder Rotationsmatrix aber das ist nicht wirklich das was ich will oder ich mache die Rechnung nicht korrekt.
Sozusagen, wenn die Spitze vom Dreieck nach oben zeigt soll das Dreieck bei einer 180° Drehung so stehen das die Spitze nach unten zeigt (allerdings an der selben Position).
Aber es sollen auch wilkürliche Zahlen sein.
Das ganze soll später nämlich dann in Java programmiert werden.
Ich würde mich freuen wenn mir da jemand helfen könnte!
mfg
Illidan18
4 Antworten
Erster Schritt: Bestimme den Mittelpunkt des Dreiecks.
Zweiter Schritt: Verschiebe das Dreieck so, dass dieser Mittelpunkt auf dem Nullpunkt liegt - also die Koordinaten des Mittelpunkts von den Dreieckspunkten subtrahieren.
Dritter Schritt: Bestimme die Rotationsmatrix für den Winkel alpha, um den du drehen willst:
cos(alpha) -sin(alpha)
sin(alpha) cos(alpha)
Vierter Schritt: führe die Drehung durch, indem du die Dreieckspunkte mit der Matrix multiplizierst.
Fünfter Schritt: verschiebe das Dreieck wieder zurück an den Anfangsplatz (also die Koordinaten wieder addieren, die du im zweiten Schritt abgezogen hast).
Ja, ganz genau. Für die Drehung von 180°, wie du sie haben willst, ergibt sich als Matrix
-1 0
0 -1
Angenommen, das Dreieck liegt so, dass der obere Punkt - die Spitze - auf (0,1) liegt. Dann ist das Produkt aus (0,1) und der Matrix gerade (0,-1), also genau das, was du willst.
Wie wärs mit ner Punktspiegelung mit Spiegelpunkt in der Mitte zwischen alter Dreiecksspitze und neuer Position. Da das Dreieck ja 2 gleichlange Schenkel hat, bewirkt die Spiegelung ja dasselbe wie Drehung und Verschiebung, ist also mit deinem gewünschten Bild identisch.
Wenn Du keine Rotation um den oberen Dreieckspunkt haben willst, nimm diesen als Spiegelungspunkt und spiegele die beiden unteren Dreieckspunkte daran.
Du willst im Prinzip nicht um den Mittelpunkt drehen, sondern um den oberen - weil die Spitze ja zwar nach unten zeigt, aber am gleichen Punkt verbleibt, korrekt?!
Ne ne, entweder wir verstehen uns falsch oder ich kann dir nicht ganz folgen :). Ich will das Dreieck um irgendeine Grad Zahl zwischen 0 und 360 drehen. Das soll aber nicht auf dem Koordinatensystem dann gedreht werden (sozusagen das es dann irgendwo im -x und -y Abschnitt ist) sondern NUR das Dreieck selbst soll sich drehen. Wie gesagt, ich will NICHT nur für 180° die Berechnung machen sondern allgemein für einen Winkel. Mit Google Suche habe ich halt etwas mit Polarkoordinaten gefunden und das hat halt den Zusammenhang mit dem Mittelpunkt des Dreiecks. Aber wie gesagt, es funktioniert nicht wirklich =/.
Ok, verstehe Dich.
Du willst also doch eine Rotation mit Hilfe von Polarkoordinaten.
Nur, dann musst Du den Ursprung auf den Mittelpunkt des Dreiecks festlegen und von dort mit Hilfe des Rotationswinkels die neuen gedrehten Werte ermitteln!
Nicht vom Null-Ursprung aus!
Alternativ kannst Du die Koordinaten transformieren, so dass der Mittelpunkt des Dreiecks im Null-Ursprung ist und dann drehen - danach Rücktransformation und fertig!
Kannst du das vielleicht etwas weiter erläutern mit Rotationswinkel die neuen Werte ermitteln?
Ich habe schon soviel versucht. Was ich halt berechnet habe ist x = rcos(a) und y = rsin(a). r ist der Abstand von den alten Koordinaten zum Mittelpunkt.
Du nimmst den Mittelpunkt des Dreieckes als (0/0) und legst es damit in ein Koordinatensystem. Es ist dann entscheident, wie die entfernung vom Mittelpunkt zur Spitze ist, daraus lassen sich die Koordinaten der Spitze ablesen. Dann lässt du den Zielpunkt der Spitze berechnen, indem du die Koordinaten der Spitze mit der genannten Matrix multiplizierst. Das gleiche wiederholst du mit den übrigen Punkten und lässt dann ein Dreieck zeichnen.
Rotationsmatrix bestimmen bedeutet Winkel für alpha einsetzen und dann zusammen mit dem vierten Schritt jeden Eckpunkt vom Dreieck mit dieser Matrix multiplizieren?