我需要在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重新安排找到一个但作为一个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函数.
感谢您提供任何帮助.
最佳答案 基本上只有一个与你的问题相关的方程式,即
它给你在时间t的位置(从t0开始).
现在,你已经得到了s0,你已经得到了v0,这是初始速度,已经从脉冲中计算出来了.你需要的是加速度.
在你的情况下,你只需要在时间上恒定的重力,它主要是一个vec3指向下一个前缀量(9.8 m / s ^ 2).
您不需要计算每一步的值,因为您可以直接对值进行积分,下一步结果不依赖于前一步.
这不考虑任何形式的阻力,否则你必须包括它.