代码之家  ›  专栏  ›  技术社区  ›  rafvasq

统一性:在给定目标点和方向的情况下真实地转动汽车

  •  0
  • rafvasq  · 技术社区  · 7 年前

    我有一个csv给我 x,z 汽车的坐标 id 在给定的时间 t 几秒钟后。 下面 是一辆 id=1 它是几秒钟内的坐标。头三秒,车停了下来。然后它就转了 左边 再继续几秒钟。

    目前,我正在根据下一个位置计算方向,并将汽车朝着这个方向旋转,但转弯处没有“曲线”,它只是直接移动到下一个位置:

    Vector3 direction = (nextPosition - car.transform.position).normalized;
    if(direction != Vector3.zero)
    {
        Quaternion lookRotation = Quaternion.LookRotation(direction);
        float step = speed * Time.deltaTime;
        car.transform.rotation = Quaternion.Slerp(car.transform.rotation, lookRotation, Time.deltaTime * rotationSpeed);
    }
    

    仅给出这些点,特别是 958 959 在转弯的地方,有没有办法更现实地转弯?我知道Unity的标准资产 CarController.cs 驾驶 功能性,但我不确定我是否能利用它。

    t,id,x,z
    956,1,-1.50,232.39
    957,1,-1.50,232.39
    958,1,-1.50,232.39
    959,1,-4.50,209.72
    960,1,-4.50,193.05
    961,1,-4.50,176.39
    
    1 回复  |  直到 7 年前
        1
  •  5
  •   Eric Lippert    7 年前

    正如我在回答你之前的问题时指出的,一个好的第一近似值是计算测量值之间的“间隙”中的平均速度,将汽车指向平均速度的方向,你就完成了。

    这不会产生真实的运动,因为汽车当然不会 瞬间 速度的变化。相反,有 军队 施加在汽车上的力 加快 在特定方向上的汽车。(注意 减速就是加速 ;我没有区分加速和减速。)

    你有每秒的位置,你知道如何从前面的问题计算每秒的平均速度。现在计算平均值 加快 以同样的方式。我们知道 F = m a ,所以如果汽车的质量保持不变,那么作用在汽车上的净力与加速度成正比。

    然后你能做的就是在每一秒,问你自己一个问题:“在这个精确的时刻,我需要什么加速度,才能在已知的位置和速度到达下一个已知的点?”也就是说:如果我沿着从时间t开始的加速度矢量平稳地加速,那会是什么矢量使我在时间t+1到达已知的位置和平均速度?

    一旦你知道了,你就可以 插值 速度矢量 之间 秒,你会发现曲线更平滑。然后对 位置 以同样的方式。

    因为 混蛋 ;也就是说, 加速度瞬时变化 ,人类认为这是一种剧烈的运动。就像有人在车里把地板弄平,或者突然转弯。

    提出动议 真的? 平滑你需要更进一步做同样的技巧 加快 是的。找出 为了在下一秒达到我的目标位置、速度和加速度,我需要在每秒钟做什么样的急转弯 是的。

    然后你可以插值位置,速度和加速度之间的秒,得到一个很好的平滑运动。

    这不是从一系列点获得平滑运动的唯一方法,但这是角色塑造的方法。 你能想出其他方法来解决这个问题吗 是吗?

    (另外,我注意到,这个问题在任何维度上都没有明显的困难。您可以考虑先解决一维运动的问题,然后将您的解决方案扩展到二维运动。)

    让我们看一些数字,然后我们只看x的数字。

    我们知道在前几秒,位置是-1.5,然后在下一秒,位置是-4.5。所以平均速度和加速度暂时为零,然后平均速度为-3秒。因此加速度为0到-3,相差-3,所以我们每秒加速了-3米。

    现在让我们考虑一下。

    假设你停下来了,你不断地施加一个力,使你以每秒3米的速度加速。很明显,一秒钟后你将以每秒3米的速度前进。但是 你会在哪里 是吗?如果你 瞬间 从零到-3米/秒,然后你会在-3米后秒,但我们不再建模速度为瞬时!你离出发位置只有-1.5,而不是-3。

    实际的 平均的 你需要的加速度是-6。平均加速度为-6秒,从现在开始你的速度为-6秒,但是 你从零开始 ,所以 平均的 那一秒的速度是,我们想要的,-3。一秒钟之内从-1.5到-4.5,这就是你想要的。

    那么,在958.5点的位置和速度是多少,假设恒定加速度为-6 m/s/s,从速度0开始?如我们所料,速度是-3,平均值应该在一半左右。位置变化是 a Δt 2个 / 2 (你明白为什么吗?)所以这是-6*0.5*0.5/2,也就是-0.75,这一秒我们要去的-3的四分之一。再说一次,这应该是有道理的:我们要搬家了 更慢的 上下半场比下半场好,所以我们应该 不到一半 在上半场。

    现在做同样的事,但为了混蛋。如果你那样做,你会发现你的动作确实非常流畅。

    我希望这一切都有意义。一本好的物理入门书在这里可能会有很大的帮助。