2017-03-14 3 views
0
from __future__ import division, print_function 
from visual import * 
scene.width = 400 
scene.height = 760 
## constants and data 
g = 9.8 
mball = 0.03 
L0 = 0.26 
ks = 1.8 
sf = .5 
sf2 = 3 

#Graphs 


## objects (origin is at ceiling) 
ceiling = box(pos=vector(0,0,0), length=0.2, height=0.01, width=0.2) 
ball = sphere(pos=vector(0,-0.3,0), radius=0.025, color=color.orange) 
spring = helix(pos=ceiling.pos, axis=ball.pos-ceiling.pos,color=color.cyan, thickness=.003, coils=40, radius=0.010) 
#more constants 
Lvec= (ball.pos-ceiling.pos) 
Lhat = Lvec/mag(Lvec) 
## initial values 
pball = mball*vector(0,0,0) 
Fgrav = mball*g*vector(0,-1,0) 
t = 0 
deltat = .01 
Fspring = -ks*ball.pos 

#arrow vectors 
Fharr = arrow(pos=ball.pos, axis=vector(0,0,0), color=color.green) #parallel 
Ftarr = arrow(pos=ball.pos, axis=vector(0,0,0), color=color.blue) #perpendicular 
parr = arrow(pos=ball.pos, axis=vector(0,0,0), color=color.magenta) 

#improve the display 
scene.autoscale = False ## turn off automatic camera zoom 
scene.center = vector(0,-L0,0) ## move camera down 
#scene.waitfor ('click') 

## calculation loop 
while t <10: 
    rate(100) 
    #length of L 
    Lmag=abs(Lvec.y) 
    Lhat = Lvec/mag(Lvec) 
    #spring force 
    Fspring = -ks*(mag(Lvec)-L0)*Lhat 
    #updating position 
    Fnet = Fgrav + Fspring 
    pball = pball + Fnet*deltat 
    ball.pos = ball.pos + (pball/mball)*deltat 
    spring.axis = ball.pos - ceiling.pos 
    #perpendicuar and parrellel forces 
    phat = pball/mag(pball) 
    #parallel 
    FH = dot(Fnet,phat)*phat 
    #perpendicular 
    FT = Fnet - FH 
    #updating arrows 

    t = t + deltat 

voici mon code, mon printemps est supposé osciller mais il ne va pas. Il tire juste vers le bas et ne se rétracte pas, quelqu'un peut-il m'aider? Je pense que j'ai besoin de mettre à jour la position ou quelque chose dans la boucle while alors quand il atteint 0 impulsion au fond, il se rétracte mais je ne sais pas comment.le printemps ne pas osciller vpython

Répondre

0

Vous ne changez jamais Lvec dans la boucle, donc il a toujours la valeur qu'il avait à l'origine, à savoir (ball.pos - ceiling.pos), en utilisant les valeurs originales de ball.pos et ceiling.pos.