【发布时间】:2013-08-17 06:30:27
【问题描述】:
所以,我试图在 Delphi 中获得两个 TPoints 之间的角度,结果比我预期的要难。我得到的结果我无法解释(似乎是“度数”部分的一些问题,或者 ArcTan2 没有以我预期的形式返回一个总和。 - Delpi-v7:
function Modulo(x,y:Extended): Extended;
var d: Extended;
begin
d := x / y;
Result := (d - floor(d)) * y;
end;
function Degrees(Rads: Extended): Extended;
begin
Result := Rads*(180/Pi);
end;
function GetPointAngle(P1, P2: TPoint): Extended;
begin
Result := Modulo(Degrees(ArcTan2(-(P1.Y - P2.Y), P1.X - P2.X)) - 90, 360);
end;
然而,当我将代码移植到 Python 或在另一个 Pascal 变体中测试它时,上述 工作。但现在,它似乎返回了一个静态的总和(如果我“移动”第二个 TPoint,则不会改变)。
如果您想知道;我创建“模”函数只是因为“mod”运算符中使用的除法运算符舍入为 0,而不是向下舍入(因此负数不起作用)。
编辑:我注意到当p 远离另一点c(反之亦然)时,从GetPointAngle() 返回的值(角度)会增加,即使TPoint (p) 被拖动沿第二个 TPoint (c) 的 X 轴。
编辑:
你们已经超越了自己,我看了大部分答案,似乎很难选择最佳答案!既然你们写的都很详细,我会用同样的细节来处理所有的事情:-)
另外:我在最初的帖子中没有分享的是,我的函数被导出为 DLL,以便从另一个 pascal 解释器(与 delphi 兼容)访问。
最终解决方案(已更改):
GetPointAngle(P1, P2: TPoint) 收件人:GetPointAngle(const P1, P2: TPoint)
^ 我不明白声明常量的必要性......
【问题讨论】:
-
“两点之间的角度”是什么意思?您是指两个向量之间的角度吗?
-
没有“两点之间的角度”这样的东西
-
我的错误,在一组坐标之间。
-
两点之间没有夹角。您需要两条线来定义一个角度。我猜你想要垂直线和两点之间的线之间的角度。如我回答的第二部分所述。
-
除非两点之间的距离真的很大,否则没有必要使用
Extended。此外,Extended是 Delphi 特定的值类型,考虑到您从 DLL 导出此例程,我强烈建议使用Double。