Java 如何沿对象所在的方向移动对象';是旋转的吗?

Java 如何沿对象所在的方向移动对象';是旋转的吗?,java,android,language-agnostic,lua,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.c

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

现在我有:

    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)
然而,身体的运动非常奇怪。知道我做错了什么吗


谢谢

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

math.sin和math.cos实际上期望角度以弧度为单位,而不是以度为单位,因此需要除以180再乘以π


当然,这是假设初始变量ang以度为单位。

需要以弧度为单位的角度,并对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

这是因为您将角度从极坐标转换为笛卡尔坐标:

为什么将其标记为Java、Actionscript和Lua?因为我猜这一原理在所有这些语言中都是类似的。然后将其标记为语言不可知或类似的。>>>>首先将角度转换为弧度,不是真的。我以弧度为单位,然后尝试将它们转换为*180/3.14度