![]() |
---|
Hallo! Mit der Auszeichnungssprache "SVG" (Scalable Vector Graphics) kann man Vektorgrafiken erstellen. Bspw. ergibt circle cx="150" cy="150" r="100" einen Kreis mit einem Radius von 100 Pixeln, dessen Mittelpunkt sich bei x = 150 und y = 150 findet. Mit einer "polyline" lassen sich beliebige Figuren aus geraden Linie konstruieren, bspw. ist polyline points="63.5,100 236.5,100 150,250 63.5,100" ein Dreieck. Frage: Wie berechne ich eine Drehung bspw. des Dreieckes um 30 Grad um den Punkt (150|150)? Siehe dazu die Bilder, falls ich mich unklar ausdrücken sollte. Allgemeiner lautet die Frage: Wie lasse ich einen beliebigen Punkt um beliebige Grad um einen anderen Punkt rotieren? Mein mathematischer Hintergrund ist in der Gegend von "nicht vorhanden" anzunehmen, ich bin weder Schüler, noch Student, auch nur Hobbyprogrammierer. Ich will eine Funktion schreiben, die eine Polylinie nach ihren Punkten zerlegt, jeden einzelnen Punkt um X Grad rotiert und dann die Figur aus diesen Punkten neu zusamen setzt. Evtl. wichtig: Die Rotation findet ausnahmslos immer um den Mittelpunkt der Figur statt. Dankbar bin ich bereits reichlich für einen Link zu einer online-Erklärung des Problems, trotz einiger Suche hab ich nichts gefunden, das ich als Lösung identifizieren konnte, aber ich weiß ja auch nicht, wie das überhaupt "aussieht". |
Hierzu passend bei OnlineMathe: Online-Übungen (Übungsaufgaben) bei unterricht.de: |
![]() |
![]() |
Hallo Ich versuche es so einfach wie moeglich zu halten. Wir legen den Mittelpunkt des Kreises in den Urspung eines Koordinatensystems.
Der Radius des Kreises ist .
Ein Vektor der auf den Umfang des Kreises zeigt stellt sich folgendermassen dar. ("ohne weitere grosse Erlaueterungen")
wobei der winkel zwischen Positiver x-Achse und Vektor ist.
Ich will ein Gleichseitiges Dreieck im Kreis darstellen die Winkel zwischen jedem Vektor muessen also Grad sein ("der Winkel in dem sich die Seiten,-Winkelhlabierenden des Dreiecks im Ursprung schneiden")
Ich waehle den ersten Vektor auf der x-Achse also folgen..
fuer die Winkel der Vektoren die Auf die Punkte Dreiecks zeigen.
das ganze gezeichnet siehe Abb. |
![]() |
Nun kann man die Ortsvektoren auch als Punke auffassen.
also
.............usw.
Nun kann man allen Punkten eine Variable fuer den zusaetzlichen Winkel der Drehung hinzufuegen.
........usw
Nun habe ich ein Polygon der Verbindungslinien der Punkte ueber den Parameter animiert.
siehe Abb.
MFG basti
PS:leider dreht es sich nicht ,ich habe es als gif animation da falls du es mal anschauen willst einfach mailen.
|
![]() |
Hi nochmal, Basti, ich hab's nach Stellen der Frage gelöst, hab nochmal nach anderen Stichworten gesucht und eine Formel gefunden. Ich lasse die Problemstellung mal hier stehen, vielleicht haben ja spätere Generationen dasselbe Problem; ganz unten folgt dann die Lösung. Dir herzlichen Dank für Deine Bemühungen und die letztlich zum Erfolg führenden Stichworte! :) ---- Hi Basti, erstmal danke für die Antwort, die ich zwar nicht auf mein Problem anwenden kann, die mir aber schon Ahnung von der Richtung, in die es geht, gibt. Ich glaube, das klappt so nicht, weil Du jetzt speziell von einem Dreieck ausgehst und dadurch an diese Winkelzahlen (0, 120, 240) kommst. Ich vereinfach mal die Problemstellung (hoffe ich): Ich habe jetzt kein Dreieck mehr, sondern eine Gerade, definiert durch die beiden Punkte: P1(500|300) P2(500|700) Der Mittelpunkt liegt demnach bei M(500|500) Die Linie will ich jetzt um beliebig viele Grad um den Mittelpunkt drehen. Wenn ich sie um 90° nach rechts drehe, dann lauten die Endpunktkoordinaten: P1'(700|500) P2'(300|500) Ich suche also letztlich nach der Formel, in die ich einen beliebigen Punkt, einen beliebigen Mittelpunkt und eine beliebige Gradzahl einsetzen kann, und die mich von bspw. P1(500|300) bei M(500|500) 90°-Drehung nach P1'(700|500) bringt. Und für alle anderen Gradzahlen genauso anwendbar ist. Berechne ich mit dieser Formel dann die einzelnen Punkte eines beliebigen Polygons, wird es komplett um seinen Mittelpunkt gedreht. Wenn Du mir da weiterhelfen könntest, wäre das echt super! --- Und hier die Lösung, aufbereitet für eine Berechnung per Javascript: W = [wert]; // -> Drehwinkel M_x = [wert]; // -> x-Koordinate des Mittelpunkts M_y = [wert]; // -> y-Koordinate des Mittelpunkts x = [wert]; // -> x-Koordinate des zu drehenden Punktes y = [wert]; // -> y-Koordinate des zu drehenden Punktes a_x = M_x - x; // -> Abstand M_x zu x a_y = M_y - y; // -> Abstand M_y zu y Kos_W = Math.cos(W*Math.PI/180); // -> Berechnung des cos inkl. Umwandl. in Bogenmaß Sin_W = Math.sin(W*Math.PI/180); // -> Berechnung des sin inkl. Umwandl. in Bogenmaß x_neu = M_x - Kos_W * a_x + Sin_W * a_y; // -> Berechnung neue x-Koordinate y_neu = M_y - Kos_W * a_y - Sin_W * a_x; // -> Berechnung neue y-Koordinate Für [wert] muss jeweils der Wert (ach..) eingesetzt werden und es ist eine Umwandlung des Winkels in Bogenmaß notwendig. WICHTIG für Nachahmer: ====================== Eigentlich lauten die Formeln für x_neu und y_neu jeweils "M_x/y +", da allerdings in SVG der Nullpunkt vom Bereich positiver x- und y-Werte aus gesehen oben links statt unten links liegt, muss entsprechend mit Minus gerechnet werden, d.h. in der normalen mathematischen Ebene lauten die Formeln: x_neu = M_x + Kos_W * a_x + Sin_W * a_y; // -> Berechnung neue x-Koordinate y_neu = M_y + Kos_W * a_y - Sin_W * a_x; // -> Berechnung neue y-Koordinate Das Bild unten zeigt die Drehung einer Komplexen Figur um 13 Grad. |