Cライブラリ関数 -atan2()
説明
atan2()は C 標準ライブラリ<math.h>の中の関数で、2つのパラメータの逆正接を計算します。これらの2つのパラメータは、点の y 座標と x 座標を表します。atan2()この関数は、x軸から点 (x, y) までの角度をラジアン単位で返します。この関数は、単独で使用するatan()関数よりも強力です。なぜなら、x と y の符号を考慮するため、正しい象限を決定できるからです。
宣言
以下は atan2() 関数の宣言です。
#include <math.h> double atan2(double y, double x); float atan2f(float y, float x); long double atan2l(long double y, long double x);
パラメータ
- x-- x 軸座標を表す浮動小数点値。
- y-- y 軸座標を表す浮動小数点値。
戻り値
- 点 (x, y) の逆正接値をラジアン単位で返します。戻り値の範囲は [-π, π] です。
例
以下の例は、atan2() 関数の使い方を示しています。
例
#include <stdio.h>
#include <math.h>
#define PI 3.14159265
int main ()
{
double x, y, ret, val;
x = -7.0;
y = 7.0;
val = 180.0 / PI;
ret = atan2 (y,x) * val;
printf("x = %lf, y = %lf の逆正接", x, y);
printf("は %lf 度\n", ret);
return(0);
}
#include <math.h>
#define PI 3.14159265
int main ()
{
double x, y, ret, val;
x = -7.0;
y = 7.0;
val = 180.0 / PI;
ret = atan2 (y,x) * val;
printf("x = %lf, y = %lf の逆正接", x, y);
printf("は %lf 度\n", ret);
return(0);
}
atan2(y, x)y / x の逆正接を計算し、y と x の符号を考慮して、角度の正しい象限を決定します。- 結果はラジアンで表され、範囲は [-π, π] です。
- ラジアンの結果を
180 / π掛けることで、度数に変換できます。
上記のプログラムをコンパイルして実行してみましょう。次の結果が得られます。
x = -7.000000, y = 7.000000 的反正切是 135.000000 度
象限の決定
次の例は、atan2() を使用して点が存在する象限を決定する方法を示しています。
例
#include <stdio.h>
#include <math.h>
void print_quadrant(double y, double x) {
double angle = atan2(y, x);
printf("Point (%f, %f) is in quadrant: ", x, y);
if (angle > 0 && angle < M_PI / 2) {
printf("I\n");
} else if (angle > M_PI / 2 && angle < M_PI) {
printf("II\n");
} else if (angle < 0 && angle > -M_PI / 2) {
printf("IV\n");
} else {
printf("III\n");
}
}
int main() {
print_quadrant(1.0, 1.0); // I
print_quadrant(1.0, -1.0); // II
print_quadrant(-1.0, -1.0); // III
print_quadrant(-1.0, 1.0); // IV
return 0;
}
#include <math.h>
void print_quadrant(double y, double x) {
double angle = atan2(y, x);
printf("Point (%f, %f) is in quadrant: ", x, y);
if (angle > 0 && angle < M_PI / 2) {
printf("I\n");
} else if (angle > M_PI / 2 && angle < M_PI) {
printf("II\n");
} else if (angle < 0 && angle > -M_PI / 2) {
printf("IV\n");
} else {
printf("III\n");
}
}
int main() {
print_quadrant(1.0, 1.0); // I
print_quadrant(1.0, -1.0); // II
print_quadrant(-1.0, -1.0); // III
print_quadrant(-1.0, 1.0); // IV
return 0;
}
コードの解説:
- 関数
print_quadrant()は y と x のパラメータを受け取り、それらの逆正接を計算し、結果に基づいて点が存在する象限を決定します。 - コード内で
atan2(y, x)逆正接を計算し、角度の範囲に基づいて象限を決定します。
上記のプログラムをコンパイルして実行してみましょう。次の結果が得られます。
Point (1.000000, 1.000000) is in quadrant: I Point (-1.000000, 1.000000) is in quadrant: II Point (-1.000000, -1.000000) is in quadrant: III Point (1.000000, -1.000000) is in quadrant: IV
エラー処理
atan2()すべての実数入力に対して有効であるため、追加のエラー処理は必要ありません。- 関数は設定せず
errno、NaN も返しません。
まとめ
atan2()関数は点 (x, y) の逆正接を計算するために使用され、2次元平面上の角度計算を処理する強力なツールです。それと比較すると、atan()それはすべての象限の角度を正しく処理し、正確な結果を返します。atan2()コードを簡素化し、正確性を向上させることができます。
C標準ライブラリ - <math.h>