AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Prüfen ob auf einen Kreis geklickt wurde
Thema durchsuchen
Ansicht
Themen-Optionen

Prüfen ob auf einen Kreis geklickt wurde

Ein Thema von KahPee · begonnen am 21. Feb 2010 · letzter Beitrag vom 21. Feb 2010
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von KahPee
KahPee

Registriert seit: 12. Mai 2009
214 Beiträge
 
Turbo Delphi für Win32
 
#1

Prüfen ob auf einen Kreis geklickt wurde

  Alt 21. Feb 2010, 10:48
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
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Prüfen ob auf einen Kreis geklickt wurde

  Alt 21. Feb 2010, 10:52
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von KahPee
KahPee

Registriert seit: 12. Mai 2009
214 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Prüfen ob auf einen Kreis geklickt wurde

  Alt 21. Feb 2010, 10:58
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.622 Beiträge
 
Delphi 12 Athens
 
#4

Re: Prüfen ob auf einen Kreis geklickt wurde

  Alt 21. Feb 2010, 11:04
Zitat von KahPee:
Hat jemand eine Idee wie ich bei einer Linie das errechnen jeden einzelnen Pixels vermeiden kann?
Ich kann Dir nicht ganz folgen. In welchem Zusammenhang denn?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von KahPee
KahPee

Registriert seit: 12. Mai 2009
214 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Prüfen ob auf einen Kreis geklickt wurde

  Alt 21. Feb 2010, 11:11
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.622 Beiträge
 
Delphi 12 Athens
 
#6

Re: Prüfen ob auf einen Kreis geklickt wurde

  Alt 21. Feb 2010, 11:22
Ich habe gerade etwas bei den Schweizern gefunden.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Progman

Registriert seit: 31. Aug 2007
Ort: 99974 MHL
695 Beiträge
 
Delphi 10.1 Berlin Starter
 
#7

Re: Prüfen ob auf einen Kreis geklickt wurde

  Alt 21. Feb 2010, 11:29
Schau doch einfach mal in diesen Thread
Karl-Heinz
Populanten von Domizilen mit fragiler, transparenter Aussenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
(Wer im Glashaus sitzt sollte nicht mit Steinen werfen)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.622 Beiträge
 
Delphi 12 Athens
 
#8

Re: Prüfen ob auf einen Kreis geklickt wurde

  Alt 21. Feb 2010, 11:31
Es geht aber mittlerweile um ein anderes (wenn auch ähnliches) Problem: "Liegt ein Punkt auf einer Linie?"
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Progman

Registriert seit: 31. Aug 2007
Ort: 99974 MHL
695 Beiträge
 
Delphi 10.1 Berlin Starter
 
#9

Re: Prüfen ob auf einen Kreis geklickt wurde

  Alt 21. Feb 2010, 11:36
hm, ich hatte mich am Thread-Titel orientiert
Karl-Heinz
Populanten von Domizilen mit fragiler, transparenter Aussenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
(Wer im Glashaus sitzt sollte nicht mit Steinen werfen)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.622 Beiträge
 
Delphi 12 Athens
 
#10

Re: Prüfen ob auf einen Kreis geklickt wurde

  Alt 21. Feb 2010, 11:38
[OT] Das darf man hier nicht tun, weiß ich aus eigener Erfahrung [/OT]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:48 Uhr.
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