Ich sehe hier einen Fehler:
B0 := Vektor2DMultiplyTwo(Vektor2DDivideWithFloat(B,1), B);
Wenn Vektor2DMultiplyTwo das tun würde, was man erwartet (andere Baustelle, s.u.), nämlich zwei Vektoren komponentenweise zu multiplizieren, würde diese Rechnung darauf hinauslaufen, dass du
immer den Vektor (1, 1) für B0 erhältst (weil (1/x)*x immer 1 ist (sofern x ≠ 0)).
Das wäre natürlich unsinnig. Du musst durch den
Betrag des Vektors dividieren. Dieser ist definiert über den Satz des Pythagoras: |v| = sqrt(v.x² + v.y²), was deinem v.Length entsprechen sollte.
Korrekt wäre also:
Delphi-Quellcode:
B0.X := B.X/B.Length;
B0.Y := B.Y/B.Length;
Weiter zur nächsten Baustelle:
Delphi-Quellcode:
function Vektor2DMultiplyTwo(Vekt1 : TVector2D; Vekt2 : TVector2D) : TVector2d;
begin
Result.X := Vekt1.X + Vekt2.X;
Result.Y := Vekt1.Y + Vekt2.Y;
end;
Wieso heißt die Funktion „Multiply“, obwohl sie die Vektoren schlichtweg addiert?