问题描述
虽然我已经在互联网上阅读了很多有关它的文章,但是我无法解决我的问题。
有一个2D平面图,其中x,y是屏幕的左上角。 我有一个点可以知道x,y的位置,方向(0到360度)和速度(以像素为单位,每步)。
根据我所阅读的内容,如果我想在一步之后计算该点的下一个位置,我将使用以下代码:
self.px.X := round(self.px.X + self.speed * cos(direction));
self.px.Y := round(self.px.Y + Self.speed * sin(direction));
出于测试目的,我使用10的速度值和90的方向。 通常,该点应该水平移动(甚至可以垂直移动),但是它以对角线移动,甚至不是45°。
有人知道我在做什么错吗?
解决方法
正如Andreas Rejbrand所说(但我不知道如何将评论变成答案,对不起Andreas),解决方案是通过简单地调用degToRad函数来使用弧度数:
self.px.X := round(self.px.X + self.speed * cos(DegToRad(direction)));
self.px.Y := round(self.px.Y + Self.speed * sin(DegToRad(direction)));