【发布时间】:2020-07-31 05:36:37
【问题描述】:
我正在编写一个函数,它接收一个在 3D 空间中具有轨迹(包括起始位置、起始速度和加速度,均表示为 Vector3s)的对象,如果它撞到另一个对象,则返回碰撞点和时间的碰撞。我正在使用带有时间步长的运动学方程来检测可能的碰撞,我可以通过这种方式获得碰撞点,但是一旦我有了它,我想找到发生碰撞的确切时间。我想重新排列一个运动学方程解决时间并插入我已经拥有的东西,但我不知道如何使用所有三个运动轴来做到这一点,因为我的其他值是 Vec3 的,而时间只是标量。我曾想过只在一个轴上进行计算,但我不确定这是否会导致准确的结果。
仅基于一个轴计算是否准确,或者有没有办法将所有三个轴都纳入计算?我用来求解时间的公式是:
t = (v_init +/- Sqrt((v_init)^2 - (accel * disp * 4 * .5)))/accel;
其中 v_init 是初始速度,disp 是总位移,accel 是加速度。我是根据运动学方程得出的:
d = v*t + .5*a*t^2
【问题讨论】:
-
如果所有 3 个轴的初始速度和加速度都相同,您可以只基于一个轴进行计算。我认为情况并非如此,因为我想象在 z 轴上你也应该有重力加速度。正在计算地面上的碰撞点吗?
-
按组件进行,然后创建结果组件的向量。
-
@Eddymage 重力被忽略,但加速度是恒定的,并且可以(并且通常是)在所有三个轴上。但是,三个轴的初始速度和加速度是不同的。碰撞点只是一个简单的平面
-
@badcoder,你为什么要忽略弹丸中的重力加速度?如果不是重力,您所说的加速度是多少?
-
抱歉,这样说不太好,有“重力”,但它可以在任何方向,而不仅仅是向下。这是唯一的加速。对不起,如果这听起来很奇怪
标签: c++ projectile kinematics