如何沿旋转方向移动物体?

时间:2013-01-21 11:10:26

标签: java android language-agnostic lua

我想问一下在物体旋转方向上移动物体的正确方法是什么?

现在我有:

    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)

然而身体移动非常奇怪。我有什么想法吗?

由于

2 个答案:

答案 0 :(得分:2)

您需要以弧度为单位的角度,并使用余弦函数作为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

答案 1 :(得分:0)

你正在混合弧度和度数。首先,您将角度转换为弧度,但之后您尝试使用模数对度数进行标准化。你不需要规范化,因为sin和cos是周期函数。

math.sin和math.cos实际上是以弧度而不是以度为单位的角度,所以你需要偏离180并乘以pi。

这当然假设你的初始变量ang是度数。