Thema: Delphi auf linen klicken

Einzelnen Beitrag anzeigen

Benutzerbild von idontwantaname
idontwantaname

Registriert seit: 31. Aug 2004
Ort: Traiskirchen
575 Beiträge
 
Turbo Delphi für Win32
 
#21

Re: auf linen klicken

  Alt 14. Nov 2006, 22:11
Eine recht einfache Möglichkeit das Problem zu lösen ist über die Hessesche Normalform:
Delphi-Quellcode:
var
 // Gegeben
  A: TPoint; // Punkt der Geraden
  B: TPoint; // Punkt der Geraden
  P: TPoint; // Punkt des Mausklicks

 // errechnete Werte
  g: TPoint; // Richtungsvektor
  n: TPoint; // Normalvektor
  d: Integer; // d = a*x + b*y

  HNF: Double;
begin
  g := Point(B.X - A.X, B.Y - A.Y);
  n := Point(g.Y, -g.X);
  d := n.X * A.X + n.Y * A.Y;

  HNF := Abs((n.X * P.X + n.Y * P.Y - d) / Sqrt(n.X * n.X + n.Y * n.Y));

  // hier Wert anpassen
  if HNF < 20 then
    ShowMessage('getroffen')
  else
    ShowMessage('daneben');
end;
Edit: Falls du wirklich schauen möchtest, ob der Punkt auf der Geraden liegt (was hier unsinnig ist durch die Ungenauigkeit von Pixeln), so musst du folgendes überprüfen:
Delphi-Quellcode:
if n.X * P.X + n.Y * P.Y = d then
  ShowMessage('Punkt liegt auf der Geraden')
else
  ShowMessage('Punkt liegt nicht auf der Geraden');
Oliver Hanappi
  Mit Zitat antworten Zitat