Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| Substract(m_Point[1], l_Point, l_Connection1); Substract(m_Point[2], l_Point, l_Connection2); Substract(m_Point[3], l_Point, l_Connection3); l_Connection1.Normalize; l_Connection2.Normalize; l_Connection3.Normalize;
l_AngleSum:=l_AngleSum+arccos(Skalarprodukt(l_Connection1, l_Connection2)); l_AngleSum:=l_AngleSum+arccos(Skalarprodukt(l_Connection2, l_Connection3)); l_AngleSum:=l_AngleSum+arccos(Skalarprodukt(l_Connection3, l_Connection1)); |
Hier tritt bei einem der arccos Funktionen der Fehelr auf. Ungültige Gleitkommaoperation.
die ganzen l_Connection's sind alle vom Typ CVector, l_AngleSum ist real und mit 0 initialisiert.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure CVector.Normalize; var l_length : real; begin l_length:=self.Length; if(l_length<>0) then begin X:=X/l_length; Y:=Y/l_length; Z:=Z/l_length; end; end;
function CVector.Length : real; begin result:=sqrt(X*X+Y*Y+Z*Z); end;
function Skalarprodukt(V1 : CVector; V2 : CVector) : real; begin result:=(V1.X*V2.X)+(V1.Y*V2.Y)+(V1.Z*V2.Z); end; |
In der Hilfe standt, das arccos nur Werte von -1 bis 1 haben darf. Ist ja auch mathematich korrekt so.
Dasehalb sind die Vektoren ja auch normalisiert worden. Tjo, sie werdne nur nciht normalisiert, wenn ihre Länge 0 ist, sonst gäbs ja "divided by zero".
Nun, sowohl Normalize als aus Skalarprodukt müssten korrekt sein, ahben auch immer Funktioniert.
Theoretisch müsste es ja auch von den Vektoren m_Point[1..3] und l_Point total unabhängig sein. Wie gesagt, die l_Conenction's müssten doch theoretisch ganz beliebige Vektoren sein können. Bei CVector sindd ie 3 Elemente real's, also, ka.
Für Nullvektoren ist ja das Skalarprodukt dann halt auch immer 0 was bei arccos keine Probmleme machen dürfte.
Initialisiert sind die l_Connection's auch sonst müsste es ja auch zugriffsfehler geben, oder?
Ich bin gerade am verzweifeln, denn das dürfte gar nicht sein, wie es ist. Bei normalisierten Vkeotren kann Skalarprodukt nix außerhabl von -1..1 erzuegen und wie könnte es sonst zu diesem Fehler kommen? eine addition kann wohl kaum dafür verantwortlich sein, nur der Debugger zeigt halt genau immer eine der arccos Zeilen als Fehler an.
Ich bin echt mit meinem Latein am Ende.