salut tous le monde.
je veut remplir un cercle(connaissant son rayon bien évidemment ) avec deux boucles for ?
est ce qu'il existe une formule pour ça(sans me casser la tète) ou bien je peut procéder autrement ?
merci pour votre réponse
salut tous le monde.
je veut remplir un cercle(connaissant son rayon bien évidemment ) avec deux boucles for ?
est ce qu'il existe une formule pour ça(sans me casser la tète) ou bien je peut procéder autrement ?
merci pour votre réponse
Bonjour,
si la distance entre le point et le centre est inférieure au rayon alors tu peux remplir, sinon c'est que tu es à l'extérieur.
Tu veux en fait remplir un cercle pour en faire un disque, c'est bien ça ?
Il y a des algos simples mais il faut en connaître le centre... On part d'un algo de ce genre, donc :C'est une simplification d'un "floodfill" limité aux formes convexes, la simplification étant sur l'étape de progression verticale qui ne se "recentre" pas sur le prochain segment à remplir.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 for { // Parcours vertical, du centre vers le haut du cercle. for { // Parcours horizontal, du centre vers la gauche du cercle. } for { // Parcours horizontal, du centre vers la droite du cercle. } } for { // Parcours vertical, du centre vers le bas du cercle. for { // Parcours horizontal, du centre vers la gauche du cercle. } for { // Parcours horizontal, du centre vers la droite du cercle. } }
Bien entendu, on peut optimiser en utilisant les propriétés de symétrie du cercle (inutile de refaire le parcours à droite par exemple, c'est le même nombre de pixels qu'à gauche, idem pour le bas), mais dans ce cas il est non-négociable de connaître le centre exact du cercle.
Alors que l'algorithme générique peut être facilement adapté pour pouvoir remplir un cercle depuis n'importe quel point intérieur... Reste à savoir ce que tu préfères !
On peut rechercher, à partir d'un point interne, le centre théorique : on fait un parcours gauche / droite pour trouver la corde, on en prend la médiatrice : le centre est sur cette droite.
En partant du milieu de la corde, on refait une passe haut / bas : on parcourt donc un diamètre du cercle, et le centre est bien sûr au milieu de ce diamètre. Comme on est resté en géométrie discrète et avec des droites parfaitement horizontales et verticales, on obtient bien entendu une excellente précision. Au pire, un petit ajustement / test en fin de parcours vertical, afin de vérifier si l'on n'est pas éloigné d'un pixel du centre, et tu as dans tous les cas les coordonnées du pixel central.
Tu peux également rechercher le centre en utilisant le fait que le centre du cercle circonscrit d'un triangle est l'intersection de ses médiatrices : donc, en prenant trois points sur le cercle et en calculant l'intersection de ces médianes (au moins deux, en fait), tu obtiendras le centre du cercle... Toutefois, cette méthode peut poser des soucis en terme de précision mathématique, et impose des calculs plus lourds qu'une double itération sur les cordes. Elle impose également de "bien" choisir ses points, de préférence en essayant de faire le plus possible un triangle équilatéral... Pas forcément évident de façon automatique, mais bien plus efficace que l'itération si l'image est bruitée et que tu choisis "à la main" les trois points du triangle.
A ce stade, une fois le centre trouvé, on peut donc appliquer un algo avec seulement deux boucles "for", parcourant donc un quart de cercle, et exploitant deux axes de symétrie pour remplir le reste du cercle.
salut
merci pour vos réponses.
je sais pas comment la solution de ToTo13 m' a échappéeen partant de du théorème d'appartenance d'un point a un cercle... peut étre car j'ai pensé à poster ma question dans le furum avant de réfléchir juste un peut
![]()
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager