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 !