Main Content

複数の面をもつパッチ

例 — 立方体の定義

立方体は、6 面を形成する 8 つの頂点で定義されます。次の図は、単位長さの辺から構成された立方体を定義する頂点の xyz 座標を示します。

xyz 座標の引数をベクトルとして定義した場合、それらは点を順に連結した 1 つの多角形としてレンダリングされます。引数が行列の場合、MATLAB® は列ごとに 1 つの多角形を描画し、複数の面で 1 つのパッチを作成します。これらの面は連結する必要はなく、自動的に交差されます。

あるいは、各頂点の座標と頂点を連結する順序を指定して面を作ることもできます。この節の例は、両方の技法を説明します。

X、Y、Z 座標の指定

6 つの各面には 4 つの頂点があります。各多角形は閉じる必要がないので (すなわち最初と最後の頂点は同じである必要がないので)、xyz 座標のそれぞれについて 4 行 6 列の行列を使用してこの立方体を定義します。

行列の各列は異なる面を指定します。頂点は 8 つしかありませんが、6 面すべてを定義するには頂点を 24 個指定しなければなりません。各面は他の 4 つの面と頂点を共有するので各頂点を一度のみ定義し、各面を形成するためにこれらの頂点を結合する順序を指定すると、より効率的にパッチを定義することができます。パッチの VerticesFaces プロパティは、この方法でパッチを定義します。

面と頂点の指定

次の行列は、VerticesFaces を使用して立方体を指定します。

パッチが多くの面を含む場合、頂点と面を指定する方法を使用すると、コンピューターのかなりのメモリ量を節約することができます。この方法は、関数 patch の正式な構文を使用して Vertices および Faces プロパティに明示的に値を代入する必要があります。以下に例を示します。

patch('Vertices',vertex_matrix,'Faces',faces_matrix)

正式な構文は、面やエッジの色を自動的に割り当てないので、既定の白色の面と黒色のエッジ以外の色でパッチを作成するために、適切なプロパティを設定しなければなりません。

面にフラットなカラーリング

フラットな面の色は、各面に 1 つの色を指定した結果得られます。たとえば次のステートメントは色を定義するために頂点と面を指定する方法と、FaceVertexCData プロパティを使用して各面に 1 つの色を指定し、FaceColor プロパティを flat に設定します。

vert = [0 0 0;1 0 0;1 1 0;0 1 0;0 0 1;1 0 1;1 1 1;0 1 1];
fac = [1 2 6 5;2 3 7 6;3 4 8 7;4 1 5 8;1 2 3 4;5 6 7 8];
patch('Vertices',vert,'Faces',fac,...
      'FaceVertexCData',hsv(6),'FaceColor','flat')

軸を次のように調整します。

view(3)
axis vis3d

FaceVertexCData プロパティで指定したトゥルーカラーは、MATLAB のカラーマップと同じ形式 (すなわち RGB 値の n 行 3 列配列) なので、この例では hsv カラーマップを使用して flat シェーディングに必要な 6 色を生成します。

面の色を現在のカラー マップにマッピングするには、n 行 1 列の配列を FaceVertexCData プロパティに割り当てます。

patch('Vertices',vert,'Faces',fac,...
      'FaceVertexCData',(1:6)','FaceColor','flat')

軸を次のように調整します。

view(3)
axis vis3d

面の色を内挿する方法

面の色を内挿する方法は、各面の頂点の色がある頂点から次の頂点までの色の変異を定義することを意味します。頂点間で色を内挿するには、頂点ごとに色を指定し、FaceColor プロパティを interp に設定しなければなりません。

patch('Vertices',vert,'Faces',fac,...
      'FaceVertexCData',hsv(8),'FaceColor','interp')

軸を次のように調整します。

view(3)
axis vis3d

は、各面を頂点の色を元に内挿することによってカラーリングした立方体を生成します。

x、y、z、c を設定する方法を使用して同じカラーリングを指定するには、c は m x n x 3 配列でなければなりません。ここで、x、y、z の次元は mn 列です。

次の図は、FaceVertexCData プロパティと CData プロパティの対応関係を示します。

カラーリング手法の詳細については、パッチ データをカラーマップに関係付ける方法を参照してください。