0

我在某个位置画了一个圆圈。我可以将速度设置为 10f 很好地移动它,但是当它开始转圈时它变得非常快。它显然没有以(单位/秒)移动,我不确定发生了什么。我认为archSpeed需要采用弧度或其他方式,这会减慢速度 - 但仍然不正确。这是我基于的圆弧方程:

s = r * theta

以下是我正在使用的功能:

private void moveOut(double deltaTime)
{
    SetPosition(x += direction * speed * deltaTime, y, 0);

    if (x - (direction * GetWidth() / 2f) >= centerX + radius + GetWidth() / 2f)
    {
        //onOutside = true;
    }

    Log.d(TAG, "moving out");
}

private void circleCenter(double deltaTime)
{
    float angleSpeed = (float) (radius * (speed * Math.PI / 180) * deltaTime);
    currentAngle += angleSpeed;

    if (currentAngle >= 2 * Math.PI)
    {
        currentAngle = (float) (2 * Math.PI - currentAngle);
    }

    SetPosition(centerX + radius * FloatMath.cos(currentAngle), centerY + radius * FloatMath.sin(currentAngle), 0);
}
4

1 回答 1

1

你的angleSpeed公式看起来不对。

我会先说我在那段时间旅行的距离是多少。你已经知道的答案是speed*deltaTime。现在你有一个距离,你可以通过使用弧形论坛来计算角度arclength = radius*angle。所以angle = arclength/radius

把这两个放在一起得到

angle = speed*deltaTime/radius

当然,这将以弧度为单位。

从本质上讲,这归结为您乘以半径而不是除以它的事实(以单位来查看它会有助于发现这一点,但这超出了编程论坛的范围)。

于 2012-08-31T14:23:17.370 回答