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度