一种C ++函数,用于计算和采样3D空间中射弹的轨迹。物理编程

时间:2014-07-31 17:48:25

标签: c++ 3d physics projectile

我需要在C ++中编写一个函数,可以对在3D空间中移动的对象的轨迹曲线进行建模和采样。

问题陈述:

该函数需要将3个参数作为输入。函数原型可能如下所示:

void CalculateAndSampleTrajectory(Vec3 direction, float impulse, float mass)
{
  //...
}

Vec3方向是一个结构。它基本上是3个浮点数,表现为描述脉冲初始角度的单位向量。

浮动脉冲是冲动力的强弱程度。

浮动质量描述了投影对象的质量。

该函数将采用这3个参数,然后根据此向量拍摄的瞬时脉冲,预先计算该质量对象的轨迹。

这将通过在飞行的前4秒内采集轨迹的样本(比如说200)来实现。这些样本将是射弹位置的Vec3s并存储在阵列中。

所有单位均为SI,重力加速度为9.81。我们不会考虑任何空气阻力。

我已经学到了什么:

这个问题涉及很多物理学,特别是经典力学。这个领域不是我的力量,但我对所发生的事情有基本的了解。

我知道我需要物体的速度,我认为可以计算为:

Vec3 velocity = (direction * impulse)/mass;

我认为这是有效的,因为我的冲动将立即应用,所以这将是 f = ma 重新安排找到 a 但作为3D矢量。说实话,我甚至不确定这是否正确,但我认为是。

一旦我有速度,我就知道我可以使用在线提供的丰富方程式,例如Wikipedia article on Trajectory

我不太擅长将这些方程式解释为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;
}

t 处方程式的解将作为当时物体位置的坐标给出,并且应该有3个参数(x,y,z),因此它将被存储在一个Vec3。

我需要帮助的地方:

我不知道如何进行必要的物理编程,以便正确设置方程式以便对其进行采样。我无法将维基百科和其他来源的物理理论讨论解释为C ++函数。

感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:3)

基本上只有一个与您的问题相关的等式,即

enter image description here

,它为您提供t时的位置(来自t0)。

现在,您已经获得了s0并且您已经获得v0,这是初始速度,已经根据冲动计算出来。你需要的是加速度。

在你的情况下,你的重力在时间上是恒定的,并且它主要是一个以预定量(9.8 m / s ^ 2)指向下方的vec3。

您不需要计算每一步的值,因为您可以直接对值进行整合,下一步结果并不依赖于前一步。

这不考虑任何形式的阻力,否则你必须包括它。