1

オブジェクトを回転方向に移動する正しい方法は何ですか?

今私は持っています:

    local ang = body:getAngle() * 180 / 3.14      /// get body's rotation in degrees
    local x, y = body:getPosition();      /// get current position
    ang = ang%360

    x = x + math.sin(ang) 
    y = y + math.cos(ang)

    print(ang)

    body:setPosition(x,y)

しかし、体は非常に奇妙な動きをしています。私が間違っていることはありますか?

ありがとう

4

2 に答える 2

3

ラジアン単位の角度が必要であり、x値には余弦関数を使用し、y値には正弦関数を使用します。luaでのこのための関数(テストされていない)は次のようになります:

function moveAlongAngle(body, angleInRadians, dt, speedVector)
    local x, y = body:getPosition()
    x = x + math.cos(angleInRadians) * dt * speedVector.x
    y = y + math.sin(angleInRadians) * dt * speedVector.y
    body:setPosition(x,y)
end

これは、角度を極座標からデカルト座標に変換するためです:http: //en.wikipedia.org/wiki/Polar_coordinate_system#Converting_between_polar_and_Cartesian_coordinates

于 2013-01-21T12:54:17.427 に答える
0

ラジアンと度を混合しています。最初に角度をラジアンに変換しますが、その後、モジュロを使用して度を正規化しようとします。sin と cos は周期関数なので、正規化する必要はありません。

math.sin と math.cos は、実際には度ではなくラジアンで角度を想定しているため、180 で割って pi を掛ける必要があります。

これはもちろん、初期変数 ang が度単位であると仮定しています。

于 2013-01-21T12:31:40.837 に答える