animierte Rotation e. Polygons < Maple < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 01:06 Mo 24.12.2007 | Autor: | Vollmond |
Hallo zusammen!
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
Bis auf geläufige Befehlszeilen halten sich meine Kenntnisse in Maple in Grenzen. Habe nunmehr seit drei Tagen vergeblich versucht eine animierte Rotation eines Polygons zu realisieren. Mein Code sind folgendermaßen aus.
> restart:
> alpha:=0; Drehung:=10; #alpha:=Startwinkel; Drehung:= Winkel um den rotiert werden soll
> rot:=phi->exp(phi*I);
> with(plottools): with(plots):
box := proc(alpha,i) local E1,E2,E3,E4,cE1,cE2,cE3,cE4,rot_E1,rot_E2,rot_E3,rot_E4;
E1:=[-5,5]: cE1:=E1[1]+E1[2]*I:
E2:=[5,5]: cE2:=E2[1]+E2[2]*I:
E3:=[5,-5]: cE3:=E3[1]+E3[2]*I:
E4:=[-5,-5]: cE4:=E4[1]+E4[2]*I:
phi:=evalf(2*Pi*i/360,4):
rot_E1:=[Re(evalc(cE1*rot(phi))),Im(evalc(cE1*rot(phi)))];
rot_E2:=[Re(evalc(cE2*rot(phi))),Im(evalc(cE2*rot(phi)))];
rot_E3:=[Re(evalc(cE3*rot(phi))),Im(evalc(cE3*rot(phi)))];
rot_E4:=[Re(evalc(cE4*rot(phi))),Im(evalc(cE4*rot(phi)))];
PLOT(polygon([rot_E1,rot_cE2,rot_cE3,rot_cE4], color=blue));
end;
> animate( box, [alpha,i], i=0..Drehung, scaling=constrained, frames=100 );
Eine konkrete Aufgabenstellung hierzu existiert nicht. Mein Ziel ist es, eine gleichzeitige Rotation zweier Polygone zu realisieren. Wobei die Drehachse nicht der Koordinatenursprung sein soll. Desweiteren möchte ich später phi mittels piecewice als abschnittsweise definierte Funktion einsetzen, um unterschiedliche Beschleunigungen/Verzögerungen zu visualisieren. Dies erscheint mir am leichtesten, wenn über die komplexe Multiplikation gerechnet wird. Was ich bisher der Maple-Hilfe entnehmen konnte, scheint mir eine Prozedur hierfür am Sinnvollsten. Aber für produktive Vorschläge bin ich offen.
Kann mir jemand helfen?
|
|
|
|
Hallo,
das sieht schon sehr gut aus. Du hast dich nur mit den Variablennamen vertan und benutzt PLOT falsch. Wenn du allerdings deine PLOT-Zeile so änderst:
PLOT(polygon([rot_E1,rot_E2,rot_E3,rot_E4]), COLOR(RGB, 0.0, 0.0, 1.0));
dann funktioniert es.
Für die Rotationen um Nichtursprungsachsen empfehle ich homogene Koordinaten. Dort kannst du Verschiebung und Rotation jeweils in einer Matrix zusammenfassen und durch Matrizenmultiplikation beliebige Bewegungen vollziehen. In deinem 2D-Fall wären es 3x3-Matrizen. Die sind nicht zu aufwändig und in Maple mit LinearAlgebra gut zu berechnen.
Ich würde an deiner Stelle versuchen, dein bislang erreichtes Resultat auf die homogenen Matrizen zu übertragen und es dann um Verschiebungen erweitern.
Gruß
Martin
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 12:45 Mo 24.12.2007 | Autor: | Vollmond |
Hallo Martin,
vielen Dank für deine Antwort. Leider fahre ich in Kürze bis einschließlich morgen weg und habe keine Möglichkeit den Hinweisen nachzugehen. Werde mich entsprechend übermorgen dessen annehmen.
Wollte mich nur noch eben schnell bei dir bedanken!
Frohe Weihnachten!
|
|
|
|