Einzelnen Beitrag anzeigen

Benutzerbild von md_mse
md_mse

Registriert seit: 13. Aug 2003
Ort: Berlin
95 Beiträge
 
#8

Re: Frage zu Winkelberechnungen...

  Alt 30. Nov 2005, 09:35
So, ich möchte euch erstmal für eure Mühen danken, jedoch hat mich keine vorgeschlagene Lösung weiter gebracht .
Die Ableitung der X Achse brachte mir immer nur den gleichen Wert, die Ableitung der Y-Achse war unberechenbar , zumindest bei der von mir verwendeten Spline-Funktion.
Ein Kommillitone hat sich mal folgende Lösung ausgedacht, die perfekt funktioniert:
Delphi-Quellcode:
function SubtractVectors(AVec1, AVec2: TD3DVector): TD3DVector; inline;
begin
  Result := D3DXVector3(AVec2.x - AVec1.x, AVec2.y - AVec1.y, AVec2.z - AVec1.z);
end;

//x1,y1 : Vector Startpunkt, x2,y2 : Vector End punkt
function CalculateAngel(AVec1, AVec2: TD3DVector): Single;
var
  Flt: Single;
begin
  // Vektor in sein eigenes System bewegen
  SubtractVectors(AVec1, AVec2);
  AVec2.x := 1;
  AVec2.z := 0;

  // Winkel berechen
  Flt := Sqrt( Sqr(AVec1.x) + Sqr(AVec1.z) ) * Sqrt( Sqr(AVec2.x) + Sqr(AVec2.z) );
  if not IsZero(Flt) then
    Result := Abs(ArcCos(((AVec1.x * AVec2.x) + (AVec1.z * AVec2.z)) / Flt)) else
    Result := 0.0;

  //1. Quadrant
  if (AVec1.x > 0) and (AVec1.z > 0) then
    // keine Änderung
    //2. Quadrant
    else if (AVec1.x < 0) and (AVec1.z > 0) then
    // keine Änderung
    //3.Quadrant
    else if (AVec1.x < 0) and (AVec1.z < 0) then
      Result := Result + Pi
    //4.Quadrant
    else if (AVec1.x > 0) and (AVec1.z < 0) then
      Result := Result + Pi;
end;
Trotzdem nochmal vielen Dank!

P.S.: Vielleicht etwas für die CodeLib (Stichwort Direct3D/Winkelberechnung)?
  Mit Zitat antworten Zitat