鱼C论坛

 找回密码
 立即注册
查看: 3226|回复: 20

[作品展示] 第一次用Turtle绘图,做了个简单的小玩意

[复制链接]
发表于 2023-2-18 14:28:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 额外减小 于 2023-2-18 14:58 编辑

如题
演绎三体运动的程序
效果:
1111.JPG
代码:
  1. import turtle
  2. import math as ma

  3. #
  4. tstep=0.002
  5. #
  6. def _angle(z):
  7.     if z.real>0:
  8.         return ma.atan(z.imag/z.real)
  9.     elif z.real<0:
  10.         return ma.atan(z.imag/z.real)+ma.pi
  11.     else:
  12.         if z.imag>=0:
  13.             return ma.pi/2
  14.         else:
  15.             return -ma.pi/2

  16. #参数列表
  17. mlist=[5000,10000,5000]
  18. rlist=[0-30j,-20+10j,10+20j]
  19. vlist=[20+0j,-10+5j,10+0j]
  20. t_0,t_1,t_2=turtle.Turtle(),turtle.Turtle(),turtle.Turtle()
  21. G=0.1
  22. #

  23. t_0.up()
  24. t_1.up()
  25. t_2.up()
  26. #color
  27. t_0.color("red")
  28. t_1.color("green")
  29. t_2.color("blue")
  30. #
  31. t_0.goto(rlist[0].real,rlist[0].imag)
  32. t_1.goto(rlist[1].real,rlist[1].imag)
  33. t_2.goto(rlist[2].real,rlist[2].imag)
  34. t_0.down()
  35. t_1.down()
  36. t_2.down()

  37. def F(a,b):
  38.     return G*mlist[a]*mlist[b]/abs(rlist[a]-rlist[b])*ma.cos(_angle(rlist[b]-rlist[a]))+G*mlist[a]*mlist[b]/abs(rlist[a]-rlist[b])*ma.sin(_angle(rlist[b]-rlist[a]))*1j

  39. while True:
  40.     for i in range(5):
  41.         vlist[0]+=(F(0,1)+F(0,2))/mlist[0]*tstep
  42.         vlist[1]+=(F(1,0)+F(1,2))/mlist[1]*tstep
  43.         vlist[2]+=(F(2,0)+F(2,1))/mlist[2]*tstep
  44.         rlist[0]+=vlist[0]*tstep
  45.         rlist[1]+=vlist[1]*tstep
  46.         rlist[2]+=vlist[2]*tstep
  47.    
  48.     t_0.goto(rlist[0].real,rlist[0].imag)
  49.     t_1.goto(rlist[1].real,rlist[1].imag)
  50.     t_2.goto(rlist[2].real,rlist[2].imag)
复制代码

评分

参与人数 1荣誉 +1 收起 理由
Threebody1 + 1 升级

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-18 14:31:54 | 显示全部楼层
好厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-18 14:57:15 | 显示全部楼层
本帖最后由 额外减小 于 2023-2-18 15:00 编辑

可更改参数:
line 5 : 每次演绎间隔时间
line 19: 三个质点的质量
line 20: 三个质点的初始位矢
line 21: 三个质点的初始速度矢量
line 23: 万有引力常量
line 30-32: turtle 的 颜色
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-18 15:58:51 | 显示全部楼层

                               
登录/注册后可看大图

哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-18 17:27:12 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-18 20:26:34 | 显示全部楼层

像极了题目不会做的时候我抓头皮屑的路线
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-18 20:31:37 | 显示全部楼层
歌者文明清理员 发表于 2023-2-18 20:26
像极了题目不会做的时候我抓头皮屑的路线

哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-18 21:30:03 | 显示全部楼层
111.JPG
绿色星球想掺和到红色和蓝色星球的紧密联系中
奈何质量太小,无足轻重,只能紧随其后
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-2-19 07:53:52 | 显示全部楼层
额外减小 发表于 2023-2-18 21:30
绿色星球想掺和到红色和蓝色星球的紧密联系中
奈何质量太小,无足轻重,只能紧随其后

