V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wl879
V2EX  ›  程序员

求助:想做一个引力的动画, A 绕 B 旋转,并被吸引,求公式

  •  
  •   wl879 ·
    wl879 · 2017-05-12 17:00:03 +08:00 · 4353 次点击
    这是一个创建于 2750 天前的主题,其中的信息可能已经有所发展或是发生改变。

    像黑洞的动画,星星围绕它转,最后被吸入的动画

    23 条回复    2017-05-13 23:02:29 +08:00
    SeanChense
        1
    SeanChense  
       2017-05-12 17:19:58 +08:00   ❤️ 1
    多体系统,你想要的是双体系统。
    N 大于等于 3 的多体系统现在科学家都头疼。

    https://zh.wikipedia.org/wiki/%E4%BA%8C%E9%AB%94%E5%95%8F%E9%A1%8C
    https://zh.wikipedia.org/wiki/N%E4%BD%93%E9%97%AE%E9%A2%98
    jianzhiyao020
        2
    jianzhiyao020  
       2017-05-12 17:20:42 +08:00
    百度:
    万有引力公式
    圆周运动公式
    eoxy
        3
    eoxy  
       2017-05-12 17:28:02 +08:00
    F=Gm₁m₂∕r²
    ryd994
        4
    ryd994  
       2017-05-12 17:35:16 +08:00 via Android   ❤️ 1
    如果忽略星星之间的相互作用的话,就是独立问题,最简单。不忽略就是 n body,你先试试 verlet

    @SeanChense n body 问题难的是解析解。数值方法求近似还是很容易的。不然各种分子动力学都不用做了。
    finab
        5
    finab  
       2017-05-12 17:45:38 +08:00
    直接被楼上吓尿了
    我以为楼主就要个 🌀 这个的计算公式呢,
    hard2reg
        6
    hard2reg  
       2017-05-12 17:47:18 +08:00 via iPhone
    请 flash
    am241
        7
    am241  
       2017-05-12 17:50:32 +08:00 via Android
    要么推导出轨迹随时间变化的函数并绘制
    要么找一个最小时间间隔做数值积分
    Kilerd
        8
    Kilerd  
       2017-05-12 18:01:20 +08:00 via iPhone
    @SeanChense 三体找不到一个稳定的状态。
    因此引发了《三体》
    menc
        9
    menc  
       2017-05-12 18:37:56 +08:00   ❤️ 4
    楼上都想什么呢,三体都出来了?强行吹比?看不懂题意?
    二体也用不上,人家固定了一个物体,哪来的双体问题?
    feng32
        10
    feng32  
       2017-05-12 18:45:32 +08:00
    多体用计算机模拟特简单,类似数值积分的方法就行了
    shijingshijing
        11
    shijingshijing  
       2017-05-12 19:03:57 +08:00   ❤️ 2
    很早以前,替我妈做了个地球围绕太阳转的物理课程动画教案,用的 Authorware,供楼主参考。
    ProjectAmber
        12
    ProjectAmber  
       2017-05-12 19:27:24 +08:00 via iPhone   ❤️ 1
    用阿基米德螺线近似下比较简单。
    pcwow
        13
    pcwow  
       2017-05-12 19:31:18 +08:00   ❤️ 1
    《 HTML5+JavaScript 动画基础》第 12 章粒子与万有引力
    这里有 Demo:
    http://lamberta.github.io/html5-animation/
    blankme
        14
    blankme  
       2017-05-12 19:31:54 +08:00   ❤️ 1
    动量守恒 + 能量守恒 就能算出 r(t) 和 \theta(t)

    不过最后是个微分方程。。。 - -

    最实际的方法其实是找个差不多的螺旋线直接拿来用就行了,不是专业用途没人会细究的
    acros
        15
    acros  
       2017-05-12 19:35:51 +08:00 via iPhone   ❤️ 1
    最简单做法,直接绕圈不就好了,只是 r 值慢慢变小。
    复杂点用速度合成,一个切向力,一个向心力(渐大),做向量叠加。

    不是做模拟天体吧,是的话我不知道....
    flyingghost
        16
    flyingghost  
       2017-05-12 20:20:13 +08:00
    不就是引力公式和速度 /加速度公式吗?不就是速度合成吗?
    三体问题是找不出解析解,模拟三个体直接跑跑看还不简单嘛。
    而且 @menc #9 也指出了,题意根本没说 B 也绕 A 旋转。更简化了。
    这样的题面,画个九大行星绕太阳然后改改参数让他们都掉进去也不难啊。
    blankme
        17
    blankme  
       2017-05-12 20:34:59 +08:00 via Android
    @flyingghost 你这样是算不出来的,因为引力是含时的
    quadpixels
        18
    quadpixels  
       2017-05-12 23:09:45 +08:00 via Android
    积分可以用 Runge-Kutta 法,会比直接的加法(又叫欧拉法)要好。
    有一个叫 Hattrick 的程序,就是用了 GNU GSL 中的 Runge-Kutta 积分器来解 N 体问题的: https://github.com/wtolson/hattrick
    quadpixels
        19
    quadpixels  
       2017-05-12 23:21:43 +08:00 via Android
    在那个 Hattrick 的这个文件中的 Acceleration 函数就有速度和加速度的公式,其实有了那两个就能让系统动起来。
    https://github.com/wtolson/hattrick/blob/master/src/Gravity.cc
    这个程序精度很高,我自己试过低精度,如果只是要起来看起来好看就 OK 其实也行不需要这么高级的方法的
    dongoo
        20
    dongoo  
       2017-05-13 01:34:11 +08:00 via Android
    斐波那契数列?
    不知道可不可以要倒过来呢?
    dangyuluo
        21
    dangyuluo  
       2017-05-13 02:42:03 +08:00
    实际上你考虑一下,强行另一个大质量物体 A 静止,另一个小质量物体 B 以一定初速度绕 A 运转。不考虑阻力,只要初速度矢量方向不在 AB 连线方向上的话,那轨迹肯定是个封闭的椭圆,二者永远不会相交的。
    dangyuluo
        22
    dangyuluo  
       2017-05-13 02:47:28 +08:00
    @dangyuluo 更正一句:那轨迹肯定是抛物线、双曲线、封闭的椭圆中的一种。
    codehz
        23
    codehz  
       2017-05-13 23:02:29 +08:00 via Android   ❤️ 1
    只是做动画而已啊。。。又不用在乎科学性。。。
    用极坐标,然后弄个递减函数就可以了(比如 a/x-b)。。。然后角度增加的速度,应该是越来越快的,这里再弄一个递增函数(比如 c^x),完美。。。这样参数化之后,只要调整几个参数,看着好看就可以了
    基于物理的方法去做这个基本是费力不讨好,可能物理上都对了,但是不好看。。。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1054 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 19:05 · PVG 03:05 · LAX 11:05 · JFK 14:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.