AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Nochmal was mit Winkeln

Ein Thema von igel457 · begonnen am 21. Dez 2005 · letzter Beitrag vom 21. Dez 2005
Antwort Antwort
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#1

Nochmal was mit Winkeln

  Alt 21. Dez 2005, 15:03
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.
Miniaturansicht angehängter Grafiken
fehler2_154.jpg  
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Nochmal was mit Winkeln

  Alt 21. Dez 2005, 15:16
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
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#3

Re: Nochmal was mit Winkeln

  Alt 21. Dez 2005, 15:21
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

Ich poste trotz Kasten, da meine Erklärung besser ist, und meine Gleichung etws anders (=richtig?) ist
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Nochmal was mit Winkeln

  Alt 21. Dez 2005, 15:30
Danke!

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

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




Danke an alle!
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#5

Re: Nochmal was mit Winkeln

  Alt 21. Dez 2005, 15:37
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
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Nochmal was mit Winkeln

  Alt 21. Dez 2005, 15:39
Zitat von igel457:
Ein Problem in weniger als 20 Min gelöst! (Für mich) ein neuer Rekord
Du kannst ja auch noch nie wirklich lange für ein Problem gebraucht haben, sonst hättest ja vor deiner Geburt anfangen müssen
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:52 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