IDL/New Graphics

수식(Equation)만 명시하여 Contour 및 Surface 표출하기

이상우_idl 2024. 7. 9. 14:43
728x90
반응형

NG 체계의 PLOT 함수에서 수식(Equation)만 명시하여 1차원적인 플롯(Plot)을 표출하는 방법에 관하여 바로 직전의 게시물을 통하여 소개한 바 있습니다. 이것은 결국 y = f(x) 형태의 1차원 함수에 대한 수식 자체를 PLOT 함수에 그대로 투입하는 방식이라고 볼 수 있습니다. 비슷한 맥락으로 y = f(x, y) 형태의 2차원 함수에 대한 수식만 명시하여 그림을 표출하는 것도 가능합니다. 이러한 기능은 CONTOUR 및 SURFACE 함수에서 지원됩니다. 따라서 오늘은 그 방법에 관하여 예제와 함께 살펴보기로 하겠습니다. 먼저 CONTOUR 함수에서 수식만 명시하여 2차원적인 등위선(Contour) 그림을 표출하는 예제부터 보면 그 과정은 다음과 같습니다.

 

ct = COLORTABLE(67, /REVERSE)
win = WINDOW(DIMENSIONS=[600, 600], /NO_TOOLBAR)
c = CONTOUR('(x^2+y-11)^2+(x+y^2-7)^2' , $

  XRANGE=[-5, 5], YRANGE=[-5, 5], $
  RGB_TABLE=ct, /FILL, C_VALUE=[0:800:50], $
  AXIS_STYLE=2, MARGIN=0.1, /CURRENT)
cb = COLORBAR(TARGET=c, POSITION=[0.2, 0.94, 0.8, 0.98], $

  /BORDER, TAPER=0)

 

여기서는 먼저 x, y로 구성된 2차원 함수의 수식을 마치 문자값처럼 따옴표로 감싸서 CONTOUR 함수에 직접 투입하였음을 주목해야 합니다. 그 외에는 CONTOUR 함수의 각종 설정들을 조절하여 적절한 등위선 그림이 표출되도록 하였고, 컬러테이블의 경우는 67번 컬러테이블을 뒤집어서 사용하였습니다. 표출된 결과를 보면 다음 그림과 같습니다.

 

흔히 CONTOUR 함수를 사용하여 2차원적인 등위선 그림을 표출하기 위해서는 데이터에 해당되는 2차원 배열 그리고 X축 및 Y축 방향의 격자점 좌표값들로 구성된 배열 등이 필요한 것이 정석이긴 하지만, 위와 같이 그러한 배열들이 전혀 없는 상태에서 2차원 함수의 수식만 명시하여 등위선 그림을 표출하는 것도 얼마든지 가능합니다. 그리고 2차원 데이터를 표출한다는 측면에서 유사성이 있는 SURFACE 함수의 경우도 동일한 기능을 제공합니다. 즉 SURFACE 함수에서 2차원 함수의 수식만 명시하여 서피스(Surface) 그림을 표출하는 것도 가능합니다. 그러면 위의 수식을 그대로 사용하여 서피스 그림을 표출해봅시다. 그 과정은 다음과 같습니다.

 

win = WINDOW(DIMENSIONS=[600, 600], /NO_TOOLBAR)
s = SURFACE('(x^2+y-11)^2+(x+y^2-7)^2' , $

  XRANGE=[-5, 5], YRANGE=[-5, 5], ZRANGE=[0, 1000], $
  COLOR='tomato', MARGIN=0.15, /CURRENT)

 

이와 같이 문자값처럼 따옴표로 감싼 수식을 SURFACE 함수에 바로 투입하면 됩니다. 표출된 결과를 보면 다음 그림과 같습니다.

 

이와 같이 2차원 함수의 값의 높낮이가 입체적으로 반영된 서피스(Surface) 형태의 그림을 수식만 명시하여 바로 얻을 수 있음을 확인할 수 있습니다.

 

정리를 좀 해보자면, 이전 게시물 및 이번 게시물에서 소개한 바와 같이 PLOT, CONTOUR, SURFACE 함수들은 데이터 배열을 따로 제공하지 않고 그냥 간단하게 수식만 명시하여 그림으로 표출하고 그 패턴을 살펴볼 수 있도록 해주는 기능을 제공한다는 점을 염두에 두시면 좋을 것 같습니다. 물론 y = f(x, y) 형태의 2차원 함수의 수식이 주어진 상태에서 위와 같이 수식만 직접 투입하는 방법을 사용하지 않고 그 대신 X축 및 Y축의 격자점 좌표들 기반으로 값을 직접 계산하여 데이터 배열을 생성하고 이러한 배열들을 CONTOUR 또는 SURFACE 함수에 투입하여 2차원적인 그림을 표출하는 것도 당연히 가능합니다. 다만 플롯(Plot)과 같은 1차원적인 그림 표출의 경우와는 달리 2차원적 그림 표출의 경우는 그 과정이 약간 복잡할 수 있습니다. 이와 관련해서는 나중에 기회가 되는대로 한번 다뤄보기로 하겠습니다.

반응형