平稳旋转转台并保持精度

本文关键字:精度 旋转 转转 | 更新日期: 2023-09-27 18:24:57

我有一个炮塔,它可以预测移动目标的位置,并发射炮弹使其相交。

它使用的方法是基于这篇文章中的检查答案(2d游戏:通过预测炮弹和单位的交叉点向移动目标开火)

并返回一个用atan2计算的浮动角度,我还添加了TwoPI来去除负片。

如果我听到炮塔像一样移动

currentAngle = MathHelper.Lerp(currentAngle, newAngle, speed)'

这意味着炮塔越靠近,所需的步数就越小,从而降低了转速,精度也随之下降。

如果我使用固定的步骤来做类似的事情

if (_angle < newAngle)
{
    _angle += fixedStep;
}
if (_angle > newAngle)
{
    _angle -= fixedStep;
}

这是一个更好的结果,但我失去了精确的精度,因为角度不能比固定步长的大小更接近。

有更好的方法做这样的事情吗?

所需的最终结果是在任何物体上平稳移动,炮塔能够在达到正确角度时从最高速度加速或减速,当突然不得不以另一种方式旋转时,还会增加一些惯性。

希望我最终能解决一些问题,但任何建议都很感激。

平稳旋转转台并保持精度

您可以通过查看是否使用固定步长"超过"角度移动来获得此精度。例如:

if (_angle < newAngle)
{
    _angle += fixedStep;
    if(_angle > targetAngle)
    {
        _angle = targetAngle;
    }
}
if (_angle > newAngle)
{
    _angle -= fixedStep;
    if(_angle < targetAngle)
    {
        _angle = targetAngle;
    }
}

当然,根据存储角度的方式,您可能需要修改此代码以考虑包装角度(如-1变为359)。