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

Algorithmes et structures de données Discussion :

Cercle suivant un maillage (fixe)


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 3
    Par défaut Cercle suivant un maillage (fixe)
    Bonsoir!

    Je suis nouveau ici et j'ai cherché pour un problème similaire au mien, sans succès.
    Voici mon problème:

    J'ai une plaque avec des mailles (Plan X-Y dans mon cas) et je veux tracer un quart de cercle dessus. En fait, ce ne sera pas un cercle parfait puisque ce sont les mailles de la plaque qui vont dicter le passage du cercle.
    Pour mieux comprendre (car je pense que mon introduction reste un peu obscure), voici l'ébauche que j'ai effectué:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    close all
    clear all
    clc
     
    dx = 1;
    dy = 2;
    r = 10;
     
    for x=0:dx:r
     
         y = sqrt(r.^2-x^2);
         a = round(y/dy);
         b = a*dy;
     
         plot(x,b,'o')
         grid on
         hold on
     
    end
     
    % cercle réel (uniquement a titre informatif)
     
    z = 0:dx:r;
    d = sqrt(r.^2-z.^2);
    plot(z,d,'r')
    Voici donc le programme de base.
    Un nœud (ou point) ne pouvant donc que se trouver sur une intersection du maillage (de la grille dans ce cas).
    Maintenant, mon problème vient du fait que je souhaite rajouter des points lorsqu'il y a des ''sauts'' (je parle de l'axe des Y).
    Dans un premier temps, je souhaite placer des points en dessous afin de ''compléter l'escalier''.
    mais voilà! comment faire?

    J'espère que j'ai été assez explicite, n'hésitez pas à me poser des questions si ce n'est pas clair.

    Pour info, j'avais pensé à un if b ~= b-1 dans ma boucle ''for'' mais ça ne fonctionnait pas vraiment...

    Merci beaucoup de votre aide!

    Bonne soirée
    Images attachées Images attachées  

  2. #2
    Membre émérite
    Avatar de Kangourou
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Par défaut
    salut,

    essaie de regarder du côté de l'algorithme de Brensenham pour les cercles, j'ai l'impression que ca correspond à ce que tu cherches à faire.

    A+

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 3
    Par défaut
    Tout d'abord, merci pour ta réponse

    Oui, il semblerait que cela corresponde à ce que j'essaie de faire. J'ai trouvé un programme MATLAB qui fait ma première partie mais sur un cercle complet. sans plus...

    J'ai progressé dans mon code. Je ne suis pas sûr que cela soit très propre mais il me complète une partie de "l'escalier". Il me reste à trouve comment implémenter les points (8;5), (9;1),(9;2),(9;3). Une idée?

    Le nouveau code est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    close all
    clear all
    clc
     
    dx = 1;
    dy = 1;
    r = 10;
     
    x = 0;
    y = 1;
    b = r;
     
     
     
    for     x=0:dx:r
     
     
     
                y=sqrt(r.^2-x.^2);
                a=round(y/dy);
                b=a*dy;
     
                plot(x,b,'o')
                grid on
                hold on
     
                if b ~= b-1 
     
                y = sqrt(r.^2-(x+dx)^2);
                a = round(y/dy);
                b = a*dy;
     
                plot(x,b,'or')
                grid on
                hold on
     
                end
     
     
     
     
     
    end
     
    h = 0:dx:r;
    g = sqrt(r.^2-h.^2);
    plot(h,g,'g')
    Merci de votre aide!

  4. #4
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par Reya04 Voir le message
    J'ai progressé dans mon code. Je ne suis pas sûr que cela soit très propre mais il me complète une partie de "l'escalier". Il me reste à trouve comment implémenter les points (8;5), (9;1),(9;2),(9;3). Une idée?
    Tant que la pente est inférieure à 45°, on se déplace toujours de "1" case en horizontal et de "0 ou 1" case en vertical. Quand la pente est supérieure à 45°, c'est l'inverse (vertical <--> horizontal).

    Le problème se réduit à trouver le critère qui décide si on se déplace verticalement de 0 ou de 1.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 3
    Par défaut
    J'ai toujours pas réussi mais je vous tiens au courant si je trouve quelque chose

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Par défaut
    Bonjour,

    as-tu des contraintes pour le tracé de ta courbe? Ne pourrais-tu pas tracer une courbe de Bézier? Tes mailles seraient alors les points de contrôle de la courbe.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

Discussions similaires

  1. Réponses: 7
    Dernier message: 28/11/2012, 10h42
  2. Tracé d'images suivant un cercle
    Par Cyrilz dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 11/09/2009, 12h48
  3. Réponses: 3
    Dernier message: 22/07/2002, 14h19
  4. Chiffre a Virgule Fixe
    Par garybaldi dans le forum C
    Réponses: 3
    Dernier message: 21/06/2002, 10h41
  5. savoir si 1 point est a l'intérieur d'un cercle ...
    Par skarladevobsy dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 23/05/2002, 18h14

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