Zitat von
NamenLozer:
Es gibt allerdings eine Division durch 0, wenn die Strecken exakt aufeinander liegen, man sollte diesen Fall also vorher im Programm abfangen.
Das sollte von intersectlines gemanaged werden:
Delphi-Quellcode:
fdiv := v1.x * u1.y - v1.y * u1.x;
if Abs(fdix) < 1e-20 then
result := True;
else
begin
t := -(v0.x * u1.y - v0.y * u1.x - u0.x * u1.y + u0.y * u1.x) / fdiv;
s := -(v0.x * v1.y - v0.y * v1.x + v1.x * u0.y - v1.y * u0.x) / fdiv;
v1.multiply(t);
// Punkt wo sie sich schneiden:
p := v0.plus(v1);
if ((t>0) AND (s>0)) AND ((t<1) AND (s<1)) then
begin
output := point(round(p.x),round(p.y));
result := true;
end;
end;