コーン プロットを使用したベクトル場の表示
表示できるコーン プロット
次の例は、wind
データに対する速度ベクトルのコーン プロットを行います。生成されたグラフは、以下の可視化手法を使用します。
等値面はコーン プロットに対する可視状態の内容を提供し、コーンの設定に対して特定のデータ値を選択するための方法を提供するために使用されます。
ライティングを使用して、等値面の形状を明確に可視にすることができます。
透視投影、カメラの位置設定、画角の調整により、最終的なビューを構成します。
1. 等値面の作成
データの矩形範囲内で等値面を表示することにより、コーン プロットの視覚状態の内容を与えます。等値面の作成には次の手順が必要です。
ベクトル場の大きさを計算します。これは風速を表します。
isosurface
およびpatch
を使用して、直方体内で風速が特定の値と等しい点を表示する等値面を描画します。等値面の範囲は、より高速で等値面の範囲外は低速です。isonormals
を使用することにより、等値面の描画に用いられる三角形から法線を計算するのではなく、ボリューム データから等値面の頂点の法線を計算します。これらの法線は、通常より正確な結果を生成します。等値面の視覚プロパティを設定して、赤色でエッジを描画しないようにします (
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
を使用して、軸のデータの縦横比を設定します。より小さい等値をもつ、もう 1 つの等値面を計算することによって、円錐を設置する点を決定し (そのため、円錐は最初の等値面の外側に表示されます)、
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. 2 番目の円錐セットの作成
2 番目の円錐のセットを描画し、フェース カラーを緑に、エッジカラーを none に設定します。
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. 表示の定義
6. ライティングを追加する
光源を追加して、等値面の最も滑らかなライティングとして Gouraud ライティングを使用します。isocaps に対する背景光の強さを増加させて、より明るくします (camlight
、lighting
、AmbientStrength
)。
camlight(-45,45) hcap.AmbientStrength = 0.6; lighting gouraud