Main Content

흐름 관으로 발산 표시하기

흐름 관으로 표시할 수 있는 내용

흐름 관은 너비가 있어 정보를 나타내는 데 사용할 수 있는 다른 차원을 제공한다는 점을 제외하면 흐름선과 비슷합니다.

기본적으로, MATLAB® 그래픽스는 흐름 관의 너비로 벡터장의 발산을 표시합니다. 각 흐름 관의 꼭짓점의 너비를 정의하여 다른 데이터를 너비에 매핑할 수도 있습니다.

이 예제에서는 다음과 같은 기법을 사용합니다.

  • 흐름 관으로 wind 데이터 세트에 있는 벡터장의 발산과 흐름 방향 나타내기

  • 가시성 향상을 위해 채색된 슬라이스 평면에 등고선을 겹쳐 풍류 속도 나타내기

입력값에는 볼륨의 좌표, 벡터장 성분, 흐름 관의 시작 위치가 포함됩니다.

1. 데이터를 불러오고 필요한 값 계산하기

데이터를 불러오고 플롯을 만드는 데 필요한 값을 계산합니다. 필요한 값은 다음과 같습니다.

  • 슬라이스 평면의 위치(최대 x, 최소 y, 고도 값)

  • 흐름 관의 시작을 나타내는 최소 x

  • 풍속(벡터장의 크기)

    load wind
    xmin = min(x(:));
    xmax = max(x(:));
    ymin = min(y(:));
    alt = 7.356; % z value for slice and streamtube plane
    wind_speed = sqrt(u.^2 + v.^2 + w.^2);
    

2. 슬라이스 평면 그리기

슬라이스 평면을 그리고(slice) surface 속성을 설정하여 매끄럽게 채색된 슬라이스를 생성합니다. hsv colormap에서 16색을 사용합니다.

hslice = slice(x,y,z,wind_speed,xmax,ymin,alt);
set(hslice,'FaceColor','interp','EdgeColor','none')
colormap hsv(16)

3. 슬라이스 평면에 등고선 추가하기

슬라이스 평면에 등고선을 추가합니다(contourslice). 다음과 같이 슬라이스 평면에서 선이 색 경계와 일치하도록 등고선 간격을 조정합니다.

  • clim을 호출하여 현재 색 제한을 가져옵니다.

    R2022a 이전: clim과 동일한 구문과 인수를 가지는 caxis를 사용하십시오.

  • slice가 사용하는 디폴트 값과 일치하도록 contourslice가 사용하는 보간 방법을 linear로 설정합니다.

    color_lim = clim;
    cont_intervals = linspace(color_lim(1),color_lim(2),17);
    hcont = contourslice(x,y,z,wind_speed,xmax,ymin,...
       alt,cont_intervals,'linear');
    set(hcont,'EdgeColor',[.4 .4 .4],'LineWidth',1)
    

4. 흐름 관 만들기

meshgrid를 사용하여 흐름 관의 시작점을 나타내는 배열을 생성합니다. 흐름 관은 x의 최솟값에서 시작하며, y의 범위는 20~50이며 z의 단일 평면(슬라이스 평면 중 하나에 상응함)에 놓여 있습니다.

흐름 관(streamtube)은 지정된 위치에 그려지고 발산(너비)의 변화를 강조하기 위해 디폴트 너비의 1.25배로 커집니다. 벡터 [1.25 30]의 두 번째 요소는 흐름 관의 원주를 따라 점의 개수를 지정합니다(디폴트 값은 20임). 흐름 관의 크기가 증가하는 경우에도 흐름 관이 계속 매끄러운 모습을 유지할 수 있도록 사용자는 이 값을 늘리는 것을 고려할 수도 있습니다.

streamtube를 호출하기 전에 데이터 종횡비를 설정합니다(daspect).

흐름 관은 surface 객체이므로 surface 속성을 설정하여 모양을 제어할 수 있습니다. 이 예제에서는 밝게 조명이 비치는 빨간색 곡면으로 표시되도록 surface 속성을 설정합니다.

[sx,sy,sz] = meshgrid(xmin,20:3:50,alt);
daspect([1,1,1]) % set DAR before calling streamtube
htubes = streamtube(x,y,z,u,v,w,sx,sy,sz,[1.25 30]);
set(htubes,'EdgeColor','none','FaceColor','r',...
   'AmbientStrength',.5)

5. 보기 정의하기

보기를 정의하고 조명을 추가합니다(view, axis volumebounds, Projection, camlight).

view(-100,30)
axis(volumebounds(x,y,z,wind_speed))
set(gca,'Projection','perspective')
camlight left