2016-12-09 21 views
0

得到正確的長度這裏是我的代碼:鋼瓶不Vpython

from vpython import * 
from math import * 
import numpy as np 
from __future__ import division 

stick = cylinder() 
stick.pos = vec(0,5,-15) 
stick.axis = vec(0,1,0) 
stick.length = 30 
stick.radius = 0.75 
stick.color = vec(.5,.5,.8) 

scene.forward = vec(-1,-1,-2) 
scene.range = 15 

spheres = [] 
for i in range (0, 15): 
    s = sphere() 
    s.radius = 1.5 
    s.theta_0 = -0.5 
    s.period = 75/(50+i) 
    s.color = color.hsv_to_rgb(vec(i/15, 0.75,0.9)) 
    s.wire = cylinder() 
    s.wire.color = s.color 
    s.wire.pos = stick.pos + vec(0,0,i+0.5)*stick.length/15 
    s.wire.axis = vec(0,-1,0) 
    s.wire.length = 2*np.pi*9.81*s.period*s.period 
    s.wire.radius = 0.1 
    spheres.append(s) 

dt = 0.2 
t = 0 
while True: 
    rate(1/dt) 
    for i in range(0, len(spheres)): 
     s = spheres[i] 
     theta = s.theta_0 * cos(2*pi*t/s.period) 
     s.wire.axis = vec(np.sin(theta),-np.cos(theta),0) 
     s.pos = s.wire.pos + s.wire.axis*s.wire.length 
     t = t + dt 

我希望做一個跳舞擺。但是,應該將球體連接到棒上的導線長度不正確。我如何使電線長度正確?

回答

0

你不從數學進口*需要(這是包含在從vpython進口*),並在Jupyter環境中,您可以選擇一個VPython筆記本電腦,執行「從未來進口部,print_function」(在任何情況下,這樣的聲明必須是文件中的第一個聲明,所以你的程序不能按原樣運行)。沒有理由導入numpy並將其用於pi和sin和cos。事實上,如果參數是單個數字,Python自己的sin和cos函數比numpy更快。

的處理遍歷球更「Python化」的方式是把它寫這樣的:

對於s的領域: THETA = .....

我不」知道你的目的是,但我建議你暫時讓球體不可見(visible = False),註釋掉rate語句,並在球體上的循環中插入scene.pause()以查看發生了什麼。你會看到電線最初從球體向下拉,然後顯然倒塌得很短。

我會通告一個更好的地方提出VPython問題是在VPython論壇

https://groups.google.com/forum/?fromgroups&hl=en#!forum/vpython-users