[VB6, VBA]삼각함수의 역함수(ArcSin, ArcCos) 작성

앞서 기술한 것처럼, 비주얼베이직6.0과 VBA에는 삼각함수의 역함수인 ArcSin()과 ArcCos()이 없다. 대신 Atn()만 있다.
도움말을 보면 다음과 같이 작성하라고 안내하고 있다.

이대로 하면 분모가 0이 되는 경우에 대한 대책뿐만 아니라, x가 -1<=x<=1 범위를 벗어날 경우에 대한 대책이 없다.
특히, 부동소수계산을 하다보면 정확하게 -1 또는 1이 되지 않고, -1.0000000** 또는 1.000000**가 되는 경우가 발생한다. 이에 대한 대책이 필요하다.

FYI

ArcSin, ArcCos을 작성한 이유 : 태양기하학에서는 태양의 방위각과 고도를 계산하는 과정에서 삼각함수를 많이 사용한다. 1보다 작은 값들로 사칙연산을 하다보면, 부동소수가 정상 범위를 벗어나는 경우가 생긴다. 이런 오류를 사전에 방지하기 위해서 작성하였다.

태양의 고도를 계산하는 공식은 다음과 같다.

\sin h = \sin \delta \sin L + \cos \delta  \cos L \cos H

따라서,

h = \arcsin \left( \sin \delta \sin L + \cos \delta \cos L \cos H \right)

  • h (태양의 고도) : -90° ~ +90°
  • δ (태양의 적위) : -23.5° ~ +23.5°
  • L (위도) : -90° ~ +90° (남극 ~ 북극)
  • H (시각) : -180° ~ +180° (00시는 -180°, 06시는 -90°, 12시는 0°, 18시는 +90°, 24시는 +180°)

태양 방위각 \phi 은 다음과 같은 공식으로 구한다.

\cos \phi = \frac{\sin h \sin L - \sin \delta}{\cos h \cos L}

 \phi =\arccos \left( \frac{\sin h \sin L - \sin \delta}{\cos h \cos L} \right)

Code Library 기능을 하는 DLL 만들기

Visual Basic 6.0에서 DLL만들기를 하려면, 다음과 같은 절차대로 실행한다.

1. VB에서 새 ActiveX DLL 프로젝트를 만든다

2. 프로젝트에서 클래스 모듈을 새로 만든다

3. 클래스 모듈의 Instancing 속성을 GlobalMultiUse로 설정한다. 그러면, 그 프로시저를 원하는 모든 프로젝트에 프로시저가 표시되며, 전역 프로시저처럼 실행된다.

4. 코드에서 필요한 모든 개체 라이브러리에 대해 참조를 설정한다.

5. 코드 라이브러리의 프로시저를 클래스 모듈에 Public Function 프로시저와 Sub 프로시저로 추가한다.

6. “프로젝트”메뉴의 속성을 클릭하고 Project Name속성에 대해 새 값을 입력하여 “프로젝트 이름”을 원하는 코드 라이브러리 이름으로 바꾼다.

7. DLL을 만든다. (compile)

 

DLL 사용하기

DLL에 참조를 설정하려면 “도구”메뉴의 “참조”를 클리하고 “찾아보기” 단추를 이용하여 DLL을 찾는다. 또는 declare문을 사용하여 DLL의 개별 프로시저에 대해 참조를 설정할 수도 있다.