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