Thema: Delphi auf linen klicken

Einzelnen Beitrag anzeigen

flossinger

Registriert seit: 22. Aug 2005
Ort: südlich der Alpen
109 Beiträge
 
Delphi 5 Standard
 

Re: auf linen klicken

  Alt 15. Nov 2006, 04:17
Hallo,

zu der Frage, wo der Schnittpunkt ist, habe ich eine Lösung ausgearbeitet, die bewusst ohne Vektorrechnung auskommt und mit skalarer Algebra nachvollziehbar ist.

Dabei habe ich eine line von x1,y1 nach x2,y2.
Die senkrecte Linie darauf verläuft vom Clickpunkt x3,y3 nach x4,y4.
Wobei wie gesagt x4:=x3+(y2-y1); und y4:=y3-(x2-x1);

Der Schnittpunkt x,y berechnet sich nun so:
Delphi-Quellcode:
dxa:=x2-x1;
dya:=y2-y1;
dxb:=x4-x3;
dyb:=y4-y3;
x:=round(((y3-y1)*dxa*dxb+x1*dya*dxb-x3*dyb*dxa)/(dya*dxb-dyb*dxa));
if abs(dxa)>abs(dxb) then
  y:=round(((x-x1)*dya+y1*dxa)/dxa)
  else
  y:=round(((x-x3)*dyb+y3*dxb)/dxb);
// die genauere Variante wird gewählt und /0 vermieden
Die Distanz vom Clickpunkt zur Geraden, die durch die line verläuft beträgt:dist:=round(sqrt(sqr(x3-x)+sqr(y3-y))); Mit der folgenden Bedingung kann noch abgefragt werden, ob die senkrechte Gerade die line trifft, oder ob der Schnittpunkt ausserhalb der Endpunkte liegt:
Delphi-Quellcode:
if not((((x<=x1)and(x>=x2))or((x>=x1)and(x<=x2)))
   and (((y<=y1)and(y>=y2))or((y>=y1)and(y<=y2)))) then
  dist:=-1;
Wenns Fragen gibt, nur her damit. Der code ist übrigens gut ausgetestet.

grüsse,
der flossinger
  Mit Zitat antworten Zitat