INCLUSION D'UN POINT DANS UN CERCLE

Utilisateur anonyme - 5 juin 2011 à 20:00
smathis Messages postés 153 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 17 juin 2011 - 8 juin 2011 à 16:23
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/53236-inclusion-d-un-point-dans-un-cercle

smathis Messages postés 153 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 17 juin 2011 5
8 juin 2011 à 16:23
Oui, si on cherche à savoir si le point, ou pixel, sera sur la représentation heum, abstraite, vectoriel (?). Mais savoir pour l'image une fois qu'elle est créée... On ne sait pas facilement quels pixels seront des points de contour si on a pas l'algo de création d'un cercle.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
8 juin 2011 à 15:43
"la formule mathématique n'est pas adaptable pour l'info. "

effrayant...

je veux dire, le coté pixel, etc.
n'est qu'une représentation de ton cercle, coté précisément...

ton cercle reste modélisé avec u, v, R, en tant que float, par exemple, et d'une précision "infinie".

quand arrive le moment de passer des coordonnées de ton modèle à l'écran, il faut faire des compromis niveau précision... mais cela reste une représentation de ton modèle mathématique, passé par une adaptation (fonction de ta résolution, entre autres)
smathis Messages postés 153 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 17 juin 2011 5
8 juin 2011 à 13:18
Non en effet, il y a une méthode plus pratique, si on souhaite de la précision. C'est sûr que dans beaucoup de cas on s'en fou de savoir quel pixel est visé.
En très très gros, pour les traits :
Tu imagines un trait reliant deux points, ce trait passe par des pixels, mais tu les coliries pas tous, et en fait tu calcules les ecarts entre le trait, et les centres des pixels, le plus proche a le droit de se faire colorier.
Donc à un endroit donner tu peux recalculer le pixel colorier, pour vérifier s'il est sur le trait.

Pour les cercles je n'ai pas vraiment exploré, mais il doit y avoir un truc ressemblant.
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
8 juin 2011 à 12:02
et pourtant, je suis sûr que les concepteurs de jeux video utilisent des formules mathématiques... j'imagine bien le type faire des boucles tout autour des cercles :D lol
smathis Messages postés 153 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 17 juin 2011 5
8 juin 2011 à 11:49
Mais la formule mathématique n'est pas adaptable pour l'info.
Avec une tolerance, fixé arbitrairement, on risque toujours de louper des points ou d'en trouver en trop.

Le problème est identique avec un trait droit !
Si le trait est horizontal ou vertical, ou est la première bisectrice, pas de souci.
Mais sur une droite à 89°. On aura plus ou moins des traits verticaux décalés d'un pixel. Donc pour savoir à quel moment les décalages s'opèrent, à moins d'avoir l'algo de Bresenham et essayer de se démerder pour recalculer... on ne pourra pas dire avec certitude si le point est sur la droite.
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
8 juin 2011 à 11:29
Dans ce cas, il ne faut pas présenter cette source dans la catégorie Mathématique...
Pour moi, la seule formule valable est celle que j'ai appris à l'école... maintenant, tu peux utiliser une tolérance, c'est ton droit.
Mais la façon la plus rapide et la plus précise de déterminer si un point est sur un cercle, c'est la solution (Mathématique) que Renfield et moi avons apportée !
smathis Messages postés 153 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 17 juin 2011 5
8 juin 2011 à 11:17
Savoir si un point est sur le cercle, quel cercle ? Un cercle dessiné sur ordinateur, avec des pixels, donc forcément on parle de pixels.
C'est sûr que sur papier où on a une précision infinie c'est oas un souci, sur ordinateur il faut gérer les pixels. Et c'est ça le but de son problème non ? Savoir quel pixel va appartenir au cercle ou non.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
8 juin 2011 à 10:52
d'ou proviennent de telles imprécisions ?

les calculs avancés partent du principe que l'on est dans le domaine mathématique.

vous parlez de "dessiner" de pixels... sur qu'en partant comme ça...

les pixels sont par définition des imprécision, des arrondis.
smathis Messages postés 153 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 17 juin 2011 5
8 juin 2011 à 10:47
Si d=r, j'ai mon rayon de 5,disons. Je prends un point qui a été dessiné et je calcule, je trouve 5.09.
5 = 5.09 ?
Donc on fait quoi ? On prend un entier ? On arrondi ?
Si je prend un point qui n'y est pas, je trouve 4.58. On tranche comment pour dire oui ou non ?
On va se retrouver avec des points qui ne seront pas sur le trait du cercle à cause de l'arrondi ou du tronquage.
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
8 juin 2011 à 10:41
j'ai pris trop de temps pour répondre tient !
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
8 juin 2011 à 10:40
il y a longtemps que tu as fait des maths ?

