![]() |
Re: auf linen klicken
hier habe ich letzten ein code geschrieben(abgeschrieben aus einem buch und leicht angepasst):
Delphi-Quellcode:
da bei jedem durchlauf die position um die angeben xdiff und ydiff werte erhört nur ich weiß leider nicht wie ich das um setzten könnte... weil eine schleife wollte ich eigetnlich nicht starten !
for i:=0 to High(obj) do begin
with obj[i] do begin xWeg:=zx-px; yWeg:=zy-py; strecke:=Sqrt(Sqr(xweg)+Sqr(yweg)); schritte:=Strecke /1; xdiff:=Xweg / Schritte; ydiff:=yweg / Schritte; if zx < px then begin px:=Round(px+xDiff); end else isx:=True; if zy < py then begin py:=round(py + yDiff); end else isY:=True; if (isx = true) and (isy= true) then begin Spray(DXDraw1.Surface.Canvas,round(px),round(py),20,clred); DXDraw1.Surface.Canvas.Release; end; DXImagelist1.Items[0].Draw(dxdraw1.Surface,round(px),round(py),0); end; end; und gewisse tolleranzen würde ich auch gut finden ! |
Re: auf linen klicken
Hallo,
Die Idee, den Anstieg der Geraden mit dem Anstieg zum clickpoint zu vergleichen hat einen schwer wiegenden Nachteil, wenn ein Toleranzbereich definiert werden soll. Da würde sich die Clicktoleranz entlang der Geraden ändern. Einen Tolranzbereich (Pickbox) braucht es aber für die Bedienbarkeit des progs. Eine Schleife braucht es nicht, um fest zu stellen, dass der clickpoint auf der Linie liegt, das wird zu aufwändig. Besser ist es, einfach den Abstand des clickpoints zur line zu berechnen und wenn der klein genug ist, die line als angeclickt zu betrachten. Das geht auch ohne Vektorrechnung. grüsse der flossinger |
Re: auf linen klicken
@flossinger
könntes du bitte ein beispiel machen weil so ganz verstehe ich das noch nicht... ich werde heute mal im internet nach einer seite suchen wo Geometry mit dem computer verbunden ist! |
Re: auf linen klicken
Ja bitte gerne:
Ich habe eine line von x1,y1 nach x2,y2. Dann clicke ich und habe den clickpunkt x3,y3. Den ergänze ich mit einem weitern Punkt, so dass ich eine zweite line habe, die senkrecht auf die erste steht.
Delphi-Quellcode:
teste das mal, und du wirst sehen, dass die lines senkrecht zueinander stehen.
image1.canvas.moveto(x3,y3);
x4:=x3+(y2-y1); y4:=y3-(x2-x1); // image1.canvas.lineto(x4,y4); // test Als nächstes berechnest du den Schnittpunkt der beiden Geraden, und du kannst den Abstand daraus ableiten. grüsse, der flossinger |
Re: auf linen klicken
Liste der Anhänge anzeigen (Anzahl: 1)
Habe noch einen screenshot dazu gemacht:
so kann das aussehen. grüsse, der flossinger |
Re: auf linen klicken
Hey wo ist dann der Schnittpunkt genau?
Tomka |
Re: auf linen klicken
hier mal eine Lösung:
Delphi-Quellcode:
fLinie ist vom Typ "TRect" wobei TopLeft die den Startpunkt angibt und BottomRight den EndPunkt.
fLinie := Rect(50, 50, 200, 80);
[...] procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var lPoint : TPoint; lNeededY: Integer; begin X := X - fLinie.Left; Y := Y - fLinie.Top; lPoint := Point(fLinie.Right - fLinie.Left, fLinie.Bottom - fLinie.Top); if (X >= 0) and (Y >= 0) and (X < lPoint.X) and (Y < lPoint.Y) then begin lNeededY := Round(X * lPoint.Y / lPoint.X); if (lNeededY > Y - 5) and (lNeededY < Y + 5) then caption := 'Linie getroffen' else caption := 'Linie verfehlt'; end else caption := 'außerhalb der Linie'; end; |
Re: auf linen klicken
Der Ansatz ist leider noch ungenauer als der letzte ;) . Je senkrechter die Linie desto kleiner der Klickbereich (bei 90/270° dann ganz wech). Wobei du das X >= 0 weglassen können solltest.
|
Re: auf linen klicken
wenn "X >= 0" weggelassen wird ist es möglich auch links neben der Linie zu klicken wo sie gar nicht ist.
|
Re: auf linen klicken
Achje, habs verdreht. Stattdessen müsste du "Y >= 0" "Y > 0" heißen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz