Zitat von
DGL-luke:
damit kann man ja nur herausfinden, ob die linie im 45° Winkel ist.
aber wie kann man aus anfangs- und endpunkt eine machen, das ist die frage.
Du meinst so eine Art "Snap-In" Einrast Funktion ?
Also erst mal schauen, in welchem Quadranten wir sind:
Delphi-Quellcode:
function Quadrant(p:TPoint):integer;
begin
if (p.x=0) or (p.y=0) then
result := 0
else if p.x > 0 then
begin
if p.y > 0 then
result := 1
else
result := 2;
end
else
begin
if p.y > 0 then
result := 3
else
result := 4;
end;
end;
Dann anhand des Quadranten den Zielpunkt rechnen.
Ich verwende hier nur die X-Koordinate; man könnte auch nur Y verwenden
oder mit Pythagoras die Länge errechnen.
Man muss alle 4 möglichen Fälle aufzeichnen, um die korrekten Vorzeichen rauszukriegen.
Delphi-Quellcode:
case Quadrant(Point(X-SP.X,Y-SP.Y)) of
1: EP := Point(X, X);
2: EP := Point(X, -X);
3: EP := Point(X, -X);
4: EP := Point(x, X);
0: EP := Point(X,Y); // sonderfall: Falls X oder Y gleich 0 darf man auch
// auf den Achsen einrasten
end;