月亮运行的轨迹(月亮的轨迹参考)
月亮运行的轨迹(月亮的轨迹参考)
大圆轨迹的画法,应该没什么问题,可以看成是极坐标系转笛卡尔坐标系。x=r*cos(i) y=r*sin(i) i的变化范围[0 2PI).
再叠加一个伴行的圆呢?这时候就要考虑小轨道半径d了,可以在上面圆轨迹的基础上修正x和y。考虑到一圈大圆是2pi,如果每次公转子卫星绕行n圈,那么大圆每走1弧度,则小圆弧度每次变化为(2pi*n)/(2*pi)=n弧度;为了画图时更平滑,我们把大圆分成pi*2*100份,每次走1/100弧度,则小圆弧度每次变化n/100弧度.
下面就是参考代码,你画出来了吗?
import turtle
import math
tt=turtle.Turtle()
tk=turtle.Turtle()
tout=turtle.Turtle()
tt.pencolor('red')#子卫星1轨道
tk.pencolor('blue')#子卫星2轨道
tout.pencolor('green')#公转轨道
r=300#公转半径
d=50#自转半径
n=10#每次公转含有的自转次数
tt.up()
tt.goto(r d 0)
tt.down()
tk.up()
tk.goto(r 0)
tk.down()
tout.up()
tout.goto(r 0)
tout.down()
k=0
for i in range(0 round(math.pi*2*100)):
k=(k n/100)
tout.goto(math.cos(i/100)*r math.sin(i/100)*r)#公转轨道
tt.goto(math.cos(i/100)*(r) math.cos(k)*d math.sin(i/100)*(r) math.sin(k)*d)#子卫星1轨道(通公转方向)
tk.goto(math.cos(i/100)*(r) math.sin(k)*d math.sin(i/100)*(r) math.cos(k)*d)#子卫星2轨道(逆公转方向)
tt.up()
tout.up()