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

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

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


概要

ASin(Number As Double) As Double
機能 指定した正弦(サイン)からラジアンを返す
引数 Number 指定値 Double型
戻り値 計算結果 Double型
サンプルコード
'機能:逆正弦関数
'引数:Number:正弦(サイン)
'戻値:ラジアン
Function ASin(Number As Double) As Double
    Dim X As Double
    Dim Y As Double
    Dim Z As Double
    
    
    '辺Zに仮定値を与えて辺Xと辺Yの値を算出
    Z = 1
    Y = Z * Number
    X = Sqr(Z ^ 2 - Y ^ 2)
    
    
    'ラジアンを取得
    Select Case Number
    Case -1
        '正弦=-1の場合は-90度
        ASin = (PI / 2) * -1
    Case 1
        '正弦= 1の場合は 90度
        ASin = (PI / 2) * 1
    Case Else
        'YとXの正接(tanθ=Y / X)からラジアンを取得
        ASin = 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 = ASin(0.5)
θ = GetAngle(rad)

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

θ1 = 30
rad1 = GetRadian(θ1)
num = Sin(rad1)

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

Debug.Print θ2
30


コメント
コメントする








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