Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi auf linen klicken (https://www.delphipraxis.net/80500-auf-linen-klicken.html)

mimi 10. Nov 2006 22:25

Re: auf linen klicken
 
hier habe ich letzten ein code geschrieben(abgeschrieben aus einem buch und leicht angepasst):
Delphi-Quellcode:
 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;
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 !

und gewisse tolleranzen würde ich auch gut finden !

flossinger 12. Nov 2006 14:28

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

mimi 12. Nov 2006 16:27

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!

flossinger 12. Nov 2006 16:58

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:
  image1.canvas.moveto(x3,y3);
  x4:=x3+(y2-y1);
  y4:=y3-(x2-x1);
//  image1.canvas.lineto(x4,y4); // test
teste das mal, und du wirst sehen, dass die lines senkrecht zueinander stehen.

Als nächstes berechnest du den Schnittpunkt der beiden Geraden, und du kannst den Abstand daraus ableiten.

grüsse,
der flossinger

flossinger 13. Nov 2006 19:40

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

TomKa 14. Nov 2006 19:42

Re: auf linen klicken
 
Hey wo ist dann der Schnittpunkt genau?

Tomka

SirThornberry 14. Nov 2006 20:23

Re: auf linen klicken
 
hier mal eine Lösung:
Delphi-Quellcode:
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;
fLinie ist vom Typ "TRect" wobei TopLeft die den Startpunkt angibt und BottomRight den EndPunkt.

Khabarakh 14. Nov 2006 20:30

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.

SirThornberry 14. Nov 2006 20:47

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.

Khabarakh 14. Nov 2006 20:59

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 12:48 Uhr.
Seite 2 von 4     12 34      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz