IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mathématiques Discussion :

remplir une forme circulaire avec 2 boucles for


Sujet :

Mathématiques

  1. #1
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut remplir une forme circulaire avec 2 boucles for
    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

  2. #2
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    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.

  3. #3
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    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 :
    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.
      }
    }
    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.

    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

  4. #4
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    salut
    merci pour vos réponses.
    je sais pas comment la solution de ToTo13 m' a échappée en 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

Discussions similaires

  1. [Débutant] Remplir une form avec un autre
    Par Hobbi1 dans le forum VB.NET
    Réponses: 2
    Dernier message: 26/12/2012, 11h19
  2. Créer une matrice diagonale avec la boucle "for'
    Par SOSO1 dans le forum MATLAB
    Réponses: 1
    Dernier message: 03/05/2012, 13h54
  3. [XL-2003] Remplir une forme avec un gradient à 3 couleurs
    Par martinmacfly dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 19/01/2010, 11h47
  4. Remplir une forme crée avec un polygon
    Par declencher dans le forum Débuter
    Réponses: 2
    Dernier message: 03/01/2009, 16h17
  5. Réponses: 3
    Dernier message: 23/02/2006, 15h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo