2017-07-25 59 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]' –

相关问题