这是基础物理学.假设Z为up,则您的初始X和Y速度是恒定的,并由初始角度(使用trig)确定.Z分量完全由重力决定.您获取仰角并(再次使用trig)将其转换为组件.那是你的初始Z速度.
这是最简单的配方,忽略风,旋转和阻力(即球在飞行期间不会横向移动并且仅受重力影响).
vx = power * cos(elevation) * sin(azimuth);
vy = power * cos(elevation) * cos(azimuth);
vz = power * sin(elevation);
Run Code Online (Sandbox Code Playgroud)
现在,时间位置t是简单的牛顿物理学:
x = vx * t;
y = vy * t;
z = vz * t - 0.5 * g * t * t;
Run Code Online (Sandbox Code Playgroud)
g重力在哪里(9.81 m/s/s)
但直接使用这些公式并不能让你计算弹跳等.为此,你需要逐步计算它.这意味着,对于小时间增量(dt),您可以获取当前位置和速度并进行修改.
vx; // unchanged
vy; // unchanged
vz -= g * dt; // gravity
x += vx * dt;
y += vy * dt;
z += vz * dt;
Run Code Online (Sandbox Code Playgroud)
如果您的Z位置低于地面,则否定vz允许反弹.如果碰到曲面,则会执行类似的反射(将矢量反射到曲面法线上).
如果你想要飞行受到旋转(马格努斯效应)和其他力量的影响,事情会更棘手.您可能还想减弱反射,因为每当球反弹时能量就会消失.
随你(由你决定.我已经给出了基础知识,我希望有所帮助.
你应该阅读射弹动作.一旦你得到一些基本的工作,并希望使运动更加真实,请阅读运动球的空气动力学/流体动力学......几乎任何Rabindra Mehta的书或文章都是一个很好的起点.