Main Content

원뿔 플롯으로 표시되는 벡터장

원뿔 플롯으로 표시할 수 있는 내용

이 예제에서는 wind 데이터에 대한 속도 벡터 원뿔을 플로팅합니다. 생성되는 그래프에는 다음과 같이 여러 가지 시각화 기법이 사용됩니다.

  • 등가곡면은 원뿔 플롯에 대한 시각적 맥락을 제공하고 원뿔 집합에 대해 특정한 데이터 값을 선택할 수단을 제공하는 데 사용됩니다.

  • 조명을 사용하면 등가곡면의 형태가 분명히 보이도록 할 수 있습니다.

  • 원근 투영, 카메라 위치 지정, 시야각 조정을 사용하여 최종 보기를 구성합니다.

1. 등가곡면 만들기

데이터의 사각 공간 내에 등가곡면을 표시하여 원뿔 플롯에 대한 시각적 맥락을 제공할 수 있습니다. 등가곡면을 생성하려면 다음과 같은 몇 가지 단계를 수행해야 합니다.

  1. 풍속을 나타내는 벡터장의 크기를 계산합니다.

  2. isosurfacepatch를 사용하여 사각 공간에서 풍속이 특정 값과 같아지는 곳을 보여주는 등가곡면을 그립니다. 등가곡면 내부의 영역은 풍속이 높고 외부의 영역은 풍속이 낮습니다.

  3. isonormals를 사용하여 등가곡면 렌더링에 사용되는 삼각형에서 꼭짓점 법선을 계산하는 것이 아니라 볼륨 데이터에서 등가곡면의 꼭짓점 법선을 계산합니다. 이러한 법선이 일반적으로 더 정확한 결과를 생성합니다.

  4. 등가곡면을 빨간색으로 채우고 가장자리를 그리지 않도록 등가곡면의 시각적 속성을 설정합니다(FaceColor, EdgeColor).

    load wind
    wind_speed = sqrt(u.^2 + v.^2 + w.^2);
    hiso = patch(isosurface(x,y,z,wind_speed,40));
    isonormals(x,y,z,wind_speed,hiso)
    hiso.FaceColor = 'red';
    hiso.EdgeColor = 'none';

2. 등가곡면에 등가단면 추가하기

등가단면은 볼륨의 단면을 보여준다는 점에서 슬라이스 평면과 유사합니다. 등가단면은 등가곡면의 단면이 되도록 만들어졌습니다. 등가단면에서 보간 면 채색을 사용하면 데이터 값이 현재 컬러맵의 색에 매핑됩니다. 등가곡면의 등가단면을 생성하려면 같은 등가값에서 등가단면을 정의하십시오(isocaps, patch, colormap).

hcap = patch(isocaps(x,y,z,wind_speed,40),...
   'FaceColor','interp',...
   'EdgeColor','none');
colormap hsv

3. 첫 번째 원뿔 집합 만들기

  • coneplot을 호출하기 전에 함수가 적합한 원뿔 크기를 결정할 수 있도록 daspect를 사용하여 좌표축의 데이터 종횡비를 설정합니다.

  • 원뿔이 첫 번째 등가곡면 바깥에 표시되도록 등가값이 더 작은 다른 등가곡면을 계산하여 원뿔을 배치할 점을 결정하고, 그래프에 원뿔이 너무 많이 표시되지 않도록 reducepatch를 사용하여 면과 꼭짓점의 개수를 줄입니다.

  • 원뿔을 그리고 면 색을 blue로 설정하고 가장자리 색을 none으로 설정합니다.

    daspect([1 1 1]);
    [f,verts] = reducepatch(isosurface(x,y,z,wind_speed,30),0.07);
    h1 = coneplot(x,y,z,u,v,w,verts(:,1),verts(:,2),verts(:,3),3);
    h1.FaceColor = 'blue';
    h1.EdgeColor = 'none';

4. 두 번째 원뿔 집합 만들기

  1. 데이터 범위에 걸친 값에 있는 점들로 구성된 두 번째 집합을 만듭니다(linspace, meshgrid).

  2. 두 번째 원뿔 집합을 그린 후, 면 색을 녹색으로 설정하고 가장자리 색에는 아무 색도 설정하지 않습니다.

    xrange = linspace(min(x(:)),max(x(:)),10);
    yrange = linspace(min(y(:)),max(y(:)),10);
    zrange = 3:4:15;
    [cx,cy,cz] = meshgrid(xrange,yrange,zrange);
    h2 = coneplot(x,y,z,u,v,w,cx,cy,cz,2);
    h2.FaceColor = 'green';
    h2.EdgeColor = 'none';

5. 보기 정의하기

  1. axis 명령을 사용하여 축 제한이 데이터의 최솟값 및 최댓값과 같아지도록 설정하고 그래프를 상자로 둘러싸 볼륨감을 높입니다(box).

  2. 투영 유형을 원근 투영으로 설정하여 더욱 자연스러운 볼륨 보기를 생성합니다. 시점을 설정하고 확대하여 장면을 더 크게 만듭니다(camproj, camzoom, view).

    axis tight
    set(gca,'BoxStyle','full','Box','on')
    camproj perspective
    camzoom(1.25)
    view(65,45)

6. 조명 추가하기

광원을 추가하고 등가곡면에 가장 부드러운 조명 효과를 주기 위해 구로(Gouraud) 조명을 사용합니다. 등가단면에서 배경 조명의 강도를 늘려 등가단면을 더 밝게 만듭니다(camlight, lighting, AmbientStrength).

camlight(-45,45)
hcap.AmbientStrength = 0.6;
lighting gouraud