Darüber habe ich mir auch mal nen Kopf gemacht, hier meine Lösung:
Delphi-Quellcode:
type
T3DVector = record
x: double;
y: double;
z: double;
end;
function abs(vector: T3DVector): double; overload;
begin
Result := sqrt(sqr(vector.x) + sqr(vector.y) + sqr(vector.z));
end;
function scalarprod(vector1: T3DVector; vector2: T3DVector): double;
begin
Result := vector1.x * vector2.x + vector1.y * vector2.y + vector1.z * vector2.z;
end;
function arc(vector1: T3DVector; vector2: T3DVector): double;
var temp: double;
begin
temp := scalarprod(vector1, vector2)/(abs(vector1)*abs(vector2));
if IsZero(temp) then
Result := RadToDeg(arccos(temp))
else
Result := 0;
end;
Das ist gerade das Beispiel für den Winkel zwischen 2 Vektoren, habe mir aber noch sehr viele mehr nützliche Funktionen selber zusammengeschrieben.
Hoffe du kannst was damit anfangen.
Flare