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 :

Exercice 8.26 Swinnen


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2010
    Messages : 59
    Par défaut Exercice 8.26 Swinnen
    Bonjour,

    Je n'arrive pas à définir la variation de l'angle lors du rebond d'une balle dans un canvas quel que soit l'angle. Existe t il une methode qui permet de définir un angle "relatif"?
    Merci.
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    from tkinter import *
    from math import *
    # définition des gestionnaires
    # d'événements :
     
    def depl():
        "deplacement lineaire de la balle suivant un angle defini"
        global x,y,r,at,angle
        xt,yt=x,y
        if (x>235 or x<15 or y>235 or y<15):
            if x>235:
                xt=235
            if x<15:
                xt=15
            if y>235:
                yt=235
            if y<15:
                yt=15
            at=pi/2+at
     
     
     
        x=xt+d*cos(at)
        y=yt+d*sin(at)
        can1.coords(oval1,x-r,y-r,x+r,y+r)
        can1.create_line(xt,yt,x,y,width=2,fill='blue')
     
        print(x,y,at)
     
        if flag >0:
            fen1.after(250,depl) # => boucler, après 50 millisecondes
     
     
     
    def stop_it():
        "arrêt de l'animation"
        global flag
        flag =0
     
    def start_it():
        "démarrage de l'animation"
        global flag
        if flag ==0: # pour ne lancer qu’une seule boucle
            flag =1
            depl()
     
    #========== Programme principal =============
    # les variables suivantes seront utilisées de manière globale :
    x, y = 100, 100 # coordonnées initiales
     
    r=15
    d=30
    flag =0 # commutateur
    at=pi/3
     
    # Création du widget principal ("parent") :
    fen1 = Tk()
    fen1.title("Exercice d'animation avec tkinter")
    # création des widgets "enfants" :
    can1 = Canvas(fen1,bg='dark grey',height=250, width=250)
    can1.pack(side=LEFT, padx =5, pady =5)
    oval1 = can1.create_oval(x, y, x+30, y+30, width=2, fill='red')
    bou1 = Button(fen1,text='Quitter', width =8, command=fen1.quit)
    bou1.pack(side=BOTTOM)
    bou2 = Button(fen1, text='Démarrer', width =8, command=start_it)
    bou2.pack()
    bou3 = Button(fen1, text='Arrêter', width =8, command=stop_it)
    bou3.pack()
    # démarrage du réceptionnaire d'événements (boucle principale) :
    fen1.mainloop()

  2. #2
    Membre confirmé
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2010
    Messages : 59
    Par défaut
    Bon voila ce que ça donne. Je pense qu'il y a plus simple^^. Si quelqu'un peut m'éclairer. Merci
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    from tkinter import *
    from math import *
    # définition des gestionnaires
    # d'événements :
     
    def depl():
        "deplacement lineaire de la balle suivant un angle defini"
        global x,y,r,at
        xt,yt=x,y
     
        Ancienat = at
     
        if (x>235 or x<15 or y>235 or y<15):
     
            if at > 2*pi:       #raz si angle superieur a 2pi
                at = at-2*pi
     
            if x>=235:
                xt=235
                fleche1=3*pi/2
                fleche2=pi
                fleche3=pi
                fleche4=pi/2
            if x<=15:
                xt=15
                fleche5=pi/2
                fleche6=0
                fleche7=pi*2
                fleche8=3*pi/2
            if y>=235:
                yt=235
                fleche3=2*pi
                fleche4=3*pi/2
                fleche5=3*pi/2
                fleche6=pi
            if y<=15:
                yt=15
                fleche1=pi/2
                fleche2=2*pi
                fleche7=pi
                fleche8=pi/2
     
            if (Ancienat > 0 and Ancienat < pi/2):
                if at < pi/4:
                    at=fleche3-at
                elif at > pi/4:
                    at=fleche4+(pi/2-at)
     
            if (Ancienat > pi/2 and Ancienat < pi):
                if at < 3*pi/4:
                    at=fleche5+(pi/2-at)
                elif at > 3*pi/4:
                    at=fleche6+(pi-at)
     
            if (Ancienat > pi and Ancienat < 3*pi/2):
                if at < 5*pi/4:
                    at=fleche7+(pi-at)
                elif at > 5*pi/4:
                    at=fleche8+(3*pi/2-at)
     
            if (Ancienat > 3*pi/2 and Ancienat < 2*pi):
                if at < 7*pi/4:
                    at=fleche1+(3*pi/2-at)
                elif at > 7*pi/4:
                    at=fleche2+(2*pi-at)
     
     
        x=xt+d*cos(at)
        y=yt+d*sin(at)
        can1.coords(oval1,x-r,y-r,x+r,y+r)
     
     
        print(x,y,at)
     
        if flag >0:
            fen1.after(10,depl) # => boucler, après 50 millisecondes
     
     
     
    def stop_it():
        "arrêt de l'animation"
        global flag
        flag =0
     
    def start_it():
        "démarrage de l'animation"
        global flag
        if flag ==0: # pour ne lancer qu’une seule boucle
            flag =1
            depl()
     
    #========== Programme principal =============
    # les variables suivantes seront utilisées de manière globale :
    x, y = 100, 100 # coordonnées initiales
     
    r=15
    d=4
    flag =0 # commutateur
    at=17*pi/56
     
    # Création du widget principal ("parent") :
    fen1 = Tk()
    fen1.title("Exercice d'animation avec tkinter")
    # création des widgets "enfants" :
    can1 = Canvas(fen1,bg='dark grey',height=250, width=250)
    can1.pack(side=LEFT, padx =5, pady =5)
    oval1 = can1.create_oval(x, y, x+30, y+30, width=2, fill='red')
    bou1 = Button(fen1,text='Quitter', width =8, command=fen1.quit)
    bou1.pack(side=BOTTOM)
    bou2 = Button(fen1, text='Démarrer', width =8, command=start_it)
    bou2.pack()
    bou3 = Button(fen1, text='Arrêter', width =8, command=stop_it)
    bou3.pack()
    # démarrage du réceptionnaire d'événements (boucle principale) :
    fen1.mainloop()

Discussions similaires

  1. [Python 3.X] Exercice Python Gérard Swinnen
    Par werkos dans le forum Général Python
    Réponses: 2
    Dernier message: 02/05/2015, 22h16
  2. Exercice 8.14 Swinnen
    Par loncle dans le forum Général Python
    Réponses: 11
    Dernier message: 18/06/2014, 18h32
  3. Probleme exercice de Gerard Swinnen 8.13
    Par elnabo dans le forum Tkinter
    Réponses: 5
    Dernier message: 23/03/2011, 11h44
  4. Obtenir la solution exercices du bouquin Swinnen
    Par rlejeune dans le forum Général Python
    Réponses: 1
    Dernier message: 26/08/2007, 05h53
  5. [cours de G.Swinnen] exercice 66
    Par airod dans le forum Tkinter
    Réponses: 4
    Dernier message: 14/10/2005, 12h02

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