所以,我试图在 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 不会改变)。
如果您想知道;我创建了“模”函数只是因为“模”运算符中使用的除数运算符舍入为 0,而不是向下舍入(因此负数不起作用)。
编辑:我注意到,当远离另一个点(反之亦然)时,返回的值(角度)会GetPointAngle()
增加,即使 TPoint ( ) 沿第二个 TPoint ( ) 的 X 轴拖动。p
c
p
c
编辑:
你们已经超越了自己,我查看了大部分答案,似乎很难选择最佳答案!既然你们都写得这么详细,我会用同样的细节来处理所有的事情:-)
另外:我在最初的帖子中没有分享的是,我的函数被导出为一个 DLL,可以从另一个 pascal 解释器(与 delphi 兼容)访问。
最后的解决方案(更改):
GetPointAngle(P1, P2: TPoint)
至:GetPointAngle(const P1, P2: TPoint)
^我不明白声明常量的必要性...