我需要用C ++编写一个函数,该函数可以对在3D空间中移动的对象的轨迹曲线进行建模和采样。
该函数将需要接受3个参数作为输入。函数原型可能看起来像这样:
void CalculateAndSampleTrajectory(Vec3 direction, float impulse, float mass)
{
//...
}
Run Code Online (Sandbox Code Playgroud)
该VEC3方向是一个结构。本质上是3个浮点,它们表现为描述脉冲初始角度的单位矢量。
该浮冲动是冲动是多么强大的幅度。
该浮动质量描述投影的物体的质量。
该函数将采用这3个参数,然后在给定瞬时脉冲的情况下,沿着此向量射击,预先计算该质量的对象的轨迹。
为此,它将在飞行的前4秒钟内对轨迹进行采样(例如200个)。这些样本将是弹丸位置的Vec3,并存储在阵列中。
所有单位均为SI,重力加速度为9.81。我们不会考虑任何空气阻力。
这个问题涉及很多物理学,特别是经典力学。这不是我的强项,但我对发生的事情有基本的了解。
我知道我将需要物体的速度,我认为可以将其计算为:
Vec3 velocity = (direction * impulse)/mass;
Run Code Online (Sandbox Code Playgroud)
我觉得这个作品,因为我的冲动将被立即应用,所以这将是F = MA重新安排找到一个但作为3D矢量的。老实说,我什至不确定这是否正确,但我认为是正确的。
一旦有了速度,我就知道可以使用在线上提供的大量方程式了,例如有关弹道的Wikipedia文章
我不太擅长将这些方程式解释为C ++。
在设置了适当的方程式之后,我将需要在4秒钟内进行200个采样。这可以循环执行:
for(int i = 0; i < 200; i++)
{
int t = 0;
//sample equation with t
//store resulting vec3 pos in array
t = t + 0.02;
}
Run Code Online (Sandbox Code Playgroud)
我在t的 …