You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于角度、速度与起始点的位置计算问题求助

问题根源与解决方案

哈哈,这个问题我之前帮好几个开发者排查过!核心问题很简单——你用错了三角函数的参数单位!

关键错误点

绝大多数编程语言里的cos()和sin()函数,要求传入的参数是弧度(Radian),但你直接传入了角度(Degree)。这就导致计算完全偏离预期:

  • 当你传入90度时,函数会把它当成90弧度来计算。90弧度换算成角度大概是5156度,对应的cos(90)≈-0.448,sin(90)≈0.894。这样X方向会加上10*(-0.448)≈-4.5,Y方向加上10*0.894≈8.9,结果自然是斜向移动,和你看到的情况完全吻合。

修复步骤

你需要先把角度转换成弧度,转换公式是:

弧度 = 角度 * π / 180

修改你的代码,先做单位转换再计算:

var
  radian: Double;
begin
  radian := direction * Pi / 180;
  self.px.X := round(self.px.X + self.speed * cos(radian));
  self.px.Y := round(self.px.Y + self.speed * sin(radian));
end;

验证预期结果

当方向为90度时,转换成弧度是π/2:

  • cos(π/2) = 0,所以X坐标保持不变
  • sin(π/2) = 1,所以Y坐标增加10(你的速度值)
    这样点就会垂直向下移动(因为你的坐标系原点在屏幕左上角,Y值增大是向下),完全符合你的预期。

另外提醒一句:如果你的方向定义是“向上为90度”,可能需要调整Y方向的符号(比如改成-self.speed * sin(radian)),但先解决弧度转换的问题,再根据实际坐标系微调即可。

内容的提问来源于stack exchange,提问作者nico

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 19:53:13