VB6・VBAメモ:逆余弦(アークコサイン)

Cos関数の逆関数となる逆余弦(アークコサイン)を取得する関数が
VB6・VBAには存在しないようなので自作してみました。(あまり用途はない気もしますが)
(.NETやExcel関数には存在するようです)

作りとしては余弦(コサイン)から各辺の値を仮定し、
仮定した各辺の値から正接(タンジェント)を計算し、Atn関数でラジアンを取得しています。
出力結果は.NETのMath.Acosメソッドに合わせました。(なるべく)
0〜180度の範囲のラジアンを返します。


概要

ACos(Number As Double) As Double
機能 指定した余弦(コサイン)からラジアンを返す
引数 Number 指定値 Double型
戻り値 計算結果 Double型
サンプルコード
'機能:逆余弦関数
'引数:Number:余弦(コサイン)
'戻値:ラジアン
Function ACos(Number As Double) As Double
    Dim Z As Double
    Dim Y As Double
    Dim X As Double
    
    
    '辺Zに仮定値を与えて辺Xと辺Yの値を算出
    Z = 1
    X = Z * Number
    Y = Sqr(Z ^ 2 - X ^ 2)
    

    'ラジアンを取得
    Select Case Number
    Case 1
        '余弦= 0の場合は  0度
        ACos = (PI / 2) * 0
    Case 0
        '余弦= 1の場合は 90度
        ACos = (PI / 2) * 1
    Case -1
        '余弦=-1の場合は180度
        ACos = (PI / 2) * 2
    Case Is < 0
        '余弦< 0の場合はBとCの正接のラジアン+180度
        ACos = Atn(Y / X) + (PI / 2) * 2
    Case Else
        'YとXの正接(tanθ=Y/X)からラジアンを取得
        ACos = Atn(Y / X)
    End Select
End Function


三角関数を使用する前に

説明 記述例
円周率を求める関数
※円周率=アークタンジェント(1)×4
Function PI() As Double
    PI = Atn(1) * 4
End Function
角度からラジアンを求める関数
※ラジアン=角度*(円周率/180)
Function GetRadian(ByVal angle As Double) As Double
    GetRadian = angle * (PI / 180)
End Function
ラジアンから角度を求める関数
※角度=ラジアン/(円周率/180)
Function GetAngle(ByVal radian As Double) As Double
    GetAngle = radian / (PI / 180)
End Function


使用例

説明 記述例 出力
余弦から角度θを取得
(余弦=0.5の場合)
Dim rad As Double, θ As Double

rad = ACos(0.5)
θ = GetAngle(rad)

Debug.Print θ
60
角度θ1から余弦を取得し
余弦から角度θ2を取得
(θ1=60の場合)
※θ1=θ2になるはず
Dim rad1 As Double, θ1 As Double
Dim rad2 As Double, θ2 As Double
Dim num As Double

θ1 = 60
rad1 = GetRadian(θ1)
num = Cos(rad1)

rad2 = ACos(num)
θ2 = GetAngle(rad2)

Debug.Print θ2
60


コメント
コメントする








    
この記事のトラックバックURL
トラックバック