Entwickler-Ecke

Multimedia / Grafik - Die Punkte die auf einer Linie liegen...


Crazy K - Mo 24.03.03 13:06
Titel: Die Punkte die auf einer Linie liegen...
Hi,
Könnt ihr mir vielleicht bei einem Problem helfen.
Wenn ich eine einfache simple Linie zeichne,

canvas.LineTo(X,Y);

Wie kann ich dann ermitten, welche Punkte auf der Linie liegen. Habt ihr da eine Idee. Ich danke für jeden Vorschlag!

Crazy K


UGrohne - Mo 24.03.03 13:19

Du stellst eine Geradengleichung auf (wie in Geometrie) nach der Form y:=m*x+c und zwar mit der Punkt-Steigungsform (m=(x-x1)/(y-y1)) und durch einsetzen des Ursprungspunktes, um c auszurechnen. Dann kannst Du die zu prüfenden Koordinaten einsetzen und wenn sich eine wahre GLeichung ergibt, ist der Punkt auf der Linie. Ein Funktionkönnte wie folgt aussehen:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
function punktauflinie(x1,y1,x2,y2,x,y:double):Boolean;
var m,c:double;
begin
Result:=False;
m:=(x2-x1)/(y2-y1);
c:=y1/(m*x1);
if y=m*x+c then Result:=True;
end;


Hab das jetzt nur so hingeschrieben, ich hoffe, das funktioniert.

Gruß

EDIT:X1/Y1 und X2/Y2 sind zwei sichere Punkte auf der Geraden, also am besten die Daten von MoveTo und LineTo


Crazy K - Mo 24.03.03 13:33

Schönen dank, das sollte wirklich funktionieren. Ich erinnere mich dunkel an meinen Matheunterricht...

THX Crazy K


Andreas Pfau - Mo 24.03.03 18:36

Sollte es nicht funktionieren (hab's nicht probiert), nimm LineDDA() (Win-API), die macht nämlich nix anderes. Läuft über eine Callback, so kannst Du z.B. einen Array mit dem Koordinaten füllen. Der Unterschied: LineDDA() sagt dir, welche Punkte du zeichnen musst, ist aber ungeeginet für Hover-Effekte ("ist-cursor-auf-der-linie"). Die Methode von UGrohne sagt die, ob ein Punkt drauf ist, z.B. für Hover-Effekte, aber zum Zeichnen ungeeignet.