JavaScript/Math/atan2
< JavaScript | Math
Math.atan2(y, x) は、引数 y と x の逆正接(アークタンジェント)を返します。これは、点 (x, y) の偏角(角度)をラジアン単位で返します[1]。
- 引数
yとxがNaNの場合、NaNを返します。 - 引数
yが+0かつxが正の場合、+0を返します。 - 引数
yが-0かつxが正の場合、-0を返します。 - 引数
yが+0かつxが負の場合、πを返します。 - 引数
yが-0かつxが負の場合、-πを返します。 - 引数
yが正かつxが+0または-0の場合、π/2を返します。 - 引数
yが負かつxが+0または-0の場合、-π/2を返します。 - 引数
yがInfinityかつxがInfinityの場合、π/4を返します。 - 引数
yがInfinityかつxが-Infinityの場合、3π/4を返します。 - 引数
yが-InfinityかつxがInfinityの場合、-π/4を返します。 - 引数
yが-Infinityかつxが-Infinityの場合、-3π/4を返します。
例
編集偏角を計算するプログラム
編集以下のプログラムは、ユーザーが入力した点 (x, y) の偏角を計算します。
const f = p => { for (;;) { a = prompt(`${p}は何ですか?`); if (!isNaN(a)) return a; alert(`${p}に、入力ミスがあります。 "${a}"`); } } for (;;) { const x = f("x座標"); const y = f("y座標"); const atan2 = Math.atan2(y, x); if (!isNaN(atan2)) { alert(`点 (${x}, ${y}) の偏角は ${atan2.toFixed(3)} ラジアンです。`); break; } alert("入力が大きすぎます。"); }
このプログラムでは、Math.atan2 を使用して点 (x, y) の偏角を計算しています。ユーザーが入力した値が NaN や Infinity の場合、適切に処理されます。
偏角を利用した方向の計算
編集以下のプログラムは、2点間の方向を計算します。
const f = p => { for (;;) { a = prompt(`${p}は何ですか?`); if (!isNaN(a)) return a; alert(`${p}に、入力ミスがあります。 "${a}"`); } } for (;;) { const x1 = f("点1のx座標"); const y1 = f("点1のy座標"); const x2 = f("点2のx座標"); const y2 = f("点2のy座標"); const dx = x2 - x1; const dy = y2 - y1; const angle = Math.atan2(dy, dx); if (!isNaN(angle)) { alert(`点1 (${x1}, ${y1}) から 点2 (${x2}, ${y2}) への方向は ${angle.toFixed(3)} ラジアンです。`); break; } alert("入力が大きすぎます。"); }
このプログラムでは、Math.atan2 を使用して2点間の方向を計算しています。dx と dy は、点1から点2へのベクトルの成分です。
注意点
編集- 象限の考慮:
Math.atan2は、xとyの符号を考慮して、正しい象限の角度を返します。これは、Math.atan(y / x)では得られない利点です。 - 戻り値の範囲:
Math.atan2の戻り値は、-πからπの範囲です。 - 精度: 浮動小数点演算の特性上、
Math.atan2の結果には微小な誤差が含まれることがあります。
脚註
編集- ^ これは、数学的には
atan2(y, x) = atan(y / x)ですが、xが0の場合や象限を考慮する点で異なります。
外部リンク
編集