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

この2つを合わせると

angle = speed*deltaTime/radius

もちろん、これはラジアンになります。

本質的に、これは、半径で割るのではなく、半径を掛けていたという事実に要約されます (単位の観点から見ると、これを見つけるのに役立ちますが、それはプログラミング フォーラムの範囲外です)。

于 2012-08-31T14:23:17.370 に答える