Detecter un clic dans un cercle

Résolu
LordOfTheShadow Messages postés 174 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 9 septembre 2010 - 28 janv. 2009 à 16:00
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 - 30 janv. 2009 à 08:33
Bonjour à tous,
J'ai fait un userControl. Dans ce UserControl je dessine un cercle au dimension du UserControl. Est-ce-que quelqu'un connait une méthode simple de dire si oui ou non un clic a été effectué dans le cercle ou la region du cercle? comme pour la méthode Contains( ) de Rectangle par exemple...

La connaissance est la plus grande des richesses.

7 réponses

SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
28 janv. 2009 à 17:22
Hello,

Oui, il y a une méthode simple, si tu connais le centre du cercle, son rayon, et le point cliqué.

Si cx et cy sont les coordonées du centre du cercle et r son rayon,
et que px et py sont les coordonnées du point cliqué,

Si l'expression 
Sqrt((cx-px)^2+(cy-py)^2) <= r
est vrai, alors le point est dans le cercle.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
1
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
30 janv. 2009 à 08:33
Hello,

Tu sais, pour dessiner le cercle, l'ordinateur utilise certainement un technique similaire, et un calcul de racine carrée, n'est pas si lourd que ça pour un processeur.
Je viens de faire un petit test sur mon ordinateur.

Le calcul d'un milliard de racine carrées prend à peu près 25 secondes, donc pour 30 racines carrées, je ne pense pas qu'il faille t'inquiéter.

D'autant plus, que si tu veux optimiser pour ne plus avoir de racines, c'est facile :

(cx-px)^2+(cy-py)^2 <= r^2

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
1
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
28 janv. 2009 à 18:55
Un bête pythagore en somme

<hr />
-Blog-
-Site Perso-
0
LordOfTheShadow Messages postés 174 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 9 septembre 2010 5
29 janv. 2009 à 14:58
Ok ca marche! Merci beaucoup! Heu par contre je m'attendais à un truc plus simple du framework...mais bon on peut pas tout avoir. Merci encore.

La connaissance est la plus grande des richesses.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
29 janv. 2009 à 16:11
Euh, c'est une blague?
On donne une solution en une ligne et faut encore faire plus simple !?

<hr />
-Blog-
-Site Perso-
0
LordOfTheShadow Messages postés 174 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 9 septembre 2010 5
29 janv. 2009 à 18:15
Ce que je veux dire c'est que faire une racine carré c'est lourd pour le processeur (en tout cas dans mon cas car je reproduit plus de 30 fois la même action). C'est pas comme comme la méthode contains() qu'on peut faire sur un rectangle.


La connaissance est la plus grande des richesses.
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
29 janv. 2009 à 23:39
Mais ça n'a rien avoir!
La méthode Contains évalue de bête ligne droite, en regardant si t'es au-dessus/au-dessous, à gauche/droite...
Avec un cercle c'est pas possible!

Même si y'avait une méthode dans le framework genre IsInCircle, tu n'irais pas plus vite....

<hr />
-Blog-
-Site Perso-
0
Rejoignez-nous