Unity 计算抛物线距离、落点

您所在的位置:网站首页 抛物线怎么算球落地 Unity 计算抛物线距离、落点

Unity 计算抛物线距离、落点

2024-06-28 19:08| 来源: 网络整理| 查看: 265

一、参考知识 1、斜抛物体的轨迹

向斜上方抛出的物体,受到跟它的速度方向不在同一直线上的重力作用而做曲线运动,这种运动叫做斜抛运动。投出的标枪和手榴弹,大炮发射的炮弹,它们的运动都是斜抛运动。做斜抛运动的物体,先是沿曲线上升,升到最高点后,又沿着曲线下降。图中闪光照片中小球的运动轨迹就是斜抛物体的运动轨迹,这个轨迹就是一条抛物线。

image.png

通常是水平和竖直两个方向上分解,以便于利用直角坐标系进行计算。我们把初速度v0分解为水平方向上的分速度vx=v0cosθ和竖直方向上的初速度vy=v0sinθ,在水平方向上,物体不受力,做匀速直线运动,速度等于vx;在竖直方向上做竖直上抛运动,初速度等于vy。把上图中闪光照片里斜抛的小球的位置跟左边和下边的两幅对照图比较,就可以看出斜抛运动是上述两个分运动的和运动。

image.png 2、射程与射高

在斜抛运动中,从物体被抛出的地点到落地点的水平距离X叫做射程。物体到达的最大高度Y叫做射高。斜抛物体的射程与射高跟那些因素有关呢?

image.png

用图所示的装置来做实验,可以看到,在喷水嘴方向不变(即抛射角不变)时,随着容器中水面的降低,喷出的水流速度减小,它的射程也随着降低。

如果在喷水过程中保持容器内水面的高度不变,喷出的水流速度也就不变。改变喷水嘴的方向,可以看到,在抛射角小的时候,射程随着抛射角的增大而增大,当抛射角达到45°时,射程最大;继续增大抛射角,射程反而减小。但是水流的射高一直是随抛射角的增大而增大的。

image.png

上面的讨论中我们没有考虑空气的阻力。实际上,抛体运动总要受到空气阻力的影响。在初速度比较小时,空气阻力可以忽略不计,但是在初速度很大时(例如射出的炮弹),空气的影响是很明显的,图中虚线是在理想的没有空气阻力的空间中炮弹飞行的轨迹;实线是以相同的初速度和抛射角射出的炮弹在空气中飞行的轨迹,这种曲线叫做弹道曲线。可以看出,弹道曲线跟抛物线实际上有很大差别。用20°角射出的初速度是600m/s的炮弹,假如没有空气阻力,射程可以达到24km,由于空气阻力的影响,实际射程只有7km,射高也减小了。

3、在Unity中计算射程与落点 /// /// 得到球抛物线的落点 /// /// 球初始位置 /// 球运动的初始的方向和大小 /// public Vector3 GetTennisDropPoint(Vector3 startPos, Vector3 vel) { //球初速度 float _vel = vel.magnitude; //直接算斜边与水平的角度 float angle = Vector3.Angle(new Vector3(vel.x, 0, vel.z), vel); //网球斜上抛后的射程 float s = _vel * _vel * Mathf.Sin((2 * angle) * Mathf.Deg2Rad) / Physics.gravity.magnitude; //计算z和x轴的分射程 float anglez = Vector3.Angle(Vector3.forward, new Vector3(vel.x, 0, vel.z)); float s_z = s * Mathf.Cos(anglez * Mathf.Deg2Rad); float s_x = s * Mathf.Sin(anglez * Mathf.Deg2Rad); //判断往左还是往右 Vector3 v3 = Vector3.Cross(Vector3.forward, new Vector3(vel.x, 0, vel.z)); if (v3.y < 0) { s_x *= -1; } //返回落点 return new Vector3(startPos.x, 0, startPos.z) + new Vector3(s_x, 0, s_z); }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3