오늘 다뤄 볼 주제 는 2 차원 공간 상 에 존재 하 는 세 개 의 점 들 을 이어주 는 원 을 구하 고 이 를 그려 보 는 작업 입니다 . XY 축 으로 이루어진 공간 상 에 세 개 의 점 ( Point ) 들 이 있 는 경우 , 궤적 이 이 세 점 을 모두 거쳐가 는 원 은 기하학 적 으로 반드시 존재 하 게 되 어 있 습니다 . 예 를 들 어 다음 과 같 은 X , Y 좌표 를 갖 는 세 개 의 점 들 이 있 다고 합시다 . 일단 이 좌표 들 을 이용 해서 그림 을 그려서 이 점 들 의 분포 양상 을 볼 수 있 는데 , 다음 과 같 은 예제 코드 를 실행 하 면 됩니다 . x = [ 2 . 8 , 7 . 1 , 5 . 9 ] y = [ 6 . 2 , 4 . 4 , 8 . 3 ] win = WINDOW ( DIMENSIONS =[ 500 , 400 ] ) pl = SCATTERPLOT ( x , y , SYMBOL =' circle ', / SYM _ FILLED , $ XRANGE =[ 0 , 10 ] , YRANGE =[ 0 , 10 ] , / CURRENT ) 여기 서 는 SCATTERPLOT 이 라는 NG 체계 의 그래픽 함수 를 사용 하 였 습니다 . 물론 그냥 PLOT 함수 를 사용 해도 이러 한 그림 은 충분히 그릴 수 있 습니다 . 만약 PLOT 함수 를 사용 할 경우 에 는 LINESTYLE 속성 을 6 으로 설정 함 으로써 점 들 간 의 선 이 그려지 지 않 게 만 해 주 면 됩니다 . 어쨌든 이렇게 그려진 그림 은 다음 과 같 습니다 . 이제 이 세 점 들 을 이어주 는 원 을 구할 차례 인데요 . IDL 에서 는 이러 한 역할 을 수행 하 는 CIR _ 3 PNT 라는 프로시저 가 있 어서 이것 을 사용 하 면 됩니다 . 이 프로시저 는 세 점 을 거치 는 원 의 반경 및 중심 좌표 를 계산 해 주 는 역할 을 합니다 . 다음 과 같 은 방식 으로 사용 하 면 됩니다 . 이 때 세 점 의 X 및 Y 좌표 값 배열 인 x , y 가 입력 인자 로 사용 되 어야 하 고 , 그 뒤 에 붙 는 r , xc , yc 라는 변수 를 통해서 반경 및 중심 좌표 값 들 을 돌려받 는 방식 입니다 . CIR _ 3 PNT , x , y , r , xc , ycPRINT , r , xc , yc 일단 이렇게 돌려받 은 중심 좌표 값 을 사용 해서 원 의 중심 을 먼저 표시 해 봅시다 . 이 를 위하 여 다음 과 같이 SYMBOL 함수 를 하 였 습니다 . 이렇게 하 면 다음 그림 과 같이 중심점 이 진홍색 심볼 로 표시 됩니다 . cp = SYMBOL ( xc , yc , ' circle ', / SYM _ FILLED , SYM _ COLOR =' crimson ', / DATA ) 이번 에 는 원 의 궤적 을 그려볼 차례 입니다 . 원 의 궤적 을 그리 기 위해서 는 NG 체계 의 그래픽 함수 인 ELLIPSE 를 사용 하 는 방법 도 있 겠 지만 , 저 는 그냥 아주 원론 적 인 방법 을 사용 해 보 기 로 하 겠 습니다 . 즉 , 원 의 궤적 을 이루 는 점 들 의 좌표 를 구하 고 이 를 POLYLINE 함수 에 사용 하 여 직접 선 을 그리 는 방법 을 사용 하 고자 합니다 . 이 를 위하 여 , 다음 과 같이 원 의 중심 에 대하 여 0 ~ 360 도 범위 의 1 도 간격 의 각도 별 로 궤적 상 의 점 들 의 좌표 를 구하 고 이 를 POLYLINE 함수 에 투입 하 는 방법 을 사용 하 였 습니다 . 그 결과 는 다음 그림 과 같 습니다 . degs = FINDGEN ( 361 ) cxp = xc + r * COS ( degs *! DTOR ) cyp = yc + r * SIN ( degs *! DTOR ) cc = POLYLINE ( cxp , cyp , COLOR =' forest green ', THICK = 2 , / DATA ) 물론 이 그림 상 에서 보 면 원형 이 진정한 원 ( Circle ) 의 형태 가 아닌 것 처럼 보이 긴 합니다 . 그것 은 원 이 그려진 좌표계 의 가로 / 세로 비율 이 그래픽 창 의 크기 에 맞춰진 상태 이 기 때문 입니다 . 이 때문 에 마치 형태 가 왜곡 된 것 처럼 보이 는군요 . 만약 이러 한 왜곡 없이 진정 한 원형 의 모습 으로 나타내 려면 , X 축 및 Y 축 의 스케일 이 서로 일치 해야 합니다 . 이렇게 하 려면 다음 과 같이 ASPECT _ RATIO 라는 속성 의 값 을 1 로 처리 함 으로써 , 바탕 이 되 는 플롯 의 XY 스케일 을 서로 일치 시켜 주 면 됩니다 . 그 결과 는 다음 그림 과 같 습니다 . pl . ASPECT _ RATIO = 1 물론 이 와 같이 XY 축 의 스케일 을 서로 일치 시켜 놓 으면 , 그래픽 창 의 가로 / 세로 스케일 과 맞 지 않 는 경우 가 생길 수 있 다는 점 은 감안 해야 합니다 . 이러 한 문제 는 그래픽 창 의 가로 / 세로 크기 도 조절 하 거나 X , Y 축 의 범위 를 적절히 조정 해 주 는 방식 으로 충분히 해결 이 가능 합니다 . 이 와 같이 CIR _ 3 PNT 를 활용 하 면 세 개 의 점 들 을 이어주 는 원 의 궤적 에 관한 기하학 적 정보 들 을 얻 을 수 있 습니다 . 만약 에 점 들 의 갯 수 가 세 개 가 아닌 그 이상 이 되 면 어떻게 될까요 ? 그 경우 에 는 모든 점 들 을 완벽 하 게 이어주 는 원 을 찾 는 것 이 어려울 수 도 있 습니다 . 물론 완벽 하 게 이어주 는 것 이 아니 라 가장 그럴싸한 원 을 찾 는 것 은 가능 할 수 도 있 겠 지요 . 이 문제 는 나중 에 기회 가 되 면 다뤄 보 기 로 하 겠 습니다 . 그리고 차원 이 하나 더 확장 된 버전 도 있 습니다 . 즉 , 3 차원 공간 상 에서 기하학 적 으로 네 개 의 점 들 을 반드시 거쳐가 는 구체 ( Sphere ) 에 대한 정보 를 전달 해 주 는 SPH _ 4 PNT 라는 프로시저 도 있 다는 점 참조 해 두 시 면 좋 을 것 같 습니다 .