Utilisateur anonyme
-
5 juin 2011 à 20:00
smathis
Messages postés153Date d'inscriptionlundi 22 mars 2010StatutMembreDernière intervention17 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.
smathis
Messages postés153Date d'inscriptionlundi 22 mars 2010StatutMembreDernière intervention17 juin 20115 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és153Date d'inscriptionlundi 22 mars 2010StatutMembreDernière intervention17 juin 20115 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és4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201437 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és153Date d'inscriptionlundi 22 mars 2010StatutMembreDernière intervention17 juin 20115 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és4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201437 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és153Date d'inscriptionlundi 22 mars 2010StatutMembreDernière intervention17 juin 20115 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és153Date d'inscriptionlundi 22 mars 2010StatutMembreDernière intervention17 juin 20115 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és4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201437 8 juin 2011 à 10:41
j'ai pris trop de temps pour répondre tient !
sebmafate
Messages postés4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201437 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és153Date d'inscriptionlundi 22 mars 2010StatutMembreDernière intervention17 juin 20115 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és4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201437 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és52Date d'inscriptiondimanche 6 décembre 2009StatutMembreDernière intervention23 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és52Date d'inscriptiondimanche 6 décembre 2009StatutMembreDernière intervention23 janvier 2014 7 juin 2011 à 17:15
oups... glé oublié
merci de me le rappeler?
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és52Date d'inscriptiondimanche 6 décembre 2009StatutMembreDernière intervention23 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és52Date d'inscriptiondimanche 6 décembre 2009StatutMembreDernière intervention23 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és153Date d'inscriptionlundi 22 mars 2010StatutMembreDernière intervention17 juin 20115 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és4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201437 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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 !
8 juin 2011 à 16:23
8 juin 2011 à 15:43
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)
8 juin 2011 à 13:18
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.
8 juin 2011 à 12:02
8 juin 2011 à 11:49
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.
8 juin 2011 à 11:29
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 !
8 juin 2011 à 11:17
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.
8 juin 2011 à 10:52
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.
8 juin 2011 à 10:47
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.
8 juin 2011 à 10:41
8 juin 2011 à 10:40
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.
8 juin 2011 à 10:31
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
8 juin 2011 à 10:01
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.
7 juin 2011 à 20:13
Ca tient en 3 lignes de codes !
7 juin 2011 à 17:21
7 juin 2011 à 17:15
merci de me le rappeler?
7 juin 2011 à 17:10
recursivité souvent plus lent que les boucles, gaffe (stack overflow)
7 juin 2011 à 17:05
7 juin 2011 à 15:47
D > R : point hors du disque
D = R : point sur le cercle (tatillon, smathis)
D < R : point dans le disque
7 juin 2011 à 15:43
7 juin 2011 à 14:28
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.
6 juin 2011 à 09:41
c'est peut-être pour ça qu'on a du mal à comprendre :D
6 juin 2011 à 09:35
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 !
5 juin 2011 à 20:00
Pourquoi un tableau de point pour définir un cercle ?
__
Kenji