ekc*_*ell 5 c++ 3d physics projectile
我需要用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的方程式的解时刻的将作为当时对象位置的坐标给出,并且应具有3个参数(x,y,z),因此将其存储在Vec3中。
我不知道如何进行必要的物理编程才能正确设置我的方程以进行采样。我无法将Wikipedia和其他来源上有关物理学的理论讨论解释为C ++函数。
感谢您提供任何帮助。
基本上只有一个方程式与您的问题相关,即
这为您提供了当时的位置t
(来自 a t0
)。
现在,你已经得到s0
了v0
,这是初始速度,已经根据脉冲计算出来了。你需要的是加速度。
在你的情况下,你只有重力,它在时间上是恒定的,它主要是一个向下指向的 vec3 ,具有预定的量(9.8 m/s^2)。
您不需要计算每一步的值,因为您可以直接对值进行积分,下一步的结果不依赖于上一步的结果。
这没有考虑任何形式的阻力,否则您必须将其包括在内。