这,万一球跑到右边了,可以设置按下某个键移动视角吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-19 08:20:13 | 显示全部楼层
等质二体+行星
  1. import turtle
  2. import math as ma
  3. import random as random
  4. #
  5. tstep=0.02
  6. #
  7. def _angle(z):
  8.     if z.real>0:
  9.         return ma.atan(z.imag/z.real)
  10.     elif z.real<0:
  11.         return ma.atan(z.imag/z.real)+ma.pi
  12.     else:
  13.         if z.imag>=0:
  14.             return ma.pi/2
  15.         else:
  16.             return -ma.pi/2

  17. def rand():return complex(random.uniform(-25, 25), random.uniform(-25, 25))
  18. #参数列表
  19. mlist=[5000,5000,0.00001]
  20. rlist=[50+0j, -50+0j, 0+0j]
  21. vlist=[0-16j]
  22. vlist.insert(1, -vlist[0])
  23. vlist.append(vlist[0]+(0+10j))
  24. t_0,t_1,t_2=turtle.Turtle(),turtle.Turtle(),turtle.Turtle()
  25. G=0.1
  26. #

  27. t_0.up()
  28. t_1.up()
  29. t_2.up()
  30. #color
  31. t_0.pencolor("red")
  32. t_1.pencolor("green")
  33. t_2.pencolor("blue")
  34. t_0.fillcolor('yellow')
  35. t_1.fillcolor('cyan')
  36. t_2.fillcolor('orange')
  37. #
  38. t_0.goto(rlist[0].real,rlist[0].imag)
  39. t_1.goto(rlist[1].real,rlist[1].imag)
  40. t_2.goto(rlist[2].real,rlist[2].imag)
  41. t_0.down()
  42. t_1.down()
  43. t_2.down()

  44. def F(a,b):
  45.     return G*mlist[a]*mlist[b]/abs(rlist[a]-rlist[b])*ma.cos(_angle(rlist[b]-rlist[a]))+G*mlist[a]*mlist[b]/abs(rlist[a]-rlist[b])*ma.sin(_angle(rlist[b]-rlist[a]))*1j

  46. while True:
  47.     for i in range(5):
  48.         vlist[0]+=(F(0,1)+F(0,2))/mlist[0]*tstep
  49.         vlist[1]+=(F(1,0)+F(1,2))/mlist[1]*tstep
  50.         vlist[2]+=(F(2,0)+F(2,1))/mlist[2]*tstep
  51.         rlist[0]+=vlist[0]*tstep
  52.         rlist[1]+=vlist[1]*tstep
  53.         rlist[2]+=vlist[2]*tstep
  54.    
  55.     t_0.goto(rlist[0].real,rlist[0].imag)
  56.     t_1.goto(rlist[1].real,rlist[1].imag)
  57.     t_2.goto(rlist[2].real,rlist[2].imag)
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
额外减小 + 1 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-19 11:30:15 | 显示全部楼层
歌者文明清理员 发表于 2023-2-19 07:53
这,万一球跑到右边了,可以设置按下某个键移动视角吗

这...我试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-20 20:00:26 | 显示全部楼层

