Unity模拟行星轨道(二)

本文介绍了使用Unity模拟行星运动的过程,包括行星运动参数方程的获取,采用二分法求解角度,时间初始化,行星位置和速度的计算,以及在程序运行中如何进行优化,确保在实时改变行星位置和速度的同时避免不必要的资源浪费。
摘要由CSDN通过智能技术生成

这次呢,主要是解决上次遗留的问题之一:行星运动

行星运动参数方程

为了找这个行星运动方程,我翻遍了各个百科的角落旮旯,终于在果壳的某个回答里找到了答案。
注意其中的 e 不是自然常熟而是偏心率,也就是焦距 / 半长轴。
在这里插入图片描述
大道至简啊,不过这个公式依旧不好用,想知道任意 t 时刻的r必须先求出参数 ξ 。不过我们可以用二分法来求这个参数,然后就可以求出 t 时刻的rv

时间参数方程

这个函数输入弧度,也就是参数 ξ 就可以求出对应的 t ,注意这两个量都是全域的,但我们稍后需要限制一下。

	//以弧度为参数的时间方程
    private float Rad2Time(float rad)
    {
   
        return w * Mathf.Sqrt(w / GM) * (rad - f / w * Mathf.Sin(rad));
    }

二分法求角度

这是一个利用二分递归求弧度的函数,弧度限制在 l 和 r 之间,精度为0.00001。

	//用二分法求弧度,输入时间,输出弧度
    private float Dichotomy(float l, float r, float time)
    {
   
        if (r - l < 0.00001) return l;

        float ltime = Rad2Time(l * Mathf.Deg2Rad);
        float rtime = Rad2Time(r * Mathf.Deg2Rad);
        float mtime = Rad2Time((l + r) / 2 * Mathf.Deg2Rad);

        if((ltime - mtime) * (time - mtime) >= 0)
            return Dichotomy
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值