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]' –