第一次用Turtle绘图,做了个简单的小玩意
本帖最后由 额外减小 于 2023-2-18 14:58 编辑如题
演绎三体运动的程序
效果:
代码:
import turtle
import math as ma
#
tstep=0.002
#
def _angle(z):
if z.real>0:
return ma.atan(z.imag/z.real)
elif z.real<0:
return ma.atan(z.imag/z.real)+ma.pi
else:
if z.imag>=0:
return ma.pi/2
else:
return -ma.pi/2
#参数列表
mlist=
rlist=
vlist=
t_0,t_1,t_2=turtle.Turtle(),turtle.Turtle(),turtle.Turtle()
G=0.1
#
t_0.up()
t_1.up()
t_2.up()
#color
t_0.color("red")
t_1.color("green")
t_2.color("blue")
#
t_0.goto(rlist.real,rlist.imag)
t_1.goto(rlist.real,rlist.imag)
t_2.goto(rlist.real,rlist.imag)
t_0.down()
t_1.down()
t_2.down()
def F(a,b):
return G*mlist*mlist/abs(rlist-rlist)*ma.cos(_angle(rlist-rlist))+G*mlist*mlist/abs(rlist-rlist)*ma.sin(_angle(rlist-rlist))*1j
while True:
for i in range(5):
vlist+=(F(0,1)+F(0,2))/mlist*tstep
vlist+=(F(1,0)+F(1,2))/mlist*tstep
vlist+=(F(2,0)+F(2,1))/mlist*tstep
rlist+=vlist*tstep
rlist+=vlist*tstep
rlist+=vlist*tstep
t_0.goto(rlist.real,rlist.imag)
t_1.goto(rlist.real,rlist.imag)
t_2.goto(rlist.real,rlist.imag) 好厉害{:10_257:} 本帖最后由 额外减小 于 2023-2-18 15:00 编辑
可更改参数:
line 5 : 每次演绎间隔时间
line 19: 三个质点的质量
line 20: 三个质点的初始位矢
line 21: 三个质点的初始速度矢量
line 23: 万有引力常量
line 30-32: turtle 的 颜色 https://xxx.ilovefishc.com/album/202302/18/155753f63z3s55054sgsb4.png
哈哈 歌者文明清理员 发表于 2023-2-18 15:58
哈哈
ha{:10_279:} 额外减小 发表于 2023-2-18 17:27
ha
像极了题目不会做的时候我抓头皮屑的路线 歌者文明清理员 发表于 2023-2-18 20:26
像极了题目不会做的时候我抓头皮屑的路线
哈哈{:10_264:}
绿色星球想掺和到红色和蓝色星球的紧密联系中
奈何质量太小,无足轻重,只能紧随其后{:10_266:} 额外减小 发表于 2023-2-18 21:30
绿色星球想掺和到红色和蓝色星球的紧密联系中
奈何质量太小,无足轻重,只能紧随其后
这,万一球跑到右边了,可以设置按下某个键移动视角吗 等质二体+行星import turtle
import math as ma
import random as random
#
tstep=0.02
#
def _angle(z):
if z.real>0:
return ma.atan(z.imag/z.real)
elif z.real<0:
return ma.atan(z.imag/z.real)+ma.pi
else:
if z.imag>=0:
return ma.pi/2
else:
return -ma.pi/2
def rand():return complex(random.uniform(-25, 25), random.uniform(-25, 25))
#参数列表
mlist=
rlist=
vlist=
vlist.insert(1, -vlist)
vlist.append(vlist+(0+10j))
t_0,t_1,t_2=turtle.Turtle(),turtle.Turtle(),turtle.Turtle()
G=0.1
#
t_0.up()
t_1.up()
t_2.up()
#color
t_0.pencolor("red")
t_1.pencolor("green")
t_2.pencolor("blue")
t_0.fillcolor('yellow')
t_1.fillcolor('cyan')
t_2.fillcolor('orange')
#
t_0.goto(rlist.real,rlist.imag)
t_1.goto(rlist.real,rlist.imag)
t_2.goto(rlist.real,rlist.imag)
t_0.down()
t_1.down()
t_2.down()
def F(a,b):
return G*mlist*mlist/abs(rlist-rlist)*ma.cos(_angle(rlist-rlist))+G*mlist*mlist/abs(rlist-rlist)*ma.sin(_angle(rlist-rlist))*1j
while True:
for i in range(5):
vlist+=(F(0,1)+F(0,2))/mlist*tstep
vlist+=(F(1,0)+F(1,2))/mlist*tstep
vlist+=(F(2,0)+F(2,1))/mlist*tstep
rlist+=vlist*tstep
rlist+=vlist*tstep
rlist+=vlist*tstep
t_0.goto(rlist.real,rlist.imag)
t_1.goto(rlist.real,rlist.imag)
t_2.goto(rlist.real,rlist.imag) 歌者文明清理员 发表于 2023-2-19 07:53
这,万一球跑到右边了,可以设置按下某个键移动视角吗
这...我试试 歌者文明清理员 发表于 2023-2-19 08:20
等质二体+行星
这个更为绝佳:等质三体+行星(楽)import turtle
import math as ma
tstep=0.0002
def _angle(z):
if z.real>0:
return ma.atan(z.imag/z.real)
elif z.real<0:
return ma.atan(z.imag/z.real)+ma.pi
else:
if z.imag>=0:
return ma.pi/2
else:
return -ma.pi/2
mlist=
rlist=
vlist=
t_0,t_1,t_2,t_3=turtle.Turtle(),turtle.Turtle(),turtle.Turtle(),turtle.Turtle()
f=0
G=1
t_0.up()
t_1.up()
t_2.up()
t_3.up()
t_0.color("red")
t_1.color("green")
t_2.color("blue")
t_3.color("orange")
t_0.goto(rlist.real,rlist.imag)
t_1.goto(rlist.real,rlist.imag)
t_2.goto(rlist.real,rlist.imag)
t_3.goto(rlist.real,rlist.imag)
#t_0.down()
#t_1.down()
#t_2.down()
t_3.down()
def F(a,b):
f=G*mlist*mlist/abs(rlist-rlist)
return f*ma.cos(_angle(rlist-rlist))+f*ma.sin(_angle(rlist-rlist))*1j
while True:
for i in range(50):
vlist+=(F(0,1)+F(0,2)+F(0,3))/mlist*tstep
vlist+=(F(1,0)+F(1,2)+F(1,3))/mlist*tstep
vlist+=(F(2,0)+F(2,1)+F(2,3))/mlist*tstep
vlist+=(F(3,0)+F(3,1)+F(3,2))/mlist*tstep
rlist+=vlist*tstep
rlist+=vlist*tstep
rlist+=vlist*tstep
rlist+=vlist*tstep
t_0.goto(rlist.real,rlist.imag)
t_1.goto(rlist.real,rlist.imag)
t_2.goto(rlist.real,rlist.imag)
t_3.goto(rlist.real,rlist.imag) 目前正在研究关于tkinter的做法。 额外减小 发表于 2023-2-20 20:00
这个更为绝佳:等质三体+行星(楽)
一般三体会分裂成二体和另外一颗恒星旋转或者弹出
这个是很稳的了 歌者文明清理员 发表于 2023-2-20 20:26
一般三体会分裂成二体和另外一颗恒星旋转或者弹出
这个是很稳的了
你懂的真多,但我想问问为什么? 额外减小 发表于 2023-2-20 20:31
你懂的真多,但我想问问为什么?
不知道,b 站很多三体模拟都是这样
除了三体的特解不会分裂
再说一句,turtle 的内核是 tkinter 歌者文明清理员 发表于 2023-2-20 20:43
不知道,b 站很多三体模拟都是这样
除了三体的特解不会分裂
最后一句我知道。
不过你这个分裂的结论还需要理论依据呀。
比如用概率论证明啥的 额外减小 发表于 2023-2-20 20:45
最后一句我知道。
不过你这个分裂的结论还需要理论依据呀。
比如用概率论证明啥的
啊哈视频里也有讲,自行百度试试? 歌者文明清理员 发表于 2023-2-20 20:50
啊哈视频里也有讲,自行百度试试?
好
刚刚我试了一下,发现三颗日一起飞出屏幕 额外减小 发表于 2023-2-20 20:58
好
刚刚我试了一下,发现三颗日一起飞出屏幕
《团结一致》
页:
[1]
2