用python模拟地球飞越木星

栏目: Python · 发布时间: 6年前

内容简介:本文涉及影片内容,但算不上剧透。想看还未看的同学请谨慎阅读。春节档的几部电影里,《看过影片的人可能会有一个疑问,

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

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

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

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

引力弹弓效应

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

用 <a href='https://www.codercto.com/topics/20097.html'>python</a> 模拟地球飞越木星

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

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

用python模拟地球飞越木星 来源:wikipedia-重力助推

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

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

利用引力弹弓加速

用python模拟地球飞越木星

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

用python模拟地球飞越木星

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

用python模拟地球飞越木星

利用引力弹弓减速

用python模拟地球飞越木星

视频版

用python模拟地球飞越木星

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

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

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

核心部分代码:

# 地木坐标差
delta_x = (jupiter[0] - earth[0]) * k
delta_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 = ma
ax = fx / m
ay = fy / m
# 速度变化,vt = v0 + at
vel_x += ax * t
vel_y += ay * t
# 位移变化,st = s0 + vt
pos_x += vel_x * t / k
pos_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_y
vel_x= 300         # 地球速度
vel_y= 0jupiter = 700, 150 # 木星坐标
v_j = 3            # 木星速度

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

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

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

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

════


以上所述就是小编给大家介绍的《用python模拟地球飞越木星》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Paradigms of Artificial Intelligence Programming

Paradigms of Artificial Intelligence Programming

Peter Norvig / Morgan Kaufmann / 1991-10-01 / USD 77.95

Paradigms of AI Programming is the first text to teach advanced Common Lisp techniques in the context of building major AI systems. By reconstructing authentic, complex AI programs using state-of-the-......一起来看看 《Paradigms of Artificial Intelligence Programming》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器