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.
Consignes aux jeunes padawans : une image vaut 1000 mots !
- Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
- Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
-ton poste tu dois marquer quand la bonne réponse tu as obtenu.
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.
Mac LAK.
___________________________________________________
Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.
Sources et composants Delphi sur mon site, L'antre du Lak.
Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.
Rejoignez-nous sur : ► Serveur de fichiers [NAS] ► Le Tableau de bord projets ► Le groupe de travail ICMO
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
![]()
Partager