Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
ebrady
Anmeldungsdatum: 06.07.2005 Beiträge: 45
|
Verfasst am: 18.11.2006, 21:10 Titel: Vektorrotation |
|
|
Hallo!
Ich benutze zur Vektorrotation um eine Achse (hier z-Achse) diese Formel:
x=cos(winkel)*x-sin(winkel)*y
y=cos(winkel)*y+sin(winkel)*x
Das Problem damit ist...der Vektor wird dabei immer kürzer. (Ich verwende bereits Gleitkommazahlen) Hab schon einige Sachen probiert, aber so richtig krieg ich es nicht gebacken.
Hat jemand eine vernünftige Lösung parat? Wäre Klasse! |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 18.11.2006, 21:38 Titel: |
|
|
Schau dir mal das an, vllt. ist ja was dabei für dich
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
PMedia
Anmeldungsdatum: 14.08.2006 Beiträge: 2847
|
Verfasst am: 18.11.2006, 22:24 Titel: |
|
|
Das Problem hatte ich auch mal. Die Lösung:
Nach 360° einfach wieder bei 0° anfangen.
Code: | do
x -= 360
loop until x < 360 |
Ich wollte damals 'ne Software-3D-Engine schreiben...
Ein Würfel, der sich beliebig drehen kann... und dabei immer kleiner wurde... war gar nicht so gedacht! |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 18.11.2006, 23:08 Titel: |
|
|
Ist allerdings Quatsch, da SIN und COS die Periodendauer von 2PI = 360° haben....
jb _________________ Elektronik und Programmieren |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 18.11.2006, 23:36 Titel: |
|
|
Hi,
ebrady hat Folgendes geschrieben: | Ich benutze zur Vektorrotation um eine Achse (hier z-Achse) diese Formel:
x=cos(winkel)*x-sin(winkel)*y
y=cos(winkel)*y+sin(winkel)*x | ..dir ist schon klar, daß du bei der Berechnung von y bereits das umgerechnete x benutzt??
Ich hatte beim ersten Hinsehen nur auf das Thema geachtet und wußte, daß im englischen Forum o.g. Thread existiert..
..die lebenswichtige Variable 'y' hatte ich dabei glatt übersehen(..und das mir..)
Probiers doch mal so: Code: | xhilft=cos(winkel)*x-sin(winkel)*y
y=cos(winkel)*y+sin(winkel)*x
x=xhilft | btw:
jb hat natürlich Recht:Durch die Periodizität ist es sowohl Sin() als auch Cos() sowas von egal, ob der Winkel>360° ist oder nicht..
Die Subtraktion von 360°(oder 2*Pi, je nach Modus) hat allenfalls kosmetischen Charakter und kostet unnötig Zeit
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
ebrady
Anmeldungsdatum: 06.07.2005 Beiträge: 45
|
Verfasst am: 19.11.2006, 16:32 Titel: |
|
|
Alles sonnenklar jetzt, danke! Ich hatte zwischenzeitlich sogar schon Ausgleichsparameter für jeden Quadranten eingebaut, um das zu kaschieren  |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 19.11.2006, 19:45 Titel: |
|
|
ytwinky hat Folgendes geschrieben: | Code: | xhilft=cos(winkel)*x-sin(winkel)*y
y=cos(winkel)*y+sin(winkel)*x
x=xhilft |
|
Ein kleiner Tipp an dieser Stelle noch: Es ist keine gute Idee, das x und y jedesmal umzurechnen und überschreiben, weil sich mit der Zeit haufenweise Rundungsfehler aufsummieren. Daher sollte man immer die Originalfigur im Speicher führen und stattdessen die Koeffizientenmatrix entsprechend der aktuellen Winkelposition berechnen.
ytwinky hat Folgendes geschrieben: | Die Subtraktion von 360°(oder 2*Pi, je nach Modus) hat allenfalls kosmetischen Charakter und kostet unnötig Zeit |
Optimierung hier: Koeffizienten cos(alpha! + (TIMER - t0!) * omega) und sin(alpha! + (TIMER - t0!) * omega) einmalig berechnen und in der genannten Formel substituieren.
Beispielcode siehe
http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/ButterweicheAnimationen.html _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 20.11.2006, 20:39 Titel: |
|
|
Ich kann leider keinen eigenen Beispiel-Code beisteuern:
http://rel.betterwebber.com/junk.php?id=59
..ich find's einfach toll(und den Quellcode dazu auch)
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
|