Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Nochmal was mit Winkeln (https://www.delphipraxis.net/59380-nochmal-mit-winkeln.html)

igel457 21. Dez 2005 14:03


Nochmal was mit Winkeln
 
Liste der Anhänge anzeigen (Anzahl: 1)
So, ich habe nun wieder ein Problem:

Mein Raumschiff soll Laserstrahlen feuern können, diese Funktionieren auch einwandfrei, drehen sich mit dem Raumschiff usw...

Leider starten sie an der Falschen Position, nämlich immer beim x,y Punkt meines Raumschiffes. Sie sollten allerdings direkt aus der Mitte kommen. Problem ist nur das sich mein Raumschiff drehen kann. Wie berechne ich den Punkt an dem meine Laserstrahlen starten sollen?

Ich hatte das so probiert:
Delphi-Quellcode:
  with TLaser.Create(engine) do
  begin
    x := self.x+cos(degtorad(flightangle)*pi/180)*self.width/2;
    y := self.y+sin(degtorad(flightangle)*pi/180)*self.height/2;
  end;
Aber das geht nicht ganz.

Hab mal eine Grafik angehängt um mein Problem zu verdeutlichen.

Angel4585 21. Dez 2005 14:16

Re: Nochmal was mit Winkeln
 
Zitat:

Zitat von igel457
So, ich habe nun wieder ein Problem:

Mein Raumschiff soll Laserstrahlen feuern können, diese Funktionieren auch einwandfrei, drehen sich mit dem Raumschiff usw...

Leider starten sie an der Falschen Position, nämlich immer beim x,y Punkt meines Raumschiffes. Sie sollten allerdings direkt aus der Mitte kommen. Problem ist nur das sich mein Raumschiff drehen kann. Wie berechne ich den Punkt an dem meine Laserstrahlen starten sollen?

Ich hatte das so probiert:
Delphi-Quellcode:
  with TLaser.Create(engine) do
  begin
    x := self.x+cos(degtorad(flightangle)*pi/180)*self.width/2;
    y := self.y+sin(degtorad(flightangle)*pi/180)*self.height/2;
  end;
Aber das geht nicht ganz.

Versuchs mal so :

Delphi-Quellcode:
  with TLaser.Create(engine) do
  begin
    x := self.x+cos(degtorad(flightangle))*ABSTAND_ZU_DREHPUNKT;
    y := self.y-sin(degtorad(flightangle))*ABSTAND_ZU_DREHPUNKT;
  end;
@jfheins:

Edit: Fehler behoben :mrgreen:

jfheins 21. Dez 2005 14:21

Re: Nochmal was mit Winkeln
 
Wenn (X|Y) der Mittelpunkt des Raumschiffes ist, dann findest du den Punkt auf dem Kreis mit

Xneu = X + cos(Angle) * radius;

Yneu = Y - sin(Angle) * radius;

Angle = Winkel, 0 ist rechts vom Mittelpunkt

radius = Radius des Objekts/Raumschiffes

Um von dem Punkt oben links auf den Mittelpunkt zu kommen musst du halt noch bei beiden einen halben Radius addieren.

Ich hoffe, geholfen zu haben :stupid:

Ich poste trotz Kasten, da meine Erklärung besser ist, und meine Gleichung etws anders (=richtig?) ist :mrgreen:

igel457 21. Dez 2005 14:30

Re: Nochmal was mit Winkeln
 
Danke!

Zitat:

Ich hoffe, geholfen zu haben Stupid
Ihr habt mir geholfen! :thumb:

Jetzt gehts!

Delphi-Quellcode:
x := self.x+cos(degtorad(flightangle))*self.width+self.width/2;
y := self.y+sin(degtorad(flightangle))*self.width+self.height/2;
Ein Problem in weniger als 20 Min gelöst! (Für mich) ein neuer Rekord :zwinker:

:dp:


Danke an alle!

jfheins 21. Dez 2005 14:37

Re: Nochmal was mit Winkeln
 
Zur kurzen Erklärung:

Yneu = Y - sin(Angle) * radius;
ist für eine Y-Achse, die nach unten größer wird, der Ursprung des Systems ist also oben links.

Yneu = Y + sin(Angle) * radius;
ist richtig, wenn der Ursprung unten links ist.

Inofern waren wir eigentlich beide richtig, da der igel456 nicht gesagt hat, welches System er verwendet :mrgreen:

Angel4585 21. Dez 2005 14:39

Re: Nochmal was mit Winkeln
 
Zitat:

Zitat von igel457
Ein Problem in weniger als 20 Min gelöst! (Für mich) ein neuer Rekord :zwinker:

Du kannst ja auch noch nie wirklich lange für ein Problem gebraucht haben, sonst hättest ja vor deiner Geburt anfangen müssen :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz