美文网首页
Unity 计算抛物线距离、落点

Unity 计算抛物线距离、落点

作者: 玄策丶 | 来源:发表于2023-03-02 14:44 被阅读0次

一、参考知识

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中计算射程与落点

    /// <summary>
    /// 得到球抛物线的落点
    /// </summary>
    /// <param name="startPos">球初始位置</param>
    /// <param name="vel">球运动的初始的方向和大小</param>
    /// <returns></returns>
    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);
    }

相关文章

  • 【9】圆锥曲线

    定义9.1 到定点的距离与到定直线的距离相等的点的轨迹,称为抛物线(Parabola)。称点为抛物线的焦点,直线为...

  • unity 模拟抛物线

    最近在学习VR时,看见VR手柄中绘制的抛物线。感觉对抛物线很陌生,就想抽时间学习学习,自己写个抛物线充实一下。效果...

  • 【Unity】抛物线公式

    先上公式 使用方法,这里我用的是协程

  • Unity计算

    transform.InverseTransformPoint 和 transform.TransformPoin...

  • 【unity】获得地理坐标并计算距离

    最近研究了一下定位这个系统,感觉还多有趣的,游戏社交(约*)。查了一下看到了这篇文章,其中讲了一些方法,多不错的。...

  • 斯文碎了一地

    “如果算诗,也是一首伪诗” 他没忍住 崩出一发空爆弹 对着一池温泉,对着 平行空间 弹落点没偏差,可只见抛物线 不...

  • 落点

    落点 一张图:一个看不清面孔的人荡一个秋千儿黑、白无明天地间只一个影像天空下与地上的互为倒影且彼此参照过往的树不再...

  • 落点

    我一直往回走,往回走 遇见的路口还在那里 只是一起看风景的人去了别处 行走的脚一直向前 思绪的潮却喜欢倒退 很想找...

  • 落点

    考试前最后两天。 她收拾好桌子里堆了一个学期的零零碎碎的东西,抱着一摞书往家走。 走在校林荫道上,头顶是道路两旁自...

  • 落点

    着实无聊聊中的状态,却也有一堆要处理要规划的事情。 仍旧会发呆的困顿,安静到打盹,这就是近期的状态,即将计划要更...

网友评论

      本文标题:Unity 计算抛物线距离、落点

      本文链接:https://www.haomeiwen.com/subject/azyjldtx.html