Main Content

벡터 볼륨 데이터 시각화하기

선, 입자, 띠, 흐름, 관, 원뿔

벡터 볼륨 데이터는 데이터 세트의 각 좌표 점에 3개의 값이 연결되므로 스칼라 데이터보다 많은 정보를 담고 있습니다. 이들 값은 크기와 방향을 모두 나타내는 벡터를 정의합니다. 유체 흐름의 속도가 벡터 데이터의 한 예입니다.

벡터 데이터를 시각화하는 데는 유용한 다음과 같은 여러 가지 기법이 있습니다.

  • 흐름선은 벡터장에 담긴 무질량 입자가 따라가는 경로를 추적합니다.

  • 흐름 입자는 흐름선을 추적하는 마커로, 흐름선 애니메이션을 생성하는 데 유용합니다.

  • 흐름 띠는 띠의 너비 덕분에 비틀린 부분을 표시할 수 있다는 점을 제외하면 흐름선과 비슷합니다. 흐름 띠는 회전각속도를 표시하는 데 유용합니다.

  • 흐름 관은 흐름선과 비슷하지만, 흐름 관의 너비를 제어하는 것도 가능합니다. 흐름 관은 벡터장의 발산을 표시하는 데 유용합니다.

  • 원뿔 플롯은 원뿔형 화살촉이나 화살표를 표시하여 각 점에서 데이터의 크기와 방향을 나타냅니다.

일반적으로 이러한 함수는 등고선, 슬라이스 평면, 등가곡면 등의 다른 시각화 기법과 함께 사용할 때 데이터를 가장 잘 설명합니다. 이 섹션의 예제에서는 이런 기법 중 몇 가지를 보여줍니다.

벡터 데이터에 스칼라 기법 사용하기

등고선 슬라이스, 슬라이스 평면, 등가곡면 등의 시각화 기법을 사용하려면 스칼라 볼륨 데이터가 필요합니다. 벡터의 크기를 취하는 방식으로 벡터 데이터에 이러한 기법을 사용할 수 있습니다. 예를 들어, wind 데이터 세트는 3개의 좌표 배열과 3개의 벡터 성분 배열인 u, v, w를 반환합니다. 이 경우, 속도 벡터의 크기는 볼륨에서 대응하는 각 좌표 점에서의 풍속과 같습니다.

wind_speed = sqrt(u.^2 + v.^2 + w.^2);

배열 wind_speed에는 볼륨 데이터의 스칼라 값이 들어 있습니다. 하지만 이 접근 방식으로 생성되는 정보의 유용성은 벡터 데이터의 크기로 어떠한 물리 현상을 나타내느냐에 따라 다릅니다.

흐름 플롯을 위한 시작점 지정하기

흐름 플롯(흐름선, 흐름 띠, 흐름 관 및 원뿔 또는 화살표)은 3차원 벡터장의 흐름을 보여줍니다. 모든 MATLAB® 흐름 플로팅 함수(streamline, streamribbon, streamtube, coneplot, stream2, stream3)는 사용자가 각 흐름 추적을 시작하려는 점을 지정해야 합니다.

시작점 결정하기

일반적으로, 데이터의 특성을 알고 있으면 시작점 선택에 도움이 됩니다. 흐름의 기본 방향과 데이터 좌표의 범위 같은 정보는 데이터를 계산할 위치를 결정하는 데 도움이 됩니다.

streamslice 함수는 데이터 탐색에 유용합니다. 예를 들어, 다음 명령문은 범위의 중간에 있는 z 값에서 벡터장을 자르는 슬라이스를 그립니다.

load wind
zmax = max(z(:)); zmin = min(z(:));
streamslice(x,y,z,u,v,w,[],[],(zmax-zmin)/2)

