ホームページ >バックエンド開発 >C++ >2 点と横軸の間の角度を計算するにはどうすればよいですか?

2 点と横軸の間の角度を計算するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-14 17:47:45369ブラウズ

How to Calculate the Angle Between Two Points and the Horizontal Axis?

直線と水平軸の間の角度を計算します

直線と水平軸の間の角度を決定することは、さまざまなプログラミング シナリオで一般的なニーズです。 2 つの点 (P1x,P1y) と (P2x,P2y) が与えられた場合、目標はこの角度を計算することです。 。

まず、終点と始点の間の増分値 (差分) を決定する必要があります。

<code>deltaY = P2_y - P1_y
deltaX = P2_x - P1_x</code>

次に、逆正接関数 (arctan) を使用して角度を計算し、結果をラジアンから度に変換します。

<code>angleInDegrees = arctan(deltaY / deltaX) * 180 / PI</code>

または、プログラミング言語に atan2 関数が提供されている場合は、象限の問題を処理するよりも優先してそれを使用します。

<code>angleInDegrees = atan2(deltaY, deltaX) * 180 / PI</code>

特定の要件に応じて、角度が含まれる象限を考慮して調整する必要がある場合があります。 deltaX と deltaY の符号を考慮することで、適切な象限を決定し、それに応じて角度を調整できます。

Python サンプル コード

次の Python コードは、上記のメソッドの実装を示しています。

<code class="language-python">from math import *

def getAngleBetweenPoints(x_orig, y_orig, x_landmark, y_landmark):
    deltaY = y_landmark - y_orig
    deltaX = x_landmark - x_orig
    return degrees(atan2(deltaY, deltaX)) # 使用degrees函数直接转换为角度

angle = getAngleBetweenPoints(5, 2, 1, 4)
assert angle >= 0, "angle must be >= 0"
angle = getAngleBetweenPoints(1, 1, 2, 1)
assert angle == 0, "expecting angle to be 0"
angle = getAngleBetweenPoints(2, 1, 1, 1)
assert abs(180 - angle) < 1e-6, "expecting angle to be 180" # 使用更精确的断言
</code>

このコードには、角度計算の精度を確保するための追加のチェックが含まれています。 degrees 関数を使用してラジアンを度に直接変換し、コードを簡素化しました。 また、浮動小数点比較でのエラーを回避するために、最後のアサーションがより正確に判断されます。

以上が2 点と横軸の間の角度を計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。