Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

22.06.2008, 18:19

Problem mit der Bewegung eines gedrehten Objekts

Hi Forum!
Ich hab ein "Fahrzeug", das man auch schon drehen kann. Wenn es um 0° gedreht ist, dann geht die ganze Geschwindigkeit in X-Richtung. Wenn es um 90° gedreht ist, dann geht die ganze Geschw. in Z-Richtung.

Wie soll ich das "Fahrzeug" aber bewegen, wenn es z.B. um 32.15°, 14.59° oder 56° gedreht ist?
Wie mach ich also, dass es in die Richtung fährt, in die es auch schaut?

Hab schon bisschen was versucht, das konnte man aber nicht mit ansehn :D .

Powerpaule

Treue Seele

Beiträge: 162

Wohnort: Berlin

Beruf: Softwareentwickler

  • Private Nachricht senden

2

22.06.2008, 19:51

C-/C++-Quelltext

1
2
SpeedX = Speed * cos(Winkel);      //Ist gleich Speed, wenn Winkel 0° und 0 wenn, Winkel 90°

SpeedZ = Speed * sin(Winkel);     //genau umgekehrt


Achso, da man normalerweise mit RAD-Werten rechnet, musst du wahrscheinlich die Winkel noch umrechnen ( also cos(Winkel * PI / 180))

3

22.06.2008, 20:26

*g*, nein, das funktioniert nicht so richtig.

aber ich hab nochmal selbst was versucht, das vorerst mal aushelfen kann. ist zwar immernoch bisschen "gewöhnungsbedürftig", aber wie gesagt, vorerst reicht das mal:

wenn das fahrzeug einen winkel zwischen 0 und 90 hat, dann mach ich geschwindigkeit Z:
geschwindigkeit * (rotation / 90)

und geschwindigkeit X:
der rest dann.

naja, ist nicht gerade sehr gut gelöst, aber ich hatte das sinus und kosinus zeug noch nicht (bin in der 8. klasse).
falls noch jemand ne idee hat kann er sie gerne loswerden :)

trotzdem danke

4

22.06.2008, 20:31

Deine Lösung ist mathematisch falsch, du musst schon sinus und cosinus benutzen.
Lieber dumm fragen, als dumm bleiben!

Powerpaule

Treue Seele

Beiträge: 162

Wohnort: Berlin

Beruf: Softwareentwickler

  • Private Nachricht senden

5

22.06.2008, 20:31

Was funktioniert denn da nicht richtig?

Das ist sicher nicht die einzige, aber auf jedenfall eine richtige und komfortable Lösung, hab ich selbst schon angewendet.

6

22.06.2008, 20:51

Zitat

Deine Lösung ist mathematisch falsch, du musst schon sinus und cosinus benutzen.

hab ich nicht behauptet. ich sagte, dass sie vorübergehend ausreicht.

Zitat

Was funktioniert denn da nicht richtig?

schwer zu sagen. es fährt halt nicht in die richtung, in die es schaut.

Zitat

SpeedX = Speed * cos(Winkel);

also, ich hab das hier mal so verwendet:
speed ist sicherlich die gesamte geschwindigkeit;
und der winkel ist die rotation um die y-achse.

und brauch ich den kosinus vom RAD oder DEG?
übrigens: ich weiss zwar dass eins von beiden grad- und das andere bogenmaß ist, aber was die bringen hatten wir in mathe auch nicht (also wir hatten das überhaupt nicht).
außerdem weiss ich nicht in was meine angabe ist.
wenn du sagst, dass man mit RAD-werten rechnet, dass muss ich es in rad umwandeln, aber wenn es das schon ist, dann ist es ja falsch.

also meine angaben gehen von 0 bis 360.

Zitat

Das ist sicher nicht die einzige, aber auf jedenfall eine richtige und komfortable Lösung, hab ich selbst schon angewendet.

jo, komfortabel schon, wenn man weiß wie man sie anwendet *g*.
mein code ist halt schon vergleichsweise lang, und ich kann das fahrzeug erst in einem winkel zwischen 0 und 180 grad fahren lassen, den rest muss ich noch machen...

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

7

22.06.2008, 23:34

cos und sin sind normalerweise von 0 bis 2pi definiert. Dabei gilt 180° = pi.
Somit kann man folgende Gleichung aufstellen:
winkel_in_grad / 180° = winkel_in_rad / pi <=> winkel_in_rad = winkel_in_grad / 180° * pi.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

8

23.06.2008, 10:01

man kann es auch schön ähnlich wie eine vektorkamera lösen... nur halt die matrix wird dann anders aufgebaut! :)

Powerpaule

Treue Seele

Beiträge: 162

Wohnort: Berlin

Beruf: Softwareentwickler

  • Private Nachricht senden

9

23.06.2008, 10:32

Zitat


Zitat

SpeedX = Speed * cos(Winkel);

also, ich hab das hier mal so verwendet:
speed ist sicherlich die gesamte geschwindigkeit;
und der winkel ist die rotation um die y-achse.

und brauch ich den kosinus vom RAD oder DEG?
übrigens: ich weiss zwar dass eins von beiden grad- und das andere bogenmaß ist, aber was die bringen hatten wir in mathe auch nicht (also wir hatten das überhaupt nicht).
außerdem weiss ich nicht in was meine angabe ist.
wenn du sagst, dass man mit RAD-werten rechnet, dass muss ich es in rad umwandeln, aber wenn es das schon ist, dann ist es ja falsch.

also meine angaben gehen von 0 bis 360.


Joa, das hast du richtig erkannt - Speed ist die gesamtgeschwindigkeit und SpeedX bzw. SpeedZ die Geschwindigkeiten in RIchtung der beiden Achsen.
Da deine Winkel von 0 bis 360° definiert sind (also DEG), die Funktionen aber Bogenmaß (also RAD) erwarten, musst du die Winkel demzufolge umrechnen:

C-/C++-Quelltext

1
2
SpeedX = Speed * cos(Winkel * Pi / 180);     
SpeedZ = Speed * sin(Winkel * Pi / 180);

10

23.06.2008, 18:35

habe jetzt ziemlich alles ausprobiert. die winkelangabe, die winkelangabe in deg und die winkelangabe in rad. aber er fährt immer falsch.

Werbeanzeige