이 흐름 슬라이스 플롯은 흐름이 양의 x 방향에 있음을 나타내고, 또한 xy 모두에서 시작점을 선택할 수 있게 해줍니다. x-z 평면이나 y-z 평면에서 볼륨의 슬라이스를 만드는 유사한 플롯을 생성하면 데이터의 범위와 방향에 대한 더 깊은 통찰력을 얻을 수 있습니다.

시작점 좌표의 배열 지정하기

한 흐름선에 대한 시작점을 지정하려면 그 점의 x, y, z 좌표가 필요합니다. meshgrid 명령을 사용하면 편리하게 시작점으로 구성된 배열을 만들 수 있습니다. 예를 들어, 위의 흐름 슬라이스에서 나온 바람 데이터로부터 다음의 시작점을 선택할 수 있습니다.

[sx,sy,sz] = meshgrid(80,20:10:50,0:5:15);

이 명령문은 모든 시작점이 x = 80이고 y의 범위는 20~50이며, z의 범위는 0~15인 영역에 있음으로 정의합니다. plot3을 사용하여 위치를 표시할 수 있습니다.

plot3(sx(:),sy(:),sz(:),'*r');
axis(volumebounds(x,y,z,u,v,w))
grid on 
set(gca,'BoxStyle','full','Box','on')
daspect([2 2 1])

meshgrid에서 반환되는 것 같은 3차원 배열을 사용할 필요는 없지만 각 배열의 크기는 같아야 하고, meshgrid를 사용하면 각 좌표에 같은 개수의 고유한 값이 없을 때 편리하게 배열을 생성할 수 있습니다. 시작점 배열을 열 벡터로 정의할 수도 있습니다. 예를 들어, meshgrid는 다음과 같이 3차원 배열을 반환합니다.

[sx,sy,sz] = meshgrid(80,20:10:50,0:5:15);
whos
  Name      Size             Bytes  Class     Attributes

  sx        4x1x4              128  double              
  sy        4x1x4              128  double              
  sz        4x1x4              128  double      

그 밖에도, 각 시작점의 좌표를 구성하는 세 배열의 대응 요소를 가진 16×1 열 벡터를 사용할 수 있습니다. (이는 meshgrid가 반환하는 값을 sx(:), sy(:), sz(:)로 참조하는 것과 동일합니다.)

예를 들어, 시작점에 흐름선을 추가하면 다음과 같은 결과가 생성됩니다.

streamline(x,y,z,u,v,w,sx(:),sy(:),sz(:))

볼륨 데이터의 부분 영역에 액세스하기

subvolume 함수를 사용하면 간단하게 볼륨 데이터 세트의 부분 영역에 액세스할 수 있습니다. subvolume을 사용하면 콜론 연산자를 사용하지 않고 제한을 기준으로 관심 영역을 선택하여 볼륨을 정의하는 3차원 배열의 요소를 참조할 수 있습니다. 서브볼륨의 데이터를 생성하는 데 사용할 수 있는 두 가지 접근 방식, 즉 콜론 연산자로 요소를 참조하는 방법과 subvolume을 사용하는 방법을 살펴보겠습니다.

콜론 연산자로 요소 참조하기

배열의 요소를 참조할 때는 배열의 각 차원에서 요소를 지정하는 값을 사용합니다.

load wind
xsub = x(1:10,20:30,1:7);
ysub = y(1:10,20:30,1:7);
zsub = z(1:10,20:30,1:7);
usub = u(1:10,20:30,1:7);
vsub = v(1:10,20:30,1:7);
wsub = w(1:10,20:30,1:7);

subvolume 함수 사용하기

subvolume을 통해 좌표축에서 읽을 수 있는 좌표값을 사용할 수 있습니다. 예를 들어, 다음과 같이 합니다.

lims = [100.64 116.67 17.25 28.75 -0.02 6.86];
[xsub,ysub,zsub,usub,vsub,wsub] = subvolume(x,y,z,u,v,w,lims);

그러면 벡터 볼륨 데이터를 필요로 하는 어떤 함수에 대해서든 입력값으로 서브볼륨 데이터를 사용할 수 있습니다.