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

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

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

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

引力弹弓效应

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

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

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

来源:wikipedia-重力助推

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

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

利用引力弹弓加速

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

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

利用引力弹弓减速

视频版

python模拟木星引力弹弓效应 https://www.zhihu.com/video/1079021435854548992

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

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

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

核心部分代码:

# 地木坐标差
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 | 新手引导 | 精选Python问答 | Python单词表 | 人工智能 | 爬虫 | 我用Python | requests | 计算机视觉 | 字符播放器 | 一图学Python | 智能防挡弹幕

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

用python模拟《流浪地球》的木星引力弹弓效应相关推荐

  1. python模拟上传图片_用python创建自己的等离子图片模拟

    python模拟上传图片 For today's recreational coding exercise, we will investigate plasma physics with parti ...

  2. Python模拟太阳-地球-月亮运动模型

    作者 | Charles,cv方向在读研究生.[Charles 的皮卡丘]专注于分享有趣好玩的Python小项目(AI.爬虫等等). 来源 | Charles 的皮卡丘 编辑 | Jane [导语]春 ...

  3. 三体运动python模拟(代码能直接运行)

    三体运动python模拟(代码能直接运行) 原理说明 程序代码(可直接运行) 代码结果示例 原理说明 很高兴撰写CSDN首篇文章!写了一个简单的程序对三体运动进行了模拟以验证其运动的复杂性.难以预测性 ...

  4. python模拟按键_python 模拟按键放在模拟器Python初学者的17个技巧

    Python初学者的17个技巧,有需要的朋友可以参考下. W WW.002pc .COM认为此文章对<python 模拟按键放在模拟器Python初学者的17个技巧>说的很在理. 交换变量 ...

  5. Python模拟赌博实验,赌博为什么能赌到倾家荡产?

    Python模拟赌博实验 作者:dalalaa http://www.jianshu.com/p/2d919a028600 概述 前言 实验思路 实验步骤 统计数据 结论 阿广说 福利一刻 推荐阅读 ...

  6. python 模拟键盘_Python 模拟键盘输入 | 学步园

    Python 模拟键盘输入,留着备用. #coding=utf-8 import win32gui,win32api,win32con import time import threading def ...

  7. python 模拟HTTP服务端

    使用python模拟http服务端,自定义返回信息头部:#!/usr/bin/python import os from BaseHTTPServer import BaseHTTPRequestHa ...

  8. python模拟登录qq账号密码_最新的Python模拟登陆QQ脚本,一键批量登录,强行过验证!...

    Python模拟QQ批量登陆脚本,以下代码附带解释以便于理解思路. Python代码: #coding=utf-8 import os import time import win32gui impo ...

  9. 利用Python模拟鼠标自动完成MM32-LINK程序下载

    简 介: 编写了利用Python控制MM32-LINK自动下载程序,这可以减少在开发过程中的操作. MM32-LINK在打开程序过程中,对话框的标题出现错误,"Load form file& ...

最新文章

  1. 机器学习算法python实现
  2. guid linux 识别的分区表_Linux系统MBR和GPT分区的区别介绍
  3. 这一次,脑机接口可以实时读取人类脑中画面了?
  4. 日赚 5 亿的腾讯工资又涨了:员工上半年人均月薪 7.8 万
  5. 数据库锁解决并发问题
  6. 在Windows下基于libx264.a的Qt 4.8.2视频压缩
  7. AM335X的USB otg网卡(RNDIS /Ethernet Gadget)调试
  8. SAP ABAP里存在Java List这种集合工具类么?CL_OBJECT_COLLECTION了解一下
  9. 思科研究称80%的指纹认证机制均可遭绕过
  10. #if defined和#if !defined的含义
  11. 在Java中基于mysql驱动包连接MySQL数据库
  12. Hitool工具烧写程序(按分区烧写)
  13. 开发Linux应用程序的三种方法
  14. 【Ghost Explore】镜像文件查看器
  15. 手把手教你做出数据可视化项目(一)页面布局
  16. 强大的多线程和倒计时程序
  17. 32位汇编ebp、ebp-4、ebp+4、ebp+8等含义
  18. AD19 keepoutlayer相关
  19. 二、CRUD操作以及配置解析
  20. 地图实景php,全景图展现 - 百度地图开发文档 - php中文网手册

热门文章

  1. 单循环链表(用尾指针表示)
  2. 用来向登录页面输出验证码图片的一般处理程序页面
  3. 支持拼音检索的TextBox扩展控件-使用
  4. Microsoft Deployment Toolkit build 8456
  5. OpenStack安装流程(juno版)- 添加镜像服务(glance)
  6. 接口和一些抽象类的区别
  7. ios runtime (2)
  8. 明天就是第四周的实训开始的时间
  9. [JBoss] JNDI与JBossNS
  10. Error Could not open client transport with JDBC Uri jdbchive2hadoop10210000 Failed to open new sessi