지난 회차에서는 MESH_OBJ 명령에 관한 일반적인 개요를 먼저 살펴보았고 이제부터는 각 유형별로 자세히 들어가보겠습니다. 그 첫 순서로서 Type 1에 해당되는 Rectangular 유형부터 시작해봅니다. 이것은 말 그대로 사각형의 폴리곤이라고 보면 됩니다. 원래 사각형은 마치 평면과 같은 모습을 하고 것이 일반적입니다. 다만 다수의 셀(Cell)들로 구성된 사각형 폴리곤의 경우에는 이를 구성하는 꼭지점들의 좌표에 따라서는 반드시 평면적인 모습이 아닌 경우도 있습니다. 하지만 여기서는 일단 먼저 가장 간단한 예제부터 살펴봅시다.
p1 = [3, 8]
p2 = [1, 7]
arr = [[0, 0], [0, 0]]
MESH_OBJ, 1, vertices, polygons, arr, P1=p1, P2=p2
이와 같이 MESH_OBJ 명령을 사용해보았는데, 여기서는 p1, p2, arr을 각각 정의하여 MESH_OBJ에 입력 인수로 투입하였고 그 결과를 vertices, polygons로 돌려받은 것입니다. 여기서는 XYZ 평면상에서 X 방향으로 3~8 그리고 Y 방향으로 1~7의 범위에 위치하는 사각형 폴리곤을 정의하였는데, p1 및 p2가 이러한 정보에 해당됩니다. 그리고 이를 구성하는 4개의 꼭지점들의 Z 좌표는 모두 0이 되도록 하였는데, arr이 이러한 정보에 해당됩니다. 그러면 이렇게 생성된 사각형 폴리곤의 모습을 눈으로 직접 봐야할텐데요. 이를 위하여 NG(New Graphics) 체계의 POLYGON 함수를 사용하여 표출을 해보겠습니다. 물론 이 과정에서는 앞서 MESH_OBJ 명령을 실행하여 얻은 결과물들인 vertices 및 polygons를 활용하게 됩니다. 그 과정은 다음과 같습니다.
xv = REFORM(vertices[0, *])
yv = REFORM(vertices[1, *])
zv = REFORM(vertices[2, *])
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)
여기서는 먼저 vertices로부터 X, Y, Z 좌표값들로만 구성된 배열을 각각 추출하여 xv, yv, zv로 새로 정의하였습니다. 그리고 XYZ 공간을 생성 및 표출하기 위하여 PLOT3D 함수를 사용하였는데, 이를 위하여 가상의 임의 데이터인 x, y, z를 정의하여 이용하였습니다. 어차피 XYZ 축들로 구성된 공간만 필요할 뿐 이 가상 데이터까지 눈으로 보이도록 할 필요는 없기 때문에 PLOT3D 함수에서 /NODATA 키워드를 이용하여 x, y, z 데이터가 보이지 않도록 하였습니다. 이렇게 생성된 XYZ 공간은 각 축의 방향으로 0~10의 값 범위가 되도록 하였습니다. 그리고 이 공간 내에서 사각형 폴리곤이 표시되도록 하기 위하여 POLYGON 함수를 사용하였으며 이를 위하여 앞서 얻은 xv, yv, zv 및 polygons를 POLYGON 함수의 입력 인수로 활용하였습니다. 표출된 모습은 다음의 첫번째 그림과 같습니다.
이와 같이 X 및 Y 방향으로 3~8 및 1~7이고 각 꼭지점의 Z 좌표가 모두 0인 사각형 폴리곤을 생성하고 표출하였습니다. 만약 앞서 정의했던 arr을 다음과 같이 대체한다면 꼭지점들의 좌표가 모두 4가 되면서 전반적으로 더 높은 곳에 위치할 것입니다.
arr = [[4, 4], [4, 4]]
이런 경우의 표출 결과는 위의 두번째 그림과 같습니다. 그리고 만약 arr을 다음과 같이 두가지 경우로 또 변경해본다면 어떻게 될까요?
arr = [[0, 0], [4, 4]]
arr = [[0, 4], [0, 4]]
즉 X축 또는 Y축 방향으로 기울어진 모습이 되도록 해보는 것입니다. 그 결과는 다음 두 그림과 같을 것입니다.
아마 이 정도면 기본적인 사용법은 충분히 설명이 된 것 같습니다. 그런데 좀 더 복잡한 형태로 구현하는 것도 가능합니다. 그냥 사각형인데 더 복잡해질 것이 있는지 의구심이 들 수도 있겠지만, 그냥 단순히 4개의 꼭지점들로 구성된 사각형 뿐 아니라 더 많은 격자(Grid)들로 구성되도록 할 수도 있습니다. 그 예는 다음과 같습니다.
p1 = [3:8]
p2 = [1:7]
arr = REPLICATE(4, N_ELEMENTS(p1), N_ELEMENTS(p2))
여기서는 사각형 폴리곤을 구성할 꼭지점들이 X 방향으로는 3, 4, 5, 6, 7, 8 그리고 Y 방향으로는 1, 2, 3, 4, 5, 6, 7이 됩니다. 즉 5x6의 격자구조를 갖게 되는 셈입니다. 그리고 모든 꼭지점들이 Z 방향으로 4라는 높이를 갖도록 하였습니다. 그리고 POLYGON 함수를 사용하여 폴리곤을 표출할 때 다음과 같이 전체적인 색상과 격자 경계선 색상을 다르게 처리해봅시다. 그래야 격자 구조를 식별하기가 더 좋기 때문입니다.
pol = POLYGON(xv, yv, zv, CONNECTIVITY=polygons, $
COLOR='black', FILL_COLOR='green', CLIP=0, /DATA)
이와 같은 변화를 반영하여 다시 실행해보면 결과는 다음 그림과 같습니다.
사실 그냥 볼 때에는 전체적으로 하나의 평면과 같이 보이긴 하지만, 앞서 이미 정의했듯이 내부적으로는 5x6의 격자구조를 갖는 사각형 폴리곤임을 다시 한번 확인할 수 있습니다. 그리고 이번에는 모든 꼭지점들이 Z 방향으로 동일한 높이를 갖는 것이 아니고 다음과 같이 4~5의 범위 내에서 랜덤한 값을 갖도록 해봅시다.
arr = RANDOMU(-1, N_ELEMENTS(p1), N_ELEMENTS(p2))+4
이러한 변화를 반영하여 다시 실행해보면 그 결과는 다음 그림과 같습니다.
이와 같이 각 격자 사각형마다 꼭지점들의 높이가 서로 랜덤하게 차이가 있기 때문에 이와 같이 울퉁불퉁한 모습을 띄게 됩니다. 즉 Type 1에 해당되는 사각형(Rectangular) 폴리곤은 단일 격자 형태로 구현하는 것도 가능하지만, 방금과 같이 다수의 격자들로 구성될 수도 있고 게다가 각 꼭지점마다 높이가 다를 수도 있습니다. 그런데 만약 이러한 형태의 폴리곤에 대한 꼭지점들의 좌표 및 연결성 정보를 사람이 직접 머리로 계산하는 것은 매우 힘들 뿐 아니라 사실상 불가능하다고 봐도 틀린 말은 아닙니다. 하지만 폴리곤의 생성에 필요한 최소한의 필요한 정보들만 모아서 MESH_OBJ 명령에 전달한다면 원하는 결과를 이와 같이 꽤 쉽게 얻을 수 있게 됩니다.
오늘은 MESH_OBJ 명령의 Type 1 Rectangular 유형에 관하여 알아보았습니다. 다음 회차에서는 Type 2 Polar 유형에 관하여 알아보도록 하겠습니다.
'IDL > New Graphics' 카테고리의 다른 글
MESH_OBJ 명령을 이용한 폴리곤 생성 방법 [4] (0) | 2022.07.19 |
---|---|
MESH_OBJ 명령을 이용한 폴리곤 생성 방법 [3] (0) | 2022.07.13 |
MESH_OBJ 명령을 이용한 폴리곤 생성 방법 [1] (0) | 2022.07.04 |
SetData 메서드의 활용 예제 [2] (0) | 2022.06.30 |
구간이 불규칙한 불연속 컬러테이블 기반의 표출 (0) | 2022.06.24 |