Unity模拟榴弹运动轨迹

前言

最近迷上了《最高指挥官2》这个游戏,里面的远程火炮的轰击很让我着迷,于是本着闲着也是闲着的原则,就写一篇关于实现这种类似榴弹炮效果的代码。

斜抛运动

先回忆在高中物理中,是否算过这么一个问题,给了一个物体的斜抛角度,初速度,重力加速度,然后让你计算这个物体抛出后,会落在什么地方。这里假设斜抛角为60度,初速度为100m/s,重力加速度为10m/s^2;(为了方便,下面默认单位为m)
很明显这是一个简单的物理题,处理这个问题的主要解决思想为求出物体竖直方向的运动时间,这个时间就是物体整个斜抛运动的运动时间,乘以水平方向速度,就可以得到位置。先可以把初速度分解为两个方向的速度,分别是水平方向和竖直方向(重力加速度的反方向),这里要特别注意的是被分解的水平速度和竖直速度是两个互不影响速度,也就是说,可以把整斜抛过程分解为水平方向的匀速直线运动,竖直方向为加速度为-10的匀加速直线运动。这点很重要!
如图中所示,设Vy = sinθ * V, Vx = cosθ * V,得到了两个速度,然后开始独立分解这两个运动。
首先竖直方向,当物体克服重力做功到达最高点时,物体在竖直方向的速度就为0,又知道物体在竖直方向做的是匀减速直线运动,所以:
Vc = V0 + at;
Vc为物体当前的竖直方向的速度,V0为Vy,加速度a就是重力加速度g;
Vc = 0m/s;
便可以得到:
V0 = -at;(注意这里的a = g = - 10m/s^2)
就可以求出
t = Vy / -g = 100 * sin(60°) / 10 = 5s;
所以求出了物体向上运动的时间为5s。
接下来物体要做的就是自由落体运动,可以用同样的方法计算出下落时间为5s,当然也可以省略这一步骤直接得出下落时间为5s,因为物体做自由落体运动的高度与加速度都不变,所以其花费的时间也不变,等于上抛时间。
这样计算出了整个斜抛运动的时间花费为10s,所以就可以直接得出物体落下的位置为:
距离自身 Vx * t 处的位置,(带入的计算我就不说了,读者可以自行带入计算)。
对于这个题还需要加众多的限制条件,例如斜抛过程忽略空气阻力的影响、斜抛前方没有障碍物等。

逆向的推导

在已知重力加速度,物体初速度和斜抛仰角的情况下计算出了,物体将要击中的位置。所以当给出重力加速度,物体初速度,以及击中位置,要求计算斜抛仰角,也是可以的。
设斜抛仰角为θ,物体初速度与重力加速度和上一节一样,不同的是这里多了一个击中位置,直接取得击中位置与发射位置的距离为S。还是对这个速度进行分解,如下图所示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值