Admettons un cercle de centre O et de coordonnées x et y dont le rayon est r.
Prenons maintenant un point A de coordonnées u et v.
La distance séparant A de O est calculé à partir de Pythagore (programme de 4ème), on obtient donc la formule suivante : d² (u-x)² + (v-y)²> d = Sqrt((u-x)² + (v-y)²)

C'est tout ! si d = r alors le point est sur le cercle...
Il est aucunement nécessaire de faire une boucle pour faire cela.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
8 juin 2011 à 10:31
tu as les coordonnées de ton point P ?
celles du centre de ton cercle C, la longueur du rayon R ?

du coup :

D = Sqrt( (yp - yc)² + (xp - xc)²)
Si D <= R Alors
P est compris dans C
smathis Messages postés 153 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 17 juin 2011 5
8 juin 2011 à 10:01
Et la distance tu la trouves comment ? Si t'as un rayon de 10 pixels, t'auras bien 10 pixels sur les axes, mais si le point est à un angle de 45 degrés, t'es sûr que la dif de pixel sur x et y fera 10 ? Moi non, je suis même plutôt convaincu de l'inverse.
Exemple :
voici le haut d'un cercle.
-----***-----
On voit bien que celui du milieu aura le bon rayon, mais pour ceux de chaque coté ? ils auront le rayon +1 et pourtant il font partie du contour.
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
7 juin 2011 à 20:13
pourquoi faire une boucle quand il suffit de calculer la distance entre ton point et le centre du cercle... et si cette distance = R alors le point est sur le cercle...
Ca tient en 3 lignes de codes !
eishtein Messages postés 52 Date d'inscription dimanche 6 décembre 2009 Statut Membre Dernière intervention 23 janvier 2014
7 juin 2011 à 17:21
renfield , je crois que t'as raison à propos du test de la distance entre le point et le cercle. mais je pense que là aussi on aura besoin d'une boucle,n'est-ce pas?
eishtein Messages postés 52 Date d'inscription dimanche 6 décembre 2009 Statut Membre Dernière intervention 23 janvier 2014
7 juin 2011 à 17:15
oups... glé oublié
merci de me le rappeler?
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
7 juin 2011 à 17:10
c'est à moi que tu poses cette question ?

recursivité souvent plus lent que les boucles, gaffe (stack overflow)
eishtein Messages postés 52 Date d'inscription dimanche 6 décembre 2009 Statut Membre Dernière intervention 23 janvier 2014
7 juin 2011 à 17:05
dans ce cas , peux-tu me proposer un algorithme récursive plutôt que la boucle pour faire le traitement
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
7 juin 2011 à 15:47
Suffit malgré tout de tester la distance D entre le point et le centre du cercle de rayon R ...

D > R : point hors du disque
D = R : point sur le cercle (tatillon, smathis)
D < R : point dans le disque
eishtein Messages postés 52 Date d'inscription dimanche 6 décembre 2009 Statut Membre Dernière intervention 23 janvier 2014
7 juin 2011 à 15:43
au début , j'ai pensé que un diamètre d'un cercle serait définit du coté structure comme étant un segment [et non pas une taille], d'où l'intérêt de déclarer un tableau de point pour répondre à la question de Kenji ^^....
smathis Messages postés 153 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 17 juin 2011 5
7 juin 2011 à 14:28
Renfield, comment un point pourrait être compris dans un cercle ?
Moi je ne vois pas, mais si tu arrives à démontrer ça, tu révolutionneras les maths !

Tu te demandes de quoi je parle, je parle d'un cercle, et toi d'un disque.
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
6 juin 2011 à 09:41
en même temps, si c'est un truc de prépa... hum...
c'est peut-être pour ça qu'on a du mal à comprendre :D
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
6 juin 2011 à 09:35
Clair...

un point est compris dans un cercle de rayon R si la distance entre ce point et le centre du cercle est inférieure à R

en gros, un simple calcul de distance...
pas de boucle pour ça !
Utilisateur anonyme
5 juin 2011 à 20:00
Je comprends rien.
Pourquoi un tableau de point pour définir un cercle ?

__
Kenji
Rejoignez-nous