这个更为绝佳:等质三体+行星(楽)
  1. import turtle
  2. import math as ma

  3. tstep=0.0002
  4. def _angle(z):
  5.     if z.real>0:
  6.         return ma.atan(z.imag/z.real)
  7.     elif z.real<0:
  8.         return ma.atan(z.imag/z.real)+ma.pi
  9.     else:
  10.         if z.imag>=0:
  11.             return ma.pi/2
  12.         else:
  13.             return -ma.pi/2

  14. mlist=[100000,100000,100000,1]
  15. rlist=[0+60j,40+50j,-80-80j,0+0j]
  16. vlist=[1+1j,0-5j,-5+2j,1-5j]
  17. t_0,t_1,t_2,t_3=turtle.Turtle(),turtle.Turtle(),turtle.Turtle(),turtle.Turtle()
  18. f=0
  19. G=1

  20. t_0.up()
  21. t_1.up()
  22. t_2.up()
  23. t_3.up()
  24. t_0.color("red")
  25. t_1.color("green")
  26. t_2.color("blue")
  27. t_3.color("orange")
  28. t_0.goto(rlist[0].real,rlist[0].imag)
  29. t_1.goto(rlist[1].real,rlist[1].imag)
  30. t_2.goto(rlist[2].real,rlist[2].imag)
  31. t_3.goto(rlist[3].real,rlist[3].imag)
  32. #t_0.down()
  33. #t_1.down()
  34. #t_2.down()
  35. t_3.down()

  36. def F(a,b):
  37.     f=G*mlist[a]*mlist[b]/abs(rlist[a]-rlist[b])
  38.     return f*ma.cos(_angle(rlist[b]-rlist[a]))+f*ma.sin(_angle(rlist[b]-rlist[a]))*1j

  39. while True:
  40.     for i in range(50):
  41.         vlist[0]+=(F(0,1)+F(0,2)+F(0,3))/mlist[0]*tstep
  42.         vlist[1]+=(F(1,0)+F(1,2)+F(1,3))/mlist[1]*tstep
  43.         vlist[2]+=(F(2,0)+F(2,1)+F(2,3))/mlist[2]*tstep
  44.         vlist[3]+=(F(3,0)+F(3,1)+F(3,2))/mlist[3]*tstep
  45.         rlist[0]+=vlist[0]*tstep
  46.         rlist[1]+=vlist[1]*tstep
  47.         rlist[2]+=vlist[2]*tstep
  48.         rlist[3]+=vlist[3]*tstep
  49.     t_0.goto(rlist[0].real,rlist[0].imag)
  50.     t_1.goto(rlist[1].real,rlist[1].imag)
  51.     t_2.goto(rlist[2].real,rlist[2].imag)
  52.     t_3.goto(rlist[3].real,rlist[3].imag)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-20 20:01:46 | 显示全部楼层
目前正在研究关于tkinter的做法。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-20 20:26:03 | 显示全部楼层
额外减小 发表于 2023-2-20 20:00
这个更为绝佳:等质三体+行星(楽)

一般三体会分裂成二体和另外一颗恒星旋转或者弹出
这个是很稳的了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-20 20:31:31 | 显示全部楼层
歌者文明清理员 发表于 2023-2-20 20:26
一般三体会分裂成二体和另外一颗恒星旋转或者弹出
这个是很稳的了

你懂的真多,但我想问问为什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-20 20:43:43 | 显示全部楼层
额外减小 发表于 2023-2-20 20:31
你懂的真多,但我想问问为什么?

不知道,b 站很多三体模拟都是这样
除了三体的特解不会分裂

再说一句,turtle 的内核是 tkinter
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-20 20:45:15 | 显示全部楼层
歌者文明清理员 发表于 2023-2-20 20:43
不知道,b 站很多三体模拟都是这样
除了三体的特解不会分裂


最后一句我知道。
不过你这个分裂的结论还需要理论依据呀。
比如用概率论证明啥的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-20 20:50:12 | 显示全部楼层
额外减小 发表于 2023-2-20 20:45
最后一句我知道。
不过你这个分裂的结论还需要理论依据呀。
比如用概率论证明啥的

啊哈视频里也有讲,自行百度试试?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-20 20:58:00 | 显示全部楼层
歌者文明清理员 发表于 2023-2-20 20:50
啊哈视频里也有讲,自行百度试试?


刚刚我试了一下,发现三颗日一起飞出屏幕
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-20 22:19:12 | 显示全部楼层
额外减小 发表于 2023-2-20 20:58

刚刚我试了一下,发现三颗日一起飞出屏幕

《团结一致》
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-22 19:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表