首页 > 解决方案 > 根据角度、速度和起始位置计算位置

问题描述

尽管我在互联网上阅读了很多关于它的文章,但我无法解决我的问题。

有一个 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°。

任何人都知道我做错了什么?

标签: delphimathangle

解决方案


正如 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)));

推荐阅读