汽车转向算法?

时间:2010-10-25 17:14:06

标签: algorithm car-analogy

我已经问了类似的东西,但现在我有一个问题需要管理并实现一个简单的2d(自上而下)赛车游戏的“逼真”转向。

如何为汽车进行“逼真”的转向? (我使用c#但欢迎另一种语言;)) 使用Sin和Cos? 如果有,怎么样? 提前谢谢!

4 个答案:

答案 0 :(得分:9)

我正在休息,所以我无法对“最佳”答案做出极大的判断,但伪代码看起来像这样:

y_change = sin(rotation) * speed;
x_change = cos(rotation) * speed;

car.x += x_change;
car.y += y_change;

你会在每一帧中执行这段代码;旋转将由您的转向输入控制,速度将由您的加速度输入控制。

答案 1 :(得分:1)

您可能希望使用其他人已创建的物理引擎。我听说过有关XNA Physics API的好消息。

我想你将不得不使用正弦和余弦,但这只是一个非常大的冰山的一角......

答案 2 :(得分:0)

算法是:

  1. 记录其他人的驾驶方式(使用开发版游戏)

  2. (可选)将录制内容拆分为各种常见情况的片段。

  3. 在游戏中重播录制内容。 (使用合适的片段并可能在它们之间插入轨迹)。

  4. 您也可以尝试模糊逻辑和简单的转向单元模型。

    模型将是:

    x = integrate horiz_velocity by t
    horiz_velocity = intergate steering_angle by t
    and steering_angle = fuzzy_steering_function(...)
    

答案 3 :(得分:0)

Brian Driscoll’s helpful answer十年前,对于非需求型应用程序,您需要了解的所有信息。我经常使用通过速度矢量进行的欧拉位置积分,该速度矢量由控制器的加速度修改。

轮式车辆的一个有趣的侧灯是它们不会围绕重心旋转。典型的汽车沿通过后轴的线绕一个点旋转,但向侧面偏移得很好。

diagram of Ackermann steering geometry

这个概念对真实的车辆很重要。他们的转向机构试图符合Ackermann steering geometry的规定,以最大程度地减少由于打滑引起的磨损。在模拟车辆中,考虑这些因素对于建模瞬时曲率和预测未来路径至关重要。