![]() |
Prüfen ob auf einen Kreis geklickt wurde
Hallo,
ich habe ein Zeichenprogramm bei dem verschiedene geometrische Objekte gezeichnet werden. Unter anderem werden Kreise gezeichnet. Die Einzigen Informationen die ich über den Kreis zur Verfügung habe sind Mittelpunkt und ein beliebiger Punkt auf dem Kreisbogen. Mittels dieser Informationen wird im Verlauf des Programms auch der Kreis gezeichnet (Radius wird ermittelt und dann angepasst mit canvas.ellipse). Das Problem das ich jetzt habe ist folgendes: Wenn man mit der Maus auf die Zeichenfläche klickt soll überprüft werden ob auf den Kreis geklickt wurde.Dazu müsste ich ja im Prinzip erstmal jeden einzelnen Pixel des Kreisbogen berechnen (bzw. ein Viertel [achtel wäre auch möglich] und dann über Spiegelungen) und in ein Array schreiben. Oder gibt es da einen geschickteren Weg? Bei anderen geometrischen Figuren (Rechteck, Linie [f(x)=m*x+b]) gestaltet sich das ganze ja etwas einfacher. mfg KahPee |
Re: Prüfen ob auf einen Kreis geklickt wurde
Ich glaube so kompliziert muss es gar nicht sein. Du weißt den Mittelpunkt vom Kreis und hoffentlich auch den Radius des Kreises. Wenn jetzt jemand auf die Zeichenfläche klickt brauchst du nur die Entfernung zwischen Klickpunkt und Mittelpunkt des Kreises berechnen und prüfen ob diese Strecke kleiner oder gleich dem Radius des Kreises ist.
|
Re: Prüfen ob auf einen Kreis geklickt wurde
Hey genau so eine Idee hab ich gesucht ;) das macht echt vieles einfacher!! Auch ermöglicht diese Variante eine gewisse Toleranz (wenn man nicht genau auf den Kreisbogen klickt sondern knapp daneben. Ich denke mal, dass die Variante auch schneller ist als mit f(x)=sqrt(radius^2-x^2) [für x=0 bis x=rad] alle Pixel zu errechnen.
Bei dem Rechteck dürfte der Logarithmus auch recht simpel sein. Hat jemand eine Idee wie ich bei einer Linie das errechnen jeden einzelnen Pixels vermeiden kann? mfg Kahpee |
Re: Prüfen ob auf einen Kreis geklickt wurde
Zitat:
|
Re: Prüfen ob auf einen Kreis geklickt wurde
Die Momentane Idee wäre folgende. Bei der Linie habe ich als Informationen den Start und den Endwert vorliegen.
d.h. ich würde als allererstes die Steigung der Linie ausrechnen. Dann müsste man den y-Achsenabschnitt ermitteln (bei dem Ursprung oben links wird der negativ) und dann für x=start.x bis end.x alle Punkte der Linie mittels f(x)=m*x+b errechnen. Wenn ein Punkt errechnet wurde wird dieser mit dem Punkt an den geklickt wurde verglichen. Sollte es einen Treffer geben wird die Prozedur abgebrochen und der Wert der Funktion als "true" zurückgegeben. Wenn es keinen Treffer gab wird der nächste Punkt geprüft. Die Frage ist nun ob es eine einfacher Möglichkeit gibt zu gucken ob auf die Linie geklickt wurde. |
Re: Prüfen ob auf einen Kreis geklickt wurde
Ich habe gerade etwas bei den
![]() |
Re: Prüfen ob auf einen Kreis geklickt wurde
Schau doch einfach mal
![]() |
Re: Prüfen ob auf einen Kreis geklickt wurde
Es geht aber mittlerweile um ein anderes (wenn auch ähnliches) Problem: "Liegt ein Punkt auf einer Linie?"
|
Re: Prüfen ob auf einen Kreis geklickt wurde
hm, ich hatte mich am Thread-Titel orientiert :)
|
Re: Prüfen ob auf einen Kreis geklickt wurde
[OT] Das darf man hier nicht tun, weiß ich aus eigener Erfahrung :) [/OT]
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:00 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