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 :

Pendule simple


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    Par défaut Pendule simple
    Bonjour , j'écris ce post car je voudrais terminer mon pendule simple . J'ai déja créer le mouvent harmonique de la boule mais il me manque juste la "corde" du pendule Voici mon code source :

    from tkinter import *
    from math import sin, cos
    def clic(event): # La fonction correspondant à un clic (ou touche clavier)

    global x,y
    x=100
    y=100

    def bouge(): #La fonction principale qui anime notre objet
    global x,y,dx,dy,t
    A=200
    w=0.2
    dt=0.1

    x=A*sin(w*t)
    #y=A*cos(w*t)
    y=(A**2-x**2)**0.5
    t=t+dt

    can.bind("<f>",clic) #Relie l’évènement du clic à la fonction clic
    can.coords(balle,x+300,y+300,x+350,y+350) #Affiche l’objet aux nouvelles coordonnées
    fenetre.after(2,bouge) #Rafraîchit la fenêtre

    # Création de la fenêtre
    fenetre=Tk()
    fenetre.title(" Mon animation ")
    can=Canvas(fenetre,bg="blue",height="800",width="800")
    can.pack()
    can.focus_set()

    # Création et initialisation des variables
    x,y=100,100
    dx,dy=1,1
    t=0
    balle=can.create_oval(x,y,x+10,y+10,fill="red")

    #Programme principal
    bouge()
    fenetre.mainloop()




    Tout aide est bonne prendre
    Merci d'avance

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Afin de rendre le code lisible, il est nécessaire de le placer entre des balises code.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    from tkinter import *
    from math import sin, cos
    def clic(event): # La fonction correspondant à un clic (ou touche clavier)
     
    global x,y
    x=100
    y=100
     
    def bouge(): #La fonction principale qui anime notre objet
    global x,y,dx,dy,t
    A=200
    w=0.2
    dt=0.1
     
    x=A*sin(w*t)
    #y=A*cos(w*t)
    y=(A**2-x**2)**0.5
    t=t+dt
     
    can.bind("<f>",clic) #Relie l’évènement du clic à la fonction clic
    can.coords(balle,x+300,y+300,x+350,y+350) #Affiche l’objet aux nouvelles coordonnées
    fenetre.after(2,bouge) #Rafraîchit la fenêtre
     
    # Création de la fenêtre
    fenetre=Tk()
    fenetre.title(" Mon animation ")
    can=Canvas(fenetre,bg="blue",height="800",width="800")
    can.pack()
    can.focus_set()
     
    # Création et initialisation des variables
    x,y=100,100
    dx,dy=1,1
    t=0
    balle=can.create_oval(x,y,x+10,y+10,fill="red")
     
    #Programme principal
    bouge()
    fenetre.mainloop()

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Je ferais un truc comme çà:
    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
    import math
    from math import sin, cos
    import tkinter as tk
     
     
    def get_point(tick, count, radius):
        angle = tick * (2*math.pi / count)
        x = int( round( radius * sin(angle) ))
        y = int( round( radius * cos(angle) ))
        return x, y
     
     
    TICK_COUNT = 60
    WIDTH = 500
    RADIUS = 200
     
    def create_clock(window):
        # create canvas and draw "line"
        clock = tk.Canvas(window, width=WIDTH, height=WIDTH)
        tick = clock._tick = TICK_COUNT
        cx = cy = WIDTH // 2
        x, y = get_point(tick, TICK_COUNT, RADIUS)
        clock.create_line(cx, cy, cx + x, cy + y, tag='line')
        # set timer handle
        clock._timer = None
     
        return clock
     
    def clock_start(clock, delay=100):
     
        def on_timer():
            # move "line"
            tick = (clock._tick  - 1) % TICK_COUNT
            x, y = get_point(tick, TICK_COUNT, RADIUS)
            clock.coords('line', cx, cy, cx + x, cy + y)
            # save tick and resubmit self
            clock._tick = tick
            clock._timer = clock.after(delay, on_timer)
     
        # get center
        cx, cy, _, _ = clock.coords('line')
        if not clock._timer:
            on_timer()
     
     
    def clock_stop(clock):
     
        if clock._timer:
            clock.after_cancel(clock._timer)
            clock._timer = None
     
     
    if __name__ == '__main__':
     
        app = tk.Tk()
     
        clock = create_clock(app)
        clock.pack()
     
        app['menu'] = menu = tk.Menu(app)
     
        menu.add_command(label='start', command=lambda: clock_start(clock))
        menu.add_command(label='stop', command=lambda: clock_stop(clock))
        menu.add_command(label='quit', command=app.quit)
     
        tk.mainloop()
    L'idée est assez simple: on prend un cercle et on le divise par TICK_COUNT arcs.
    A chaque "tick", on fait bouger l'extrémité d'une ligne qui part du centre.

    Pour simplifier le code, la fonction "get_point" retourne l'extrémité de la ligne en fonction de "tick".
    Grace à çà, bouger la ligne se réduit à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            # move "line"
            tick = (clock._tick  - 1) % TICK_COUNT
            x, y = get_point(tick, TICK_COUNT, RADIUS)
            clock.coords('line', cx, cy, cx + x, cy + y)
            clock._tick = tick
    Le reste n'est que peinture pour montrer qu'on peut éviter d'écrire "class" et "global".

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Guruofsexy Voir le message
    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
    from tkinter import *
    from math import sin, cos
    def clic(event): # La fonction correspondant à un clic (ou touche clavier)
     
    global x,y
    x=100
    y=100
     
    def bouge(): #La fonction principale qui anime notre objet
    global x,y,dx,dy,t
    A=200
    w=0.2
    dt=0.1
     
    x=A*sin(w*t)
    #y=A*cos(w*t)
    y=(A**2-x**2)**0.5
    t=t+dt
     
    can.bind("<f>",clic) #Relie l’évènement du clic à la fonction clic
    can.coords(balle,x+300,y+300,x+350,y+350) #Affiche l’objet aux nouvelles coordonnées
    fenetre.after(2,bouge) #Rafraîchit la fenêtre
     
    # Création de la fenêtre
    fenetre=Tk()
    fenetre.title(" Mon animation ")
    can=Canvas(fenetre,bg="blue",height="800",width="800")
    can.pack()
    can.focus_set()
     
    # Création et initialisation des variables
    x,y=100,100
    dx,dy=1,1
    t=0
    balle=can.create_oval(x,y,x+10,y+10,fill="red")
     
    #Programme principal
    bouge()
    fenetre.mainloop()
    Bonjour,

    Ce ne serait pas ça, par hasard ?

    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
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
     
    from tkinter import *
    from math import sin, cos, sqrt
     
     
    def bouge():
        "La fonction principale qui anime notre objet"
     
        global x, y, t
     
        x = A*cos(w*t)
        y = sqrt(A**2 - x**2)
        t += dt
     
        # déplace les objets graphiques
        canvas.coords(ligne, x0, y0, x0+x, y0+y)
        canvas.coords(balle, x0+x-rayon, y0+y-rayon, x0+x+rayon, y0+y+rayon)
     
        # prochaine boucle dans xxx millisecondes
        fenetre.after(50, bouge)
     
    # end def
     
     
    # création de la fenêtre
    fenetre = Tk()
    fenetre.title("Animation Pendule")
    fenetre.resizable(width=False, height=False)
     
    # création canevas graphique
    canvas = Canvas(fenetre, bg="sky blue", width=400, height=400)
    canvas.pack()
     
    # bouton quitter
    Button(
        fenetre, text="Quitter", command=fenetre.destroy
    ).pack(side=RIGHT, padx=5, pady=5)
     
    # initialisation variables globales
    A = 100
    w = 0.2
    t = 0
    dt = 0.2
     
    # init coords point central canevas
    x0, y0 = canvas.winfo_reqwidth()//2, canvas.winfo_reqheight()//2
     
    # rayon balle
    rayon = 25
     
    # création objets graphiques
    ligne = canvas.create_line(0, 0, 0, 0, width=3)
    balle = canvas.create_oval(0, 0, 0, 0, fill="red")
     
    # programme principal
    bouge()
    fenetre.mainloop()
    @+.

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    Par défaut Merci a tous
    Merci a tous votre aide me sera précieuse merci du fond du cœur

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. aide pour pendule simple
    Par Guruofsexy dans le forum Calcul scientifique
    Réponses: 4
    Dernier message: 10/05/2014, 14h16
  2. Pendule simple et double
    Par Emilie3225 dans le forum Général Python
    Réponses: 16
    Dernier message: 29/05/2013, 12h53
  3. [Débutant] modelisation pendule simple.Probleme d'interface graphique
    Par meteora9 dans le forum Interfaces Graphiques
    Réponses: 8
    Dernier message: 29/05/2009, 17h43
  4. probleme de divergence avec runge kutta d'ordre 2 pour un pendule simple
    Par fab13 dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 25/11/2006, 20h19
  5. recherche exemple simple pour corba en c++
    Par Pinggui dans le forum CORBA
    Réponses: 4
    Dernier message: 06/05/2002, 11h29

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