Einzelnen Beitrag anzeigen

Benutzerbild von KahPee
KahPee

Registriert seit: 12. Mai 2009
214 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Prüfen ob Punkt auf Linie

  Alt 21. Feb 2010, 12:07
Ich hab grad ein Problem mehr gefunden.. -> senkrechte Linien sind möglich. Allerdings ist das kein wirkliches Problem. Wenn die x werte von start- und endpunkt gleich sind wird einfach ne andere Routine aufgerufen.

Da das schweizersystem scheinbar nicht so einfach ist wie zuerst gedacht.. Vllt doch noch mal die konventionelle variante:
Zitat:
d.h. ich würde als allererstes die Steigung der Linie ausrechnen. Dann müsste man den y-Achsenabschnitt ermitteln (bei dem Ursprung oben links wird der negativ)

und dann für x=start.x bis end.x alle Punkte der Linie mittels f(x)=m*x+b errechnen. Wenn ein Punkt errechnet wurde wird dieser mit dem Punkt an den geklickt wurde verglichen. Sollte es einen Treffer geben wird die Prozedur abgebrochen und der Wert der Funktion als "true" zurückgegeben. Wenn es keinen Treffer gab wird der nächste Punkt geprüft.
Delphi-Quellcode:
function checkpointonline(start.x, start.y, ende.x,ende.y,p.x,p.y):boolean;
var x: extended;
    b,i,a: integer;
begin
  m := (end.y-start.y)/(end.x-start.x);
  b:= round(end.y-(m*end.x);

  for i:=-(toleranz+stifdicke) to toleranz+stiftdicke do
   begin
   for a:=-(toleranz+stifdicke) to toleranz+stiftdicke do
   begin
     if (p.y+i)=round((p.x+a)*m+b) then
      begin
        result:=true;
        exit;
      end
     else result:=false;
   end;
  end;
end;
Problem bei diesem Algorithmus könnte sein, dass das ziemlich langsam wird bei längeren Linien und vorallem vielen Linien die überprüft werden sollen.
  Mit Zitat antworten Zitat