Autor Beitrag
Crazy K
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mo 24.03.03 13:06 
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 997



BeitragVerfasst: 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.

_________________
Life is a bad adventure, but the graphic is really good!