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

Python Discussion :

tracer un polygone


Sujet :

Python

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 208
    Points : 60
    Points
    60
    Par défaut tracer un polygone
    je cherche a faire un code d'une fonction polygon qui trace un polygon qlq conque de taille et couleur ,le nombre de taille étant parametré la fonction devrais donc aussi pouvoir faire,entre autres , un carre ou un triange

    l'angle pour tracer un polygone à 3 cotés :60°
    en génrale pour tracer un pentagone, il faut un angle de 108°
    hexagone 120°
    septagon 128.57...°
    octagon 135°
    Noagon 140°

    en générale (n-2) × 180° / n

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def polygone(taille,couleur) :
    ...     n = 3 
    ...     taille = (n-2) * 180 / n
    ...     color(couleur)
    ...     for x in range(n) :
    ...             forward(taille)
    ...             left(taille)
    ... 
    >>> polygone(100, "green")
    sa marche pas se code veuillez m'aider svp

  2. #2
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Points : 8 442
    Points
    8 442
    Par défaut
    Bonjour, il me semble que ton code n'est pas complet. Quelle librairie utilises tu pour dessiner?
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 208
    Points : 60
    Points
    60
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    from turtle import *
     
    def polygone(taille,couleur) :
    ...     n = 3
    ...     taille = (n-2) * 180 / n
    ...     color(couleur)
    ...     for x in range(3) :
    ...             forward(taille)
    ...             left(taille)
    ...
    mais c'est pas le bon code ayy

  4. #4
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Points : 8 442
    Points
    8 442
    Par défaut
    Que veux tu dire par "pas le bon code"??

    Tester chez moi, cela fonctionne. Par contre, tu ne bloque pas l'affichage, donc il trace, le dessin disparait, et tu peux avoir l'impression que ça ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    from turtle import *
     
    def polygone(taille,couleur) :
    	n = 10
    	taille = (n-2) * 180 / n
    	color(couleur)
    	for x in range(n) :
    		forward(taille)
    		left(taille)
     
    	i = raw_input()
     
    if __name__ == "__main__":
    	polygone(100, "green")
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 208
    Points : 60
    Points
    60
    Par défaut
    merci mais il fait pas ce qu'il demande dans l'exercice

    je cherche a faire un code d'une fonction polygone qui trace un polygone qlq conque de taille et couleur ,le nombre de taille étant parametré la fonction devrais donc aussi pouvoir faire,entre autres , un carre ou un triange

  6. #6
    Membre éprouvé
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Points : 926
    Points
    926
    Par défaut
    Bonsoir,

    Citation Envoyé par l1informatique Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    from turtle import *
     
    def polygone(taille,couleur) :
    ...     n = 3
    ...     taille = (n-2) * 180 / n
    ...     color(couleur)
    ...     for x in range(3) :
    ...             forward(taille)
    ...             left(taille)
    ...
    Citation Envoyé par l1informatique Voir le message
    je cherche a faire un code d'une fonction polygone qui trace un polygone qlq conque de taille et couleur ,le nombre de taille étant parametré la fonction devrais donc aussi pouvoir faire,entre autres , un carre ou un triange
    Dans la définition de la fonction ainsi que dans son appel, à quel moment indiquez-vous le nombre de cotés désirés?
    Si nulle part vous n'indiquez le nombre de cotés désirés, Python ne peut pas le deviner tout seul.

    => Pensez à rajouter un argument, à la fonction, qui détermine le nombre de cotés!

    Clodion

  7. #7
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    Salut,
    Il suffit d'adapter le code fait pour l'étoile :

    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
    from turtle import *
     
    def partition(nb_som):
        return [ m for m in range(1, int(nb_som/2) + 1) if nb_som % m != 0 ]
     
    def star( nb_som, m, t=40, c="red") :
        color(c)
        for _ in range(nb_som):
            forward(t)
            left( 360 / nb_som * m )
     
    def polygone(nb_som, t = 100, c = "red"):
        color(c)
        for _ in range(nb_som):
            forward(t)
            left( 360 / nb_som )
     
    if __name__ == '__main__':
        for idx in range(3, 10):
            polygone(nb_som = idx)
    Images attachées Images attachées  

  8. #8
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Points : 8 442
    Points
    8 442
    Par défaut
    Pas mieux.

    J'arrive un peu tard. J'avais mal compris le besoin. Désolé
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

  9. #9
    Membre actif Avatar de Kurodiam
    Inscrit en
    Décembre 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2013
    Messages : 208
    Points : 215
    Points
    215
    Par défaut
    Citation Envoyé par Clodion Voir le message
    Bonsoir,





    Dans la définition de la fonction ainsi que dans son appel, à quel moment indiquez-vous le nombre de cotés désirés?
    Si nulle part vous n'indiquez le nombre de cotés désirés, Python ne peut pas le deviner tout seul.

    => Pensez à rajouter un argument, à la fonction, qui détermine le nombre de cotés!

    Clodion
    C'est super bien dit , déjà calcul la somme des angles des triangles contenu dans un pentagone , et ne confonds pas avec le 108 ° angle interne du pentagone régulier http://fr.wikipedia.org/wiki/Pentagone (tu as dit surement voir ce lien) .Par contre , ce qui est intéressant à savoir, c'est un carré forme 2 triangles , et la somme des angles d'un triangle est 180° .
    Ta formule (n-2) * 180° , déjà pour un carré , c'est (4 cotés - 2)*180° = 360° .Réfléchis à cela !(PS: le quadrilatère est aussi un polygone à 4 cotés ).
    _""""Cats have a big heart ^^ unlike some bad people (whose will never change in their brain) """

  10. #10
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 208
    Points : 60
    Points
    60
    Par défaut
    bonjour merci pour les réponses

    mais comme je suis débutante c'est un peu normale que je vais poser des questions qui vont apparaître un peu bete !!!!

  11. #11
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 208
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par __dardanos__ Voir le message
    Salut,
    Il suffit d'adapter le code fait pour l'étoile :

    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
    from turtle import *
     
    def partition(nb_som):
        return [ m for m in range(1, int(nb_som/2) + 1) if nb_som % m != 0 ]
     
    def star( nb_som, m, t=40, c="red") :
        color(c)
        for _ in range(nb_som):
            forward(t)
            left( 360 / nb_som * m )
     
    def polygone(nb_som, t = 100, c = "red"):
        color(c)
        for _ in range(nb_som):
            forward(t)
            left( 360 / nb_som )
     
    if __name__ == '__main__':
        for idx in range(3, 10):
            polygone(nb_som = idx)

    bonjour
    pour se code déja en n'a pas encore fait tout sa donc je voufrais savoir sa sert a quoi

    return [ m for m in range(1, int(nb_som/2) + 1) if nb_som % m != 0]

    et aussi
    if __name__ == '__main__':

    merci

  12. #12
    Membre éprouvé
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Points : 926
    Points
    926
    Par défaut
    Bonjour,

    Citation Envoyé par l1informatique Voir le message
    if __name__ == '__main__':
    La propriété "__name__" renvoie le nom du module tel qu'il est vu par Python. Si c'est le module qui a été lancé, son nom est "__main__" (alors que c'est le nom du module lui-même si ce module a été appelé).
    Cela permet de créer des modules dont les objets ou les fonctions ne sont pas exécutées systématiquement lorsque le module est appelé.
    La condition 'if __name__ == "__main__": " permet ainsi de n'exécuter cette partie que si le module est lancée par l'utilisateur (si vous l'appelez d'un autre script, cette partie ne sera pas exécutée).

    Quand à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return [ m for m in range(1, int(nb_som/2) + 1) if nb_som % m != 0]
    C'est un retour de fonction qui utilise une liste en intention.
    Cela équivaut à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    nb_som = 15
    print([ m for m in range(1, int(nb_som/2) + 1) if nb_som % m != 0])
     
    liste = []
    for m in range(1, int(nb_som/2) + 1):
        if nb_som % m !=0:
            liste.append(m)
    print(liste)
    PS: cette fonction est, sans doutes, le reste d'un autre travail. Elle n'a aucune utilité dans le script de __dardanos__ tel qu'il est présenté ici!!
    PS2: la deuxième fonction ("star") n'a non plus aucune utilité pour le script présenté.

    Clodion

  13. #13
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 208
    Points : 60
    Points
    60
    Par défaut
    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
    daccord merci 
     
    pour faire coder une fonction générale star() qui peut tracer une étoile quelconque de taille quelconque et de 
    couleur quelconque, et un nombre de branches quelconque — mais supérieur à 4 
     
    def etoile(taille,couleur,b,m) :
    ...     color(couleur)
    ...     right((360 / b) / 2)
    ...     for x in range(m) :
    ...             forward(taille)
    ...             left((360 / b) * 2)
    ... 
    >>> etoile(100, "green", 5, 5)
    >>> etoile(100, "green", 8, 8)
    >>> etoile(100, "green",7, 7)
     
     
    sa marche avec etoile de 5 branche mais pas pour les autres branche genre 12

  14. #14
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    Salut,
    Si ça t'intéresse voici le code complet :
    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
    from turtle import *
     
    def partition(nb_som):
        return [ m for m in range(1, int(nb_som/2) + 1) if nb_som % m != 0 ]
     
    def star(nb_som, m, t = 40, c = "red") :
        color(c)
        for _ in range(nb_som):
            forward(t)
            left( 360 / nb_som * m )
     
    def polygone(nb_som, t = 100, c = "red"):
        color(c)
        for _ in range(nb_som):
            forward(t)
            left( 360 / nb_som )
     
    if __name__ == '__main__':
        nb_som = 13
        for idx, m in enumerate(partition(nb_som)):
            print("etoile {} (sommets = {} m = {})".format(idx, nb_som, m))
            up()
            goto(0, 200 + idx * -90)
            down()
            star(nb_som, m, t = 50)
    Toutes les valeurs de m ne permettent pas de tracer une étoile. Il faut que le reste de la division entière du nombre de sommets par m soit non nul. C'est à ça que sert la fonction partition.
    Images attachées Images attachées  

  15. #15
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 208
    Points : 60
    Points
    60
    Par défaut
    merci mais moi je cherche un code qui va dessiner les star suivante
    http://en.wikipedia.org/wiki/Star_polygon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    def etoile(taille,couleur,b,m) :
         color(couleur)
         right((360 / b) / 2)
         for x in range(m) :
                 forward(taille)
                 left((360 / b) * 2)

    etoile(100, "green", 5, 5)
    car sur se code j'ai arriver a faire que 4 star mais les autre non genre 7/3 et 9/3
    est ce que j'ai louper qlq chose sur star que je dois savoir ??

  16. #16
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 208
    Points : 60
    Points
    60
    Par défaut
    bonjour,
    est ce que je pourrez avoir plus d'explication sur
    def partition(nb_som):
    return [ m for m in range(1, int(nb_som/2) + 1) if nb_som % m != 0 ]
    m for m sa veut dire quoi ??et c'est quand en n'emploi ce type ?

    et int ??
    merci

  17. #17
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    J'ai utilisé une liste en intention. Tu débutes et ne sais pas ne sais pas ce que c'est, le code suivant est strictement équivalent et plus facile à comprendre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def partition(nb_som):
        nb_val = int(nb_som/2)
        results = list()
        for m in range(1, nb_val + 1):
            if nb_som % m != 0:
                results.append(m)
        return results
    nb_val correspond au nombre de valeurs possibles pour le nombre de sommets nb_som. C'est un entier. La fonction int convertit la division nb_som / 2 en un nombre entier (en python3 c'est une valeur réelle), et donc élimine la partie décimale. Par exemple, nb_som = 7, nb_som/2 = 3,5, et int(nb_som/2) = 3.
    Je déclare une liste vide results, dans laquelle les valeurs vérifiant la condition seront stockées.
    La fonction range génère les entiers de 1 à nb_val (range(1, nb_val + 1)). La variable m interne à la boucle for va prendre successivement ces valeurs. La boucle ne contient qu'un test*: if nb_som % m != 0, c'est-à-dire m ne divise pas nb_som. Les valeurs de m vérifiant le test sont ajoutées à la liste (results.append(m)).
    La fonction termine en retournant la liste créée (return results).

    Une liste en intention fait tout ça en une ligne (mais Clodion l'avait déjà dit).

    Je ne connais pas spécialement le sujet. Mais cette méthode ne permet que d'avoir les valeurs de m ne divisant pas le nombre de sommets nb_som.
    Par exemples :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    nb_som = 7, m = {2, 3}
    nb_som = 8, m = {3}
    nb_som = 9, m = {2, 4}
    j'ai arriver a faire que 4 star mais les autre non genre 7/3 et 9/3
    7/3 = 2,333... la partie décimale est non nulle, c'est possible
    9/3 = 3, partie décimale nulle donc impossible avec cette méthode (mais il doit sûrement y en avoir d'autre)

  18. #18
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 208
    Points : 60
    Points
    60
    Par défaut
    bonjour,

    merci beaucoup pour ses explications


Discussions similaires

  1. polygones à tracer sans kml
    Par momo8508 dans le forum IGN API Géoportail
    Réponses: 12
    Dernier message: 18/01/2012, 12h09
  2. tracer un polygone
    Par jojo_ol76 dans le forum Android
    Réponses: 1
    Dernier message: 14/11/2011, 12h57
  3. Tracer un polygone en 3D
    Par crismans dans le forum MATLAB
    Réponses: 4
    Dernier message: 12/03/2009, 19h23
  4. [VB6] [Graphisme] Tracer un cercle avec pset
    Par bleuerouge dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 09/12/2002, 17h12
  5. Tracer une ligne droite sans les interruptions
    Par Stef784ever dans le forum x86 16-bits
    Réponses: 4
    Dernier message: 25/11/2002, 01h22

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