博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用python模拟《流浪地球》的木星引力弹弓效应
阅读量:6346 次
发布时间:2019-06-22

本文共 2080 字,大约阅读时间需要 6 分钟。

hot3.png

本文涉及影片内容,但算不上剧透。想看还未看的同学请谨慎阅读。

春节档的几部电影里,《流浪地球》成为一匹黑马,刷爆微博和朋友圈,从最初不高的排片率,一跃上升到票房榜首。

看过影片的人可能会有一个疑问,太阳系那么空旷,为什么地球在“流浪”的过程中,非要作死往木星上靠?

这就牵涉到一个时常在影视作品中拿来做文章,实际在太空探测中很常见的一个概念:

引力弹弓效应

当一个飞行器飞过一个行星时,如果距离较近,就会受到行星的引力影响:靠近时会逐渐加速,远离时会逐渐减速。由于能量守恒,飞行器在进入和离开行星轨道时,与行星的相对速度大小没有变化,但方向却发生了变化。再加上行星本身的速度,从旁观者角度来看,飞行器的速度就发生了变化。举个更通俗的例子:你把一个网球以速度 v 砸向一面墙,球会以同样的速度 v 反弹回来;而如果你以速度 v 砸向一个以速度 u 迎面开来卡车头上,网球则会以 v + 2u 的速度反弹回来(相对速度 v + u 加上卡车速度 u)

v2-e539337d7ff0ee5e5945343f60546781_b.jpg

利用这个办法,可以在不额外消耗燃料的情况下,使太空探测器得到加速或者减速,取决于与行星接触的角度)。这看起来似乎不符合能量守恒定律和动量守恒定律,实则是因为行星的质量相较飞行器来说太大了,其速度的变化可以忽略不计。

目前离地球最远人造物体:旅行者1号,当年就连续利用了木星土星进行了加速。

v2-28eb43097d55b8e26e4474bce264fde5_b.gif来源:wikipedia-重力助推

而在影片中,也就是为了获取更大的速度以脱离太阳系,人类才选择借助木星的引力弹弓效应

出于好奇,我用 python (pygame)写了一个简化的仿真,模拟地球飞越木星时可能发生的情况:

利用引力弹弓加速

v2-d2b982d9c6a7888328102303abe9af21_b.gif

速度太快或距离太远,加速效果不明显

v2-eb439aa55cb1857f08b32167faccdb62_b.gif

速度太慢或距离太近,坠入木星

v2-888fec6ef8224bdca183933e68e9ba74_b.gif

利用引力弹弓减速

v2-05820f185feebe25270ff978562f8e2b_b.gif

视频版

通过几次测试,我发现这“弹弓”可不是那么好用的,离得远了没啥效果,离得太近又可能被引力捕获,撞在木星上(事实在撞上之前,地球就会因达到洛希极限而被撕裂)。

至于剧中发生了什么,我这里也就不多说了。

我这个模拟代码中,为了视觉效果,地球和木星的大小,以及他们的相对距离是不成比例的,否则会更小。而且为了让速度变化更明显,对运行速度也做了放大。所以从绝对数值上来说是不准确的,但相对变化都是通过基本物理定律计算得出的

核心部分代码:

# 地木坐标差delta_x = (jupiter[0] - earth[0]) * kdelta_y = (jupiter[1] - earth[1]) * k# 地木距离平方r2 = delta_x ** 2 + delta_y ** 2# 地木间引力,万有引力定律F = G * m * M / r2# 地木夹角theta = math.acos(delta_x / r2 ** 0.5)# x、y 轴引力分量fx = abs(F * math.cos(theta)) * sign(delta_x)fy = abs(F * math.sin(theta)) * sign(delta_y)# x、y 轴加速度,牛顿第二定律 F = maax = fx / may = fy / m# 速度变化,vt = v0 + atvel_x += ax * tvel_y += ay * t# 位移变化,st = s0 + vtpos_x += vel_x * t / kpos_y += vel_y * t / k

相关参数:

k = 1e7            # 距离缩放参数m = 5.9742e24      # 地球质量M = 1898.7e27      # 木星质量G = 6.67259e-17    # 万有引力常量t = 1e5            # 时间缩放参数pos_x= 0           # 地球坐标pos_y= 550earth = pos_x, pos_yvel_x= 300         # 地球速度vel_y= 0jupiter = 700, 150 # 木星坐标v_j = 3            # 木星速度

想要测试不同效果,可以调整坐标、速度等参数。

“引力弹弓”的概念在几年前的《星际穿越》和《火星救援》中都有提及,我一直想写个模拟,直到这次趁《流浪地球》热映的机会才动手实现。这部电影我从去年7月尚未跳票之时比较期待,也看过原著,本来还担心会不会排片太少,没想到会火成这样。这里面当然有很多偶然的商业因素,影片本身也有很多不足,但我作为一个“科学爱好者”,乐见如此。之前流产的《三体》电影版或许也因此有机会重新投胎。

希望以后会有更多精彩的科幻作品出现,也希望更多的人在低头忙碌之余能抬头仰望星空。

模拟代码已上传,获取请在公*号(Crossin的编程教室)中回复关键字:引力

════

其他文章及回答:

| | | | | | | | | | |

欢迎搜索及关注:Crossin的编程教室

154816tsh373rusgwbxs7w.png

转载于:https://my.oschina.net/crossin/blog/3009676

你可能感兴趣的文章
《HTML5+CSS3网页设计入门必读》——1.5 利用多种Web浏览器执行测试
查看>>
Velocity官方指南-容器
查看>>
国家为何如此重视石墨烯?
查看>>
《Python和Pygame游戏开发指南》——1.14 配套网站上的更多信息
查看>>
Kafka+Flink 实现准实时异常检测系统
查看>>
利用mybatis查询两级树形菜单
查看>>
《慕客网:IOS基础入门之Foundation框架初体验》学习笔记 <一>
查看>>
Spring声明式事务管理之二:核心接口API
查看>>
解决:在微信中访问app下载链接提示“已停止访问该网页”
查看>>
LNMP环境安装(二)
查看>>
MFC对话框编程-图片控件
查看>>
nodejs启动webserver服务
查看>>
小偷被抓叫嚣:我不偷警察没饭吃
查看>>
python初学—-实现excel里面读数据进行排序
查看>>
用户体验升级后 “谁行谁上”让百度Q4财报更有底气
查看>>
直播相关学习链接
查看>>
使用RPM包工具和源码包编译安装Linux应用程序
查看>>
VoIP——开启免费通话新时代的先锋
查看>>
Linux下rsync的用法
查看>>
apache虚拟主机、日志轮询、日志统计、去版本优化
查看>>