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)?