Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   GLScene Direction in Angle umrechnen? (https://www.delphipraxis.net/165537-glscene-direction-angle-umrechnen.html)

CreativeMD 4. Jan 2012 18:15

GLScene Direction in Angle umrechnen?
 
Hi
Wie der Titel schon sagt will ich die Direction eines Objektes in Angle umrechnen.
Ich such schon die ganze Zeit über Google, aber ich finds net raus.
Kann mir jemand helfen.

Vielen Dank im voraus

Uwe Raabe 4. Jan 2012 19:46

AW: GLScene Direction in Angle umrechnen?
 
Ein Richtungsvektor (Direction) lässt sich in zwei Winkel umrechnen - welche beiden das sind, hängt vom persönlichen Geschmack und von den Anforderungen ab. Hat man die Bedeutung der Winkel einmal festgelegt, ist die Berechnung nicht so schierig. Meistens gibt es aber bestimmte Directions, die nicht eindeutig einer Winkel-Kombination zugeordnet werden können.

Z.B. kann man als einen Winkel φ die Projektion des Richtungsvektors (x, y, z) auf die XY-Ebene nehmen und dort den Winkel zur X-Achse ermitteln (-π..+π). Als zweiten Wert nimmt man dann z.B. den Winkel ρ zwischen dem Richtungsvektor und der XY-Ebene (-π/2..+π/2).

In der Unit Math gibt es eine Funktion ArcTan2, die aus zwei Koordinaten den entsprecheden Winkel errechnet. Die Formeln lauten:
φ := ArcTan2(y, x);
ρ := ArcTan2(z, Hypot(x, y));
Die Ergebnisse sind in Bogenmass (Radians) und können mit der Funktion RadToDeg in Grad umgerechnet werden.

Schwierig wird es, wenn der Vektor (0, 0, 1) ist. Dann ist der Ebenenwinkel nicht definiert und somit nicht berechenbar. Es kann auch Probleme geben, wenn der Vektor nur fasst parallel zur Z-Achse liegt, da man dann mit Zahlen nahe Null rechnet.

Bjoerk 4. Jan 2012 23:50

AW: GLScene Direction in Angle umrechnen?
 
CreativeMD, was willst du machen?

CreativeMD 5. Jan 2012 10:19

AW: GLScene Direction in Angle umrechnen?
 
Also ich hab vor kurzem dieses Thema eröffnet: http://www.delphipraxis.net/165312-e...-der-maus.html
Aber die Lösung hat viel zu stark geruckelt.
Deshalb wollte ich dann doch mal das TGLUserInterface benutzen aber der dreht das Objekt in mit Direction.
Aber meine ganze Steuerung funktioniert nur mit den Angles.

Delphi-Quellcode:
actor_turn, actor_pitch : Single
Delphi-Quellcode:
actor_pitch := ArcTan2(GLDummyCube1.Direction.Y, GLDummyCube1.Direction.X);
  actor_pitch := RadToDeg(actor_pitch);
Ich hab das mal so gemacht aber er sagt diesen Fehler:

[DCC Fehler] Main.pas(451): E2251 Doppeldeutiger überladener Aufruf von 'ArcTan2'
VectorGeometry.pas(7838): Verwandte Methode: function ArcTan2(const Single; const Single): Single;
System.Math.pas(1747): Verwandte Methode: function ArcTan2(const Single; const Single): Single;

[DCC Fehler] Main.pas(452): E2251 Doppeldeutiger überladener Aufruf von 'RadToDeg'
VectorGeometry.pas(7549): Verwandte Methode: function RadToDeg(const Extended): Extended;
System.Math.pas(1000): Verwandte Methode: function RadToDeg(const Extended): Extended;

Wenn ich einen Single machen gibt er mir diesen Fehler und bei Extended ebenfalls.
Was mache ich falsch?:?:

Uwe Raabe 5. Jan 2012 11:51

AW: GLScene Direction in Angle umrechnen?
 
Zitat:

Zitat von CreativeMD (Beitrag 1144420)
[DCC Fehler] Main.pas(451): E2251 Doppeldeutiger überladener Aufruf von 'ArcTan2'
VectorGeometry.pas(7838): Verwandte Methode: function ArcTan2(const Single; const Single): Single;
System.Math.pas(1747): Verwandte Methode: function ArcTan2(const Single; const Single): Single;

[DCC Fehler] Main.pas(452): E2251 Doppeldeutiger überladener Aufruf von 'RadToDeg'
VectorGeometry.pas(7549): Verwandte Methode: function RadToDeg(const Extended): Extended;
System.Math.pas(1000): Verwandte Methode: function RadToDeg(const Extended): Extended;

Wenn ich einen Single machen gibt er mir diesen Fehler und bei Extended ebenfalls.
Was mache ich falsch?:?:

Ich vergaß, daß GLScene die betreffenden Methoden bereits in VectorGeometry.pas mitbringt. Entferne einfach die Referenz auf die Unit Math und es sollte gehen.

CreativeMD 7. Jan 2012 17:03

AW: GLScene Direction in Angle umrechnen?
 
Danke

Ok Hat geklappt vielen Dank


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:03 Uhr.

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