三角形メッシュをプロットし、各エッジを異なる色で着色したいと思います。のmatlabドキュメントにtrimesh
は、色の引数があると記載されていますが、その構造がどうあるべきかについては記載されていません。三角形はエッジを共有しているため、ベクトル内のどの色をどこに配置するかをどのように知ることができC
ますか?
3 に答える
私は昨日この問題に苦しんでいました、そして私は解決策を持っていると思います。一般に、どのエッジがどの色であるかを非常に詳細に知りたい場合は、非常に卑劣である必要があります。
問題が何であるかを理解したので、最初にコマンドtrimesh(Tri、X、Y、Z、C)がどのように色を割り当てるかを確認します。引数Cは、 (エッジではなく)頂点の数に等しい長さの数のベクトルです。エッジを着色する方法は次のとおりです。4つの頂点があり、割り当てた場合
Tri = [1 2 3; 3 2 4]
と
C = [10 20 30 40]
次に、Triで見つかった最初のエッジは1から2で、ポイント1の色である10を使用して色付けされます。次に見つかったエッジは2から3で、ポイント2の色である20を使用して色付けされます。次のエッジは3対1で、色は30です。次のエッジは3対2で、色は30です。このエッジはすでに20色になっていますが、この新しい色が古い色を上書きしていることに注意してください。そして、エッジ2から4は20に色付けされ、エッジ4から3は40に色付けされます。
問題は、特別なトリックを使用しないと、この色付けスキームにより、文字通りエッジを希望どおりに色付けすることが不可能になる可能性があることです。適切な例:頂点よりも多くのエッジがあり(私の例のように)、各エッジの色を変えたい場合は、頂点に割り当てられた色に従ってエッジが色付けされるため、運が悪いことになります。しかし、各頂点の複数のコピー(したがって、各エッジの複数のコピー)を作成すると、ビジネスに戻ります。また、Triは顔だけでなく、個々のエッジも受け入れるため、私たちの生活は楽になります。
私が言っていることの例として、上記の例でエッジ2から3の色を50にしたいとします。これを行うには、ポイント2と同じ(つまり、同じ(x、y、z)座標)新しいポイントポイント5を作成します。TriとCを次のように再定義します。
Tri = [1 2 3; 3 2 4; 3 5 3]
C = [10 20 30 40 50]
Triの最後の3つの数字は、面ではなくエッジ(2から3と同じエッジ3から5)を定義していることに注意してください。このエッジは、割り当てられたカラーポイント5によって色付けされます。このようにして、すべてのエッジの色を個別に上書きできます。これらのエッジをTriマトリックスの最後に配置して、それらのカラーリングが以前の不要なカラーリングを上書きするようにしてください。面を塗りつぶすことを気にしない場合は、エッジだけのTriマトリックスを作成することもできます。少しハックですが、機能します。
次のようにTYPEコマンドを使用して、 TRIMESH関数の基礎となるコードを確認できます。
type trimesh
そうすることで、一連のface \ vertexデータを使用してPATCH関数を呼び出すことにより、 TRIMESHが実際にメッシュプロットを作成することを確認できます。したがって、パッチの彩色に関するドキュメントを使用して、 TRIMESHのカラーデータ引数を定義する方法を決定し、必要なエッジの彩色を取得できます。
TRIMESHに渡されるカラーデータ引数は、最終的に、作成される結果のパッチオブジェクトの'FaceVertexCData'
プロパティを定義することに注意してください。
行列を提供しない場合、C
Matlabは文字通りを設定しますC=Z
。したがってC
、は高さ行列(Z
)と同じサイズの行列です。あなたは特にそれに色を与えません。むしろ、Matlabが現在のに応じて色として解釈する数値のベクトルを与えますcolormap
。
これを試して
[x,y]=meshgrid(1:15,1:15);
tri = delaunay(x,y);
z = peaks(15);
trimesh(tri,x,y,z)
その後、カラーマップで遊んでください
colormap HSV
colormap spring
colormap gray
等々。
Matlabで独自のカラーマップを定義できると確信しています。ドキュメントによると、
カラーマップは、0.0から1.0までの実数のm行3列の行列です。各行は、1つの色を定義するRGBベクトルです。カラーマップのk番目の行は、k番目の色を定義します。ここで
map(k,:) = [r(k) g(k) b(k)])
、赤、緑、および青の強度を指定します。
これがお役に立てば幸いです。