2017-03-14 10 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 

ここに私のコードがありますが、私の春は振動すると思われますが、それはありません。それはちょうど真っ直ぐに撃つ、引っ込めない、誰でも私を助けることができる?私は、私はその位置や何かをwhileループで更新する必要があると思うので、底に0の勢いに達すると、それは収縮するが、私は知らない。スプリングはvpythonを発振しません

答えて

0

ループ内でLvecを変更することはないので、ball.posとceiling.posの元の値を使用して、常に(ball.pos - ceiling.pos)元の値を持ちます。

関連する問題