지난 회차에 이어서 오늘은 Type 4에 해당되는 Spherical 유형에 관하여 알아보겠습니다. 이 유형은 말 그대로 구체(Sphere)라고 부르는 마치 둥근 공과 같은 형태를 띄는 폴리곤에 해당됩니다. 구체 폴리곤을 생성하는데 있어서는 구체의 중심점의 위치 및 반경 등과 같은 정보들만 제공해주는 것으로 충분합니다. 물론 그 외에도 폴리곤을 구성할 꼭지점들의 개수에 관한 정보도 함께 제공해주는 것이 필요합니다. 어쨌든 이러한 특성에 맞는 입력정보들을 제공하여 MESH_OBJ 명령을 사용하면 되는데요. 예제를 먼저 보겠습니다.
arr = REPLICATE(4, 51, 51)
MESH_OBJ, 4, vertices, polygons, arr
여기서 MESH_OBJ 명령에서는 Type에 해당되는 4라는 값을 첫번째 인수로 주는 것 외에도 입력 인수 arr이 사용되고 있습니다. 여기서는 P1, P2 등과 같은 키워드들은 사용되지 않고 있는데, 이와 관련해서는 나중에 알아보기로 하겠습니다. 일단 여기서는 arr만 정의하여 투입하고 있는데, 4라는 값들로만 통일되어 구성된 51x51의 2차원 배열로 정의되어 있습니다. 즉 이것은 구면을 구성하는 격자 구조의 경도(Longitude) 및 위도(Latitude) 방향으로 일정 개수의(여기서는 51개)의 격자들로 나눠지도록 하겠다는 의미입니다. 그리고 4라는 값은 구체의 반경에 해당됩니다. 그리고 구체의 중심점은 (0, 0, 0)이 됩니다. 어쨌든 위의 과정이 실행된 후에는 그 결과를 vertices, polygons로 돌려받게 됩니다.
이제 이렇게 정의된 폴리곤의 모습을 보기 위하여 다음과 같이 XYZ 축으로 구성된 3차원 공간을 정의하고 그 안에 폴리곤이 표출되도록 해봅시다.
xv = REFORM(vertices[0, *])+5
yv = REFORM(vertices[1, *])+5
zv = REFORM(vertices[2, *])+5
n = 20
x = RANDOMU(seed, n)*10
y = RANDOMU(seed, n)*10
z = RANDOMU(seed, n)*10
win = WINDOW(DIMENSIONS=[600, 600], /NO_TOOLBAR)
p = PLOT3D(x, y, z, ASPECT_Z=1, $
XRANGE=[0, 10], YRANGE=[0, 10], ZRANGE=[0, 10], $
/NODATA, /CURRENT)
pol = POLYGON(xv, yv, zv, CONNECTIVITY=polygons, $
COLOR='green', FILL_COLOR='green', CLIP=0, /DATA)
여기서는 xv, yv, zv를 정의할 때 각각 +5를 해주었는데, 원래는 구체 폴리곤의 중심이 원점인 (0, 0, 0)이기 때문에 그 좌표가 (5, 5, 5)로 옮겨지도록 하기 위한 것입니다. 이제 지금까지의 과정을 실행해보면 표출 결과는 다음 그림과 같습니다.
이와 같이 중심 좌표가 (5, 5, 5)이고 반경이 4인 구체(Sphere) 형태의 폴리곤이 생성되었음을 확인할 수 있습니다. 그리고 이를 구성하고 있는 격자들의 구조를 더 명확히 나타내기 위하여 POLYGON 함수의 COLOR 속성만 다음과 같이 검정색으로 바꿔봅시다.
pol = POLYGON(xv, yv, zv, CONNECTIVITY=polygons, $
COLOR='black', FILL_COLOR='green', CLIP=0, /DATA)
그러면 다음과 같이 표출되기 때문에 격자 구조를 더 선명하게 볼 수 있습니다.
그리고 격자 구조를 다음과 같이 37x19로 정의하면 경도 방향으로 0~360도의 범위를 10도 간격으로 그리고 위도 방향으로 -90~90도의 범위를 10도 간격으로 나눈 것과 같은 느낌으로 구현할 수도 있습니다.
arr = REPLICATE(4, 37, 19)
이러한 변화를 반영한 결과는 다음과 같습니다.
이제 앞서 생략했던 P1~P4 키워드들의 역할을 봅시다. 이 키워드들은 구현될 구체의 경도 및 위도 방향의 각도 범위를 설정하는 역할을 합니다. 앞선 예제들에서와 같이 이 키워드들을 전혀 사용하지 않을 경우에는 그냥 구면 전체를 구현해주는 디폴트 설정을 따르게 됩니다. 하지만 다음과 같이 P1, P2 키워드를 사용할 경우에는 경도 방향으로 어떤 각도 범위만큼만 구현할지를 결정할 수 있게 됩니다.
p1 = 30*!DTOR
p2 = 270*!DTOR
arr = REPLICATE(4, 37, 19)
MESH_OBJ, 4, vertices, polygons, arr, P1=p1, P2=p2
여기서는 경도 방향으로 30~270도 범위만 구현되도록 한 것입니다. 다만 P1, P2 키워드에 주어지는 각도 값들의 단위가 라디안(Radian)이 되어야 한다는 것만 유의하면 됩니다. 결과는 다음 그림과 같습니다.
이와 같이 경도 방향으로 제한된 각도 범위만 구현되었음을 확인할 수 있습니다. P1, P2 키워드의 값은 0~360도 범위내의 값을 명시해주면 됩니다. 그리고 P3, P4 키워드는 위도 방향에 해당되는데 -90~90의 범위내의 값을 명시해주면 됩니다. 예를 들면 다음과 같습니다.
p3 = -10*!DTOR
p4 = 60*!DTOR
arr = REPLICATE(4, 37, 19)
MESH_OBJ, 4, vertices, polygons, arr, P3=p3, P4=p4
이 결과는 다음 그림과 같습니다.
만약 다음과 같이 P1~P4 키워드들을 모두 사용한다면 경도 및 위도 범위가 모두 제한된 구체 폴리곤을 얻게 될 것입니다.
p1 = 30*!DTOR
p2 = 270*!DTOR
p3 = -10*!DTOR
p4 = 60*!DTOR
arr = REPLICATE(4, 37, 19)
MESH_OBJ, 4, vertices, polygons, arr, P1=p1, P2=p2, P3=p3, P4=p4
이 결과는 다음 그림과 같습니다.
결국 MESH_OBJ 명령의 Type 4는 이와 같은 구체(Sphere) 형태 기반의 폴리곤을 쉽게 생성할 수 있는 효과적인 방법이 될 수 있음을 위의 예제들을 통하여 확인할 수 있습니다.
다음 회차에서는 Type 6 Revolution 유형에 관하여 알아보도록 하겠습니다.
'IDL > New Graphics' 카테고리의 다른 글
기호(Symbol)의 크기 설정 (0) | 2022.12.06 |
---|---|
MESH_OBJ 명령을 이용한 폴리곤 생성 방법 [7] (1) | 2022.10.05 |
MESH_OBJ 명령을 이용한 폴리곤 생성 방법 [5] (0) | 2022.08.03 |
TEXT 함수 소개 (0) | 2022.07.26 |
MESH_OBJ 명령을 이용한 폴리곤 생성 방법 [4] (0) | 2022.07.19 |