極角(polar angle)から方位角(azimuth angle)、もしくはその逆を計算する方法です。極角と方位角は 1つの式で求めることができます。
- 元の値を負にして90を加算し、さらに360を加算
- その値を360で除算した剰余が極角/方位角を相互変換した値
この方法で角度が0度未満や360度より大でも 0 =< result < 360 の値を返すことができます。極角・方位角についてはこちらの記事をご覧ください。
result = (90 - value + 360) % 360
result = (90 - value + 360) % 360 'もしくは result = (90 - value + 360) Mod 360
'角度の相互変換 'esriDirectionType ' esriDTNorthAzimuth :北方位角(北から時計回りの角度) ' esriDTSouthAzimuth :南方位角(南から時計回りの角度) ' esriDTPolar :極座標角(東から反時計回りの角度) ' esriDTQuadrantBearing :四分円方位角(指定した四方位から指定方位に向いた角度[eg,S 45 E]) Private Function GetAzimuthalToGeneral(ByVal Value As Variant, _ Optional ByVal InputType As esriDirectionType = esriDTNorthAzimuth, _ Optional ByVal OutputType As esriDirectionType = esriDTPolar, _ Optional ByVal Precision As Long = 0) As Variant Dim pAngularConverter As IAngularConverter Set pAngularConverter = New AngularConverter pAngularConverter.SetString Value, InputType, esriDUDecimalDegrees Select Case OutputType Case esriDTQuadrantBearing GetAzimuthalToGeneral = pAngularConverter.GetString(OutputType, esriDUDecimalDegrees, Precision) Case Else GetAzimuthalToGeneral = pAngularConverter.GetAngle(OutputType, esriDUDecimalDegrees) End Select End Function