Detecter un clic dans un cercle [Résolu]

Messages postés
175
Date d'inscription
vendredi 22 décembre 2000
Statut
Membre
Dernière intervention
9 septembre 2010
- - Dernière réponse : 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.
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
51
3
Merci
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)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 199 internautes nous ont dit merci ce mois-ci

Commenter la réponse de SharpMao
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
42
0
Merci
Un bête pythagore en somme

<hr />
-Blog-
-Site Perso-
Commenter la réponse de cs_Bidou
Messages postés
175
Date d'inscription
vendredi 22 décembre 2000
Statut
Membre
Dernière intervention
9 septembre 2010
4
0
Merci
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.
Commenter la réponse de LordOfTheShadow
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
42
0
Merci
Euh, c'est une blague?
On donne une solution en une ligne et faut encore faire plus simple !?

<hr />
-Blog-
-Site Perso-
Commenter la réponse de cs_Bidou
Messages postés
175
Date d'inscription
vendredi 22 décembre 2000
Statut
Membre
Dernière intervention
9 septembre 2010
4
0
Merci
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.
Commenter la réponse de LordOfTheShadow
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
42
0
Merci
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-
Commenter la réponse de cs_Bidou
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
51
0
Merci
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)
Commenter la réponse de SharpMao