Partage
  • Partager sur Facebook
  • Partager sur Twitter

POO : question sur un futur exercice.

    14 août 2010 à 23:48:05

    Bonjours.

    Alors j'ai un exercice à réalisé dans un canvas :
    "Écrivez un programme qui simule le mouvement de 2 planètes tournant autour du soleil sur des orbites circulaires différentes (ou deux électrons tournant autour d'un noyau d'atome...)."

    Supposon que je je prenne l'exemple de l'atome, je réalise "fidèlement" le mouvement des électrons?(c'est-à-dire avec un effet 3D http://www.maxi-gif.com/gif-anime-atom [...] 1r49c897.html )

    Ou bien je fait simplement deux rond qui tournent autour d'un autre?

    Perso, faire ce genre d'effet 3D dans un canvas ça me parait chaud :-° ...
    Vous feriez quoi à ma place?
    • Partager sur Facebook
    • Partager sur Twitter
      15 août 2010 à 0:23:43

      Perso je me prendrais pas la tête : on commence par deux ronds, et après on améliore progressivement selon le temps imparti :p

      Mais effectivement canvas c'est de la 2D à la base, donc faudra jouer sur la perspective pour faire quelque chose qui ait l'air d'être en 3D.
      • Partager sur Facebook
      • Partager sur Twitter

      Blond, bouclé, toujours le sourire aux lèvres...

      Anonyme
        16 août 2010 à 0:31:32

        LoupSolitaire t'as expliqué quoi faire. Met toi au travail, présente un code et on t'aidera à compléter.

        ;)
        • Partager sur Facebook
        • Partager sur Twitter
          16 août 2010 à 16:59:02

          Bon, alors voila une première approche du code en 2D:

          from tkinter import *
          import math 
          
          def move():
              "déplacement de la balle"
              global x1, y1, t, r
              delta = 0.2
              
          
              x1 = x + r * math.cos(t)
              y1 = y + r * math.sin(t)
              t += delta
              if t > 2*math.pi:
              	t = 0
              
              
                  
              can.coords(rond2,x1,y1,x1+30,y1+30)
              if flag >0:
                  fen1.after(10,move)
          
          
          
          def move0():
              
              global x2, y2, T, R
              delta = 0.1
              
              x2 = x + R * math.cos(T)
              y2 = y - R * math.sin(T)
              T += delta
              if T > 2*math.pi:
              	T = 0
              
              
                  
              can.coords(rond3,x2,y2,x2+30,y2+30)
              if flag >0:
                  fen1.after(30,move0)
          
          
          
          
          def stop():
              "arret de l'animation"
              global flag    
              flag =0
          
          def start():
              "démarrage de l'animation"
              global flag
          
              if flag ==0:       # pour ne lancer qu'une seule boucle
               flag =1
               move()
               move0()
          
          
          
          
          
          #------------------#
          x0, y0 = 90, 125
          x1, y1 = 190, 130
          x2, y2 = 270, 100
          flag, t, T, r, R = 0, 0, 0, 50, 150
          x, y = x0+r, y0
          
          
          fen1 = Tk()
          fen1.title("Exercice d'animation avec Tkinter")
          
          can = Canvas(fen1, bg ='dark grey', height= 300, width= 300)
          can.pack(side = LEFT, padx= 5, pady=5)
          
          rond = can.create_oval(x, y, x+30, y+30, width=2, fill='blue')
          rond2 = can.create_oval(x1, y1, x1+30, y1+30, width=2, fill='red')
          rond3 = can.create_oval(x2, y2, x2+30, y2+30, width=2, fill='green')
          
          Bouton1 = Button(fen1, text= "Démarrer", width= 10, command= start).pack()
          Bouton2 = Button(fen1, text= "Arrêter", width= 10, command= stop).pack()
          
          
          
          fen1.mainloop()
          
          • Partager sur Facebook
          • Partager sur Twitter
            16 août 2010 à 20:43:02

            C'est un exercice de Swinnen ça non ?
            Je ne vois pas ce que tu veux de plus par rapport à ton code, au niveau où se situe l'exercice dans le livre je doute qu'on en attende plus que ça ;)
            Sinon si tu veux t'entrainer tu peux essayer de le faire en version POO (en créant par exemple une classe planète) qui te permettrai de rajouter des planètes, voir de mettre des satellites sur les planètes :p
            • Partager sur Facebook
            • Partager sur Twitter
              16 août 2010 à 21:01:21

              Je ne me rappelle pas avoir étudié les classes...En tout cas c'est un exercice venant de wikibook http://fr.wikibooks.org/wiki/Apprendre [...] r_avec_Python
              • Partager sur Facebook
              • Partager sur Twitter
                16 août 2010 à 21:12:42

                Oui c'est le livre de swinnen, si tu n'en es pas à la POO (tu n'as pas entendu parler de classe), oublie ce que j'ai dit et continue ton apprentissage.

                Sinon je fais un petit retour sur ton code :
                Bouton1 = Button(fen1, text= "Démarrer", width= 10, command= start).pack()
                Bouton2 = Button(fen1, text= "Arrêter", width= 10, command= stop).pack()
                

                Les affectations sont ici inutiles car en fait tu récupères la valeur retourné par la méthode 'pack' (tu ne récupères pas du tout le widget Button), Swinnen en parle quelque part dans son livre (quand il parle de la méthode grid, si tu n'en es pas encore là soit attentif à ce moment là ;) )
                Si tu veux juste créer les boutons (ce qui est largement suffisant) tu peux juste faire :
                Button(fen1, text= "Démarrer", width= 10, command= start).pack()
                Button(fen1, text= "Arrêter", width= 10, command= stop).pack()
                
                • Partager sur Facebook
                • Partager sur Twitter

                POO : question sur un futur exercice.

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown