Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Vektorrotation

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
ebrady



Anmeldungsdatum: 06.07.2005
Beiträge: 45

BeitragVerfasst am: 18.11.2006, 21:10    Titel: Vektorrotation Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 18.11.2006, 21:38    Titel: Antworten mit Zitat

Schau dir mal das an, vllt. ist ja was dabei für dich grinsen
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
PMedia



Anmeldungsdatum: 14.08.2006
Beiträge: 2847

BeitragVerfasst am: 18.11.2006, 22:24    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 18.11.2006, 23:08    Titel: Antworten mit Zitat

Ist allerdings Quatsch, da SIN und COS die Periodendauer von 2PI = 360° haben....

jb
_________________
Elektronik und Programmieren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 18.11.2006, 23:36    Titel: Antworten mit Zitat

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..) grinsen
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 grinsen
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ebrady



Anmeldungsdatum: 06.07.2005
Beiträge: 45

BeitragVerfasst am: 19.11.2006, 16:32    Titel: Antworten mit Zitat

Alles sonnenklar jetzt, danke! Ich hatte zwischenzeitlich sogar schon Ausgleichsparameter für jeden Quadranten eingebaut, um das zu kaschieren grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 19.11.2006, 19:45    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 20.11.2006, 20:39    Titel: Antworten mit Zitat

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) grinsen
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz