2017-07-25 94 views
0

我練我的物理編碼和我對下面的問題有點卡住:在VPython不同的速度旋轉多個對象在同一時間

「利用視覺包提供的設施,創建動畫太陽系的表現......太陽和行星在適當的位置和球體的大小與其實際大小成正比......以及行星在太陽附近移動時的行爲(通過使行星球移動) 「。

提供了一張表格,給出了最內層行星和太陽的半徑以及行星軌道半徑和軌道週期(接近圓形)的半徑。

我能夠做的第一部分可以通過創建一些數組與表中給出的值(加一個常量使行星在給定的比例中可見)並創建一個球體數組。

這是我掛上的動作部分。我可以讓所有行星同時以相同的角速度旋轉。或者我可以讓所有的行星以不同的速度旋轉(與給定的時間段成比例),但它只能一次一個。有沒有辦法讓動畫在VPython中同時發生?我正在使用VPython 6.11和Python 2.7.13。下面的代碼(這是按不同速率順序運行它們的版本)。

from visual import sphere,rate,color 
from math import cos,sin,pi 
from numpy import arange,array,empty 

#Sun 
s0 = sphere(radius=45e6,pos=[0,0,0],color=color.yellow) 

#Given Data 
r = array([57.9e6,108.2e6,149.6e6,227.9e6,778.5e6,1433.4e6],int) 
r_plan = array([2440,6052,6371,3386,69173,57316],int) 
r_plan = r_plan*3000 #adjusting scale 
period = array([88.0,224.7,365.3,687.0,4331.6,10759.2],float) 
period = (88.0/period)*.8 #adjusting scale 
s = empty(6,sphere) 

#Creating the planets 
for n in range(6): 
    s[n] = sphere(radius=r_plan[n],pos=[r[n],0]) 

#Prettifying the different planets 
s[0].color = color.magenta 
s[2].color = color.green 
s[3].color = color.red 
s[4].color = color.cyan 
s[5].color = color.blue 

#Orbital Motion 
for n in range(6): 
    m = period[n] 
    for theta in arange(0,10*pi,m): 
     rate(30) 
     x = r[n]*cos(theta) 
     y = r[n]*sin(theta) 
     s[n].pos = [x,y] 

知道了!對於任何未來的讀者,我的最後一個代碼現在看起來像:

#Orbital Motion 
for frame in range(1000): 
    for n in range(6): 
     theta = period[n] * frame 
     rate(60) 
     x = r[n]*cos(theta) 
     y = r[n]*sin(theta) 
     s[n].pos = [x,y] 

回答

0

事情是這樣的:

for frame in range(1000): 
    for n in range(6): 
     theta = angular_speed[n] * frame 
     ... 
+0

謝謝,成功了!我結束了:''範圍內的幀(1000): n範圍(6): theta = period [n] *幀 rate(60) x = r [n] * cos(theta) y = r [n] * sin(theta) s [n] .pos = [x,y]' –

相關問題