関数 逆三角関数x-y座標のアークタンジェントを返しますAtan2無使用

※より実装に近く表示させる為、コードの改行を避けています。スマホ等で閲覧される際は向きを変えてご覧ください。

※実装するバージョンによってはバージョンアップの仕様により動作しないコードもあります。実装には動作確認の上ご使用下さい。

Option Explicit


Function Atan2VBversion(x As Double, y As DoubleAs Double
'**********************************************************
'逆三角関数x-y座標のアークタンジェントを返しますAtan2無使用
'**********************************************************
'戻り値の角度は度
'引数x:x座標を指定
'引数y:y座標を指定
'※エクセルWorksheetFunctionAtan2無使用

    Dim vPI As Double, At2 As Double
    vPI = 4 * Atn(1) '円周率(π)
    If x > 0 Then
        At2 = Atn(y / x)
    ElseIf x < 0 Then
        At2 = Sgn(y) * (vPI - Atn(Abs(y / x)))
    ElseIf y = 0 Then
        At2 = 0
    Else
        At2 = Sgn(y) * vPI / 2
    End If
    '====================================
    'ラジアン値が必要な場合は削除       |
    'ラジアンからディグリー(角度)を求る |
    At2 = (180 / vPI) * At2 '           |
    '====================================
    Atan2VBversion = At2

End Function


Function Atan2XLSversion(x As Double, y As DoubleAs Double
'**********************************************************
'逆三角関数x-y座標のアークタンジェントを返します
'**********************************************************
'戻り値の角度は度
'引数x:x座標を指定
'引数y:y座標を指定
'※エクセルWorksheetFunctionAtan2使用

    Dim At2 As Double

    At2 = Application.WorksheetFunction.Atan2(x, y)

    '====================================================
    'ラジアン値が必要な場合は削除                       |
    'ラジアンからディグリー(角度)を求る                 |
    At2 = Application.WorksheetFunction.Degrees(At2) '  |
    '====================================================
    Atan2XLSversion = At2

End Function


Private Sub test()
    Debug.Print Atan2VBversion(10, 15)
    Debug.Print Atan2XLSversion(10, 15)
' 56.3099324740202
' 56.3099324740202

End Sub

Atan2

  • ワークシート関数
  • 指定された x-y 座標のアークタンジェントを返します。
  • アークタンジェントとは、x 軸から、原点 0 と x座標、y座標 で表される点を結んだ直線までの角度のことです。
  • 戻り値の角度は、-PI ~ PI (ただし -PI を除く) の範囲のラジアンとなります。
  • 書式
  • ATAN2(x座標, y座標)
  • x座標 点の x 座標を指定します。
  • y座標 点の y 座標を指定します。
  • 解説
  • 戻り値が正の数なら x 軸から反時計回りの角度を表し、負の数なら x 軸から時計回りの角度を表します。
  • ATAN2(a,b) = ATAN(b/a) という関係になりますが、ATAN2 関数では、a に 0 を指定することができます。
  • x座標 と y座標 が両方とも 0 である場合、エラー値 #DIV/0 が返されます。
  • アークタンジェントの値を度で表すには、計算結果に 180/PI() を掛けます。
  • 使用例
  • ATAN2(1, 1) = 0.785398 (PI/4 ラジアン)
  • ATAN2(-1, -1) = -2.35619 (-3*PI/4 ラジアン)
  • ATAN2(-1, -1)*180/PI() = -135 (度)

Atn 関数

  • 指定した数値のアークタンジェントを倍精度浮動小数点数型 (Double) で返します。
  • 構文
  • Atn (Number)
  • 引数 number は必ず指定します。引数 number には、倍精度浮動小数点数型 (Double) の数値または任意の数式を指定します。
  • 解説
  • Atn 関数は、直角三角形の 2 辺の比を引数 (number) として受け取り、対応する角度を返します。
  • ここでいう 2 辺とは、直角をはさむ 2 つの辺を指します。
  • 2 辺の比は、求める角の反対側の辺 (対辺) の長さをもう一方の辺 (底辺、つまり求める角に隣接する側の辺) の長さで割った値です。
  • 戻り値は、-π/2 ~π/2 の範囲の値 (単位はラジアン) になります。
  • 角度の単位を度からラジアンに変換するには、度にπ/180 を掛けます。ラジアンから度に変換するには、ラジアンに 180/πを掛けます。
  • メモ
  • Atn 関数は Tan 関数の逆三角関数です。
  • Tan 関数は、引数として角度を受け取り、その角度を含む直角三角形の直角をはさむ 2 辺の比を返します。
  • Atn 関数と、タンジェントの逆数であるコタンジェント (1/タンジェント) の違いに気を付けてください。

Sgn 関数

  • 引数に指定した値の符号をバリアント型 (内部処理形式 Integer の Variant) の値で返す数値演算関数です。
  • 構文
  • Sgn(number)
  • 引数
  • number は必ず指定します。引数 number には、任意の数式を指定します。
  • 戻り値
  • number の値 戻り値
  • number > 0 1
  • number = 0 0
  • number < 0 -1
  • 解説
  • 引数 number の符号により、Sgn 関数の戻り値が決まります。
  • はてなブックマークに追加

 

2016年10月01日|[VBサンプルコード]:[関数]