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 :

Faire apparaître contrainte


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    UMONS
    Inscrit en
    Mai 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : UMONS

    Informations forums :
    Inscription : Mai 2013
    Messages : 7
    Par défaut Faire apparaître contrainte
    Bien le bonjour !
    J'ai un petit problème... J'ai un code permettant le lancement d'un pendule simple par Turtle. Je voudrais y faire apparaître des forces de frottements, afin de traiter le cas d'un pendule "réaliste". Voici le code :
    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
    # -*- coding: cp1252 -*-
    from math import sin, pi
    from time import sleep
    from turtle import *
     
     
    g = 9.80665 # Gravitational Acceleration (meters per second squared)
    FORM = 'Time={:6.3f}, Angle={:6.3f}, Speed={:6.3f}' #??#
     
    def main(): # définir certains paramètres#
        length = 9.0    # Of pendulum (meters)
        f_rappel = - g / length     # Negative G over L
        total_time = 0.0            # Seconds (??)
        angle = 1.0                 # Initial angle of pendulum (radians)
        speed = 0.0                 # Initial angular velocity (radians/second) si différent de 0, impose force extérieure ?? #
        time_step = 0.05            # nouvele affichage tout les 0.05 sec,   Seconds : nombre de secondes entre chaque image (fluidité) / # on ne fait plus rien pdt time step de milli seconde
        while total_time < 30.0:    # boucle pendant 30 s     temps d'affichage Turtle # tout les x temps, la / # on ne fait plus rien pdt time step de milli seconde
            total_time += time_step # a t=0;05 puis t1 = 0.1, t2 = 0.15 conditions pour que Turtle fonctionne  
            speed += f_rappel * sin(angle) * time_step # si teta point   = ...
            angle += speed * time_step   # integrer => teta  = 
            #print(FORM.format(total_time, angle, speed))
            if draw(angle, length): break #??# angle evolue en fonction du temps et en fonction de la longueur 
            sleep(time_step) #??# pause 
     
    # pour que ca aille moins vite = time step
     
    # changer f rappel qui n'est plus une constante on le met dans speed += f_rappel * sin(angle ....
     
     
     
     
    # variation = vitesse 
     
    def init():
        setup()
        mode('logo')
        radians()
        speed(0)
        hideturtle()
        tracer(False)
        penup()
     
    def draw(angle, length):#   affichage, defini taille crayon, avance d'une distane et puis retourne à l'origine
        if speed() != 0: return True # != : différent de #
        clear() # effacer ecran 
        setheading(angle + pi) # orientation de la fonction avec l'angle => oscille, tour de 180°#
        pensize(max(round(length), 1 )) # taille de crayon 
        pendown() # abaissez le crayon 
        forward(length * 25) #longueur de la corde affichée # va en avant de telle distance
        penup() # leve  le crayon ; si on releve pas le crayon, dessine le trajet du retour au point d'origine 
    # Il faut inserer ici la couleur set color blue .... 
        dot(length * 10) # Modifie taille de la bille #  afficher le point 
        home() # Point d'origine du pendule à (0,0) => comment le modifier ? retroune au point d'origine (O.O) 
        update() # synchronisation
     
    if __name__ == '__main__':
        init()
        main()
        bye()
    Je sais que ça se situe au niveau des lignes :
    speed += f_rappel * sin(angle) * time_step
    angle += speed * time_step

    Mais quoi que je fasse, je n'arrive pas à y introduire de contrainte :S

    Quelqu'un pour m'aider ?

    Un grand merci !

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    UMONS
    Inscrit en
    Mai 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : UMONS

    Informations forums :
    Inscription : Mai 2013
    Messages : 7
    Par défaut
    Up !

  3. #3
    Membre émérite

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 662
    Par défaut
    Ce post a déjà été créé ici:
    http://www.developpez.net/forums/d13...simple-double/

    Je ne crois pas que reposter le sujet dans une autre section amèneras plus de réponses...

    Dans tout les cas je ne comprends pas ce qui vous pose un problème. Est-ce la théorie d'un pendule amortie (équations), la transcription en langage python, l'utilisation de turtle, le main tel qu'il est écrit...?


    Ju

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    UMONS
    Inscrit en
    Mai 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : UMONS

    Informations forums :
    Inscription : Mai 2013
    Messages : 7
    Par défaut
    En fait mon problème est que je pars d'un code existant (je ne suis pas spécialement bon en Python) et j'ai le problème du code qui est basé sur un système d'incréments. Du coup, même si je sais qu'une petite ligne suffit, je ne vois vraiment pas comment ralentir le pendule avec le temps (son amplitude).
    J'ai cherché partout autour de moi, mais personne ne sait m'aider...

  5. #5
    Membre émérite

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 662
    Par défaut
    OK, je vois.


    Je n'ai pas vraiment le temps de faire des recherches sur les équations d'un pendule simple amorti (wikipédia), même si, honte à moi, je devrais m'en souvenir...

    L'idée est effectivement de modifier à chaque itération l'angle et la vitesse du pendule. Sans rien connaître d'un point de vue mathématique, tu sais qu'on fur et à mesure des oscillations, l'angle du pendule décroit et sa vitesse augmente.

    Tu peux donc remplacer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    speed += f_rappel* sin(angle) * time_step * exp(total_time/10.) # si teta point   = ...
    angle += speed * time_step * exp(-total_time/10.)
    Sans oublier d'avoir au préalable importer la méthode exponentielle du module math:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from math import sin, pi, exp
    Ici à chaque itération j'augmente arbitrairement (et donc rien à voir avec les vrais équations) la vitesse de façon exponentielle et reduit l'angle pris par le pendule également de façon exponentielle.

    La seule chose dont tu as à te préocuper dans ce code c'est la fonction main(). Cette dernière est très simple à comprendre. Elle définie les données charactéristiques de ton pendule puis calcul l'angle et la vitesse du pendule tout les time_step jusqu'a ce que total_time soit égal à 30.

    Tout ce qu'il te reste à faire, si ce n'est pas déjà fait, c'est d'exprimer mathématiquement la valeur de l'angle et de la vitesse du pendule en fonction du temps pour le cas du pendule amorti.

    Ju

Discussions similaires

  1. Faire apparaître les entêtes d'un sous-état
    Par Le Pharaon dans le forum IHM
    Réponses: 3
    Dernier message: 10/07/2007, 12h52
  2. [Stratégie] Erreurs: faire apparaître une fenêtre
    Par seb.ch dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 04/08/2005, 15h08
  3. [JTree] Faire apparaître visuellement le noeud sélectionné
    Par Bobsinglar dans le forum Composants
    Réponses: 3
    Dernier message: 03/06/2005, 16h26
  4. Faire apparaître un champ texte en cliquant sur un select
    Par yoyot dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 15/03/2005, 16h16

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