ですから、Delphiで2つのTPoint間の角度を取得しようとしていますが、予想よりも難しいことがわかりました。私が得ている結果は説明できません(「度」の部分に問題があるようです。または、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バリアントでテストすると、上記は機能します。しかし、今では、静的な合計が返されるようです(2番目のTPointを「移動」しても変化しません)。
あなたの疑問に備えて; 「モジュロ」演算子を作成したのは、「mod」演算子で使用される除算演算子が0に丸められ、切り捨てられないためです(したがって、負の数は機能しません)。
編集:TPoint( )が2番目のTPoint()のX軸に沿ってドラッグされた場合でも、他のポイントから離れると(およびその逆に)返される値(角度)がGetPointAngle()
増加することに注意しました。p
c
p
c
編集:
皆さんは自分よりも優れています。私はほとんどの答えを調べましたが、最良の答えを選ぶのは難しいようです。そして、皆さんはそのような詳細ですべてを書いたので、私は同じ詳細ですべてを調べます:-)
また、最初の投稿で共有しなかったのは、関数がDLLとしてエクスポートされ、別のパスカルインタープリター(デルファイ互換)から到達できることです。
ついに解決策(変更):
GetPointAngle(P1, P2: TPoint)
に:GetPointAngle(const P1, P2: TPoint)
^定数を宣言する必要性がわかりません...