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

Razeng

Frischling

  • »Razeng« ist der Autor dieses Themas

Beiträge: 3

Beruf: Fachinformatiker Fachrichtung Anwendungsentwicklung / Informatik Student

  • Private Nachricht senden

1

07.04.2012, 10:54

Punkt auf Vektor verschieben

Hallo Spieleprogrammierer,

ich programmiere im Moment ein Weltraum 2D Spiel in Java auf Basis von lwjgl und slick2d. Ich habe die Raumschiffsteuerung als letztes von 4 fixen Richtungen darauf umgestellt, das immer der Maus hinterhergeflogen wird.

Das Problem, das ich jetzt habe ist die Schüsse immer vor dem Raumschiff zu positionieren, da sie sonst immer bei irgendeiner Drehung mit dem Raumschiff kollidieren. Dazu folgende Zeichnung:


(Link)


Hellblau: Der zu errechnende Punkt (Position des Schusses).
Grün: Der Winkel um den das Raumschiff gedreht wurde
Orange: Kreis auf dem sich der Punkt quasi bewegt.
Rot: Der Radius des Kreises
Weiß: Der Richtungsvektor

Mein Ansatz war über Dreiecksrechnung:
Ich besitze 2 Geraden und den Winkel zwischen denen, kann also mittels Kosinussatz die Länge der 3. Seite ausrechnen. Ich habe aber nirgends gefunden wie man den 3. Punkt eines Dreiecks ausrechnet.

Evlt. geht das aber auch über Vektorrechnung, da mir die Vektoren zur Position des Schiffes und der Maus bekannt sind und ich daraus bereits den "Richtungsvektor" (Weiß im Bild) errechnet habe. Ein kleines Stück dieses Vektors quasi so lang wie von der Schiffsposition bis zum Kreis (Orange im Bild), wäre die Verschiebung der Schussposition.

Mir fehlt einfach das mathematische Verständnis an dieser Stelle.
Ich wette die Lösung ist ziemlich einfach und ich bin die ganze Zeit nur viel zu kompliziert an das Problem herangegangen, deswegen wollte ich jetzt mal jemand anderes über das Problem schauen lassen, was ja meistens ein Hand-gegen-Kopf auslöst. :)

Vielen Dank für eure Hilfe,
Razeng

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

07.04.2012, 11:00

Normiere den "weißen Vektor", indem du ihn durch seine Länge dividierst. (Vektorlänge in 2D = Wurzel(x² + y²))
Dann hat er die Länge 1.
Anschließend multiplizierst du ihn mit dem "roten Radius".
Das Ergebnis addierst du zur Schiffsposition, und schon hast du deinen "hellblauen Punkt"! :)

Razeng

Frischling

  • »Razeng« ist der Autor dieses Themas

Beiträge: 3

Beruf: Fachinformatiker Fachrichtung Anwendungsentwicklung / Informatik Student

  • Private Nachricht senden

3

07.04.2012, 11:00

Verdammt xD




Als ich den Titel formuliert habe ist mir etwas eingefallen: Damit die Schüsse zur Maus fliegen habe ich bereits alles notwendige getan.



Der Schuss wird immer mit der normalisierten Form des weißen Vektors im Bild multipliziert und zwar mit der Geschwindikeit mit der er sich bewegen soll -> Verschiebung des Punktes auf dem Vektor. Wende ich die selbe Rechnung auf die intiale Position des Schusses an verschiebt dieser sich natürlich ebenfalls auf dem Vektor.


Danke für eure Hilfe :P



Edit: Danke auch dir auch nochmal, das ist mir ebenfalls aufgefallen. Ich wusste das das nicht so schwer sein konnte.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

07.04.2012, 11:01

Ha, ich war schneller als deine Erkenntnis :P

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

5

07.04.2012, 11:29

Ha, ich war schneller als deine Erkenntnis :P

Du hast das aber auch schon etliche male gemacht. ;)

@Razeng:
Schöne Vorstellung deiner Frage!
Du hast gerade das gemerkt, was eigentlich oft passiert, wenn man eine Frage exakt formuliert: Man kommt selbst auf die Lösung weil man sehr genau nachdenken muss um die Frage zu stellen, so dass man oftmals gleich selbst auf die Antwort kommt. Habe schon ein paar mal hier angefangen eine Frage zu formulieren und dann den Thread gar nicht abgeschickt, weil mir die Lösung beim Schreiben eingefallen ist. ^^

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

07.04.2012, 11:32

Ja, ein Lob auch von mir!
Die Frage wurde vorbildlich gestellt. Man sieht sofort, worum es geht, muss keinen Code runterladen o.Ä.! :thumbup:
Es wäre fein, wenn alle ihre Fragen so stellen würden.

Razeng

Frischling

  • »Razeng« ist der Autor dieses Themas

Beiträge: 3

Beruf: Fachinformatiker Fachrichtung Anwendungsentwicklung / Informatik Student

  • Private Nachricht senden

7

07.04.2012, 12:03

Danke,

ich hatte die Frage trotzdem gestellt weil ich die Überschrift als letztes formuliert hatte und der Idee dann erst im Code nachgegangen bin, das funktionierte auf anhieb fast. So viel verschwendete Zeit, naja im Nachhinein ist man halt immer schlauer :D Und das macht so ein Spaß jetzt damit durch die Gegend zu flitzen *pew pew* 8)

Ich werde das noch ein wenig runder machen und dann mal zur Verfügung stellen evtl. als Projektvorstellung.

Gruß,
Razeng

Werbeanzeige