Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

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 9. Nov 2006 21:42


auf linen klicken
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
seit stundne versuche ich eine lösung zu finden wie ich checken kann ob auf eine line geklick wurden ist oder nicht.
z.b.
start:33,26
colli:74,67
end:96,86

wie kann ich am besten prüfen ob der colli(der klick punkt) auf dieser line steht oder nicht... ich habe mir bei wikipedia was durchgelesen aber das verstehe ich leider nicht, weil es in mahte geschrieben ist(ist anscheind eine eigene sprache)...
kann mir jemmand genau erklären wie ich das schreiben muss?
mir geht es nicht darum den qullcode zuhaben sondern ich möchte verstehen wie sowas geht von der technik her... ich hoffe ihr wist was ich meine im anahng ist noc hein beispiel bild(was hier vergößrst solltet):

hibbert 9. Nov 2006 22:01

Re: auf linen klicken
 
hi,
ich habe zwar den Artikel nicht gelesen, aber ich könnt mir folgendes denken:
wenn du eine bestimmte Hintergrundfarbe hast, dann kasst du doch einfach die Farbe die unter dem "colli" is abfragen. Ist diese gleich der Hintergrundfarbe dann ist die Linie nicht geklickt.

mimi 9. Nov 2006 22:12

Re: auf linen klicken
 
so einfach geht das leider nicht. ich möchte ein grafik programm schreiben wo verschiende objekte auf ein hintergrund sein können und das geht soweit.

wie ich sowas mit rechtecken mache weiß ich..... nur halt mit linen weiß ich das leider nicht :( :(

Lannes 9. Nov 2006 22:49

Re: auf linen klicken
 
Hallo,

"auf linien klicken" = PointInLine, eventuell kannst du ja russisch :wink:
forum.pascal.net.ru > Задачи

Muetze1 9. Nov 2006 23:06

Re: auf linen klicken
 
Du hast einen Anstieg m von dem Ausgangspunkt zum Endpunkt der Linie. Wenn nun der Anstieg m vom Ausgangspunkt zu deinem Mauspunkt gleich gross ist, dann sollte der punkt auf der Linie liegen. Nun musst du nur noch testen, ob der Mauspunkt nicht vor dem Anfang oder nach dem Ende der Linie liegt. Daher: Einfach prüfen ob der Mauspunkt innerhalb des Rechtecks liegt. Das Rechteck ergibt sich aus den Koordinaten des Anfangs- und Endpunktes der Linie.

Nur mal so theoretisch gesprochen für eine Lösung.

SirThornberry 10. Nov 2006 11:28

Re: auf linen klicken
 
mit einer einfachen Verhältnisgleichung sollte es auch lösbar sein. Der Ursprung der Linie ist 0, 0 das Ende der Linie liegt bei x1, y1
Dann hasst du die Mauskoordinaten x2, y2
wenn du jetzt x1 und y1 ins Verhältnis setzt zu x2 und y2 kannst du errechnen ob dies stimmt
Code:
x1   x2
-- = --
y1    ?
Wenn Fragezeischen gleich dem Wert von y2 ist (also der Errechnete Wert mit der Mausposition überein stimmt) bist du auf der Linie. Je nach Linienstärke natürlich etwas tolleranz zulassen.

mimi 10. Nov 2006 17:08

Re: auf linen klicken
 
wenn ich dich recht verstehe müste ich folgendes schreiben um zu testen ob ein line angeklickt wurden ist oder nicht:
Delphi-Quellcode:
if (X1 div Y1) = (x2 div y2) then
ist makiert
else
nichtmakiert
problem dabei ist nur das meine ursprungs position nicht bei 0,0 ist sondern irgenwo auf dem monitor müste ich das dann noch verändern ?

:Muetze1
das verstehe ich nicht was du meinst.....

Khabarakh 10. Nov 2006 17:57

Re: auf linen klicken
 
Zitat:

Zitat von mimi
:Muetze1
das verstehe ich nicht was du meinst.....

Ist der gleiche Vorschlag wie der des Gummbärchens.

@Muetze1 & SirThornberry: Für einen exakten Klick mag das reichen, aber der Fall ist wohl _äußerst_ unwahrscheinlich ;) . Mit der Toleranz wird das nicht funktionieren, der Mausbereich ist dann auf der einen Seite dünn wie ein Faden und auf der anderen aufgefächert.

@mimi: Tut mir leid, aber es _geht_ einfach nicht einfacher als mit Vektoren.
Startpunkt A, Endpunkt B, Maus C

Du musst das Lot von C auf AB konstruieren. Mit dem Skalarprodukt kannst du überprüfen, ob der Lotfußpunkt überhaupt auf AB liegt: 0 <= ((B - A) . (C - A)) / |A| <= |B|. Nun musst du noch die Lotlänge errechnen, zB per Pythagoras, und überprüfen, ob sie kleiner als die Toleranz ist.
Zusätzlich kannst du noch prüfen, ob |C - A| oder |C - B| < Toleranzwert ist, ob C also in einem Kreis um einen der Linienpunkte liegt.

Alles aus dem Kopf, habe ich so oder so ähnlich ;) in meinem Bézier-Program benutzt.

mimi 10. Nov 2006 21:05

Re: auf linen klicken
 
vielen dank für eure hilfe. aber leider verstehe ich nicht viel von geometry. nur das einfachsts.

Ich weiß z.b. wie ich eine line zeichnen kann(also selbst ohne lineTo und MoveTo) und wie ich eine collision auf ein rechteck prüfen kann... mehr leider nicht...
kenntst du oder einer von euch eine seite wo "computer geometry" beschrieben wird ?
(in einfachen worten gefasst) und halt auf deutsch....

das währe praktisch weil ich möchte ja verstehen wie das funktioniert und nicht einfach code nehmen den es schon gibt !

inherited 10. Nov 2006 22:09

Re: auf linen klicken
 
Einfacher als mit Gummibärchens lösungs gehts aber leider nicht ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:09 Uhr.
Seite 1 von 4  1 23     Letzte »    

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