Is there a MATLAB function that can compute the area of my patch? - MATLAB Answers - MATLAB Central (mathworks.com):上記回答(及び下記事例)の様に面積を計算しているのであれば、パッチの添え字と計算した面積の添え字が一致します。面積を加工して色の情報にすればパッチの色として設定可能です。
パッチの外観と動作 - MATLAB - MathWorks 日本:最初に出てくる「色」に関する5つのプロパティを熟読すれば、自由に面積に応じた色を設定できます。下記事例では、パッチの色を設定する2つのプロパティを下記の様に設定変更しました
- FaceColor = [0 0 0] (既定値) ⇒'flat':規定値は全パッチの色を統一するので'flat'に変更します
- CData = [](最初は空)⇒[面積を色情報に変換したデータ](長さ=パッチ数のベクトル)
- CDataMapping = 'scaled' (既定値)のまま(面積の値を色の値に自動換算させる)
f = open('patchfigure.fig');
p = f.Children.Children(2); % Figureオブジェクト内のPatchオブジェクト
a = p.Vertices(p.Faces(:, 2), :) - p.Vertices(p.Faces(:, 1), :); % 各三角パッチの辺a (点2-点1)
b = p.Vertices(p.Faces(:, 3), :) - p.Vertices(p.Faces(:, 1), :); % 各三角パッチの辺b (点3-点1)
area = 1/2 * sqrt(sum(cross(a, b, 2).^2, 2)); % 三角パッチの二辺の外積ベクトルの長さ/2 (三角形の面積)
% p.CData = area; % パッチのカラーデータに面積値を設定(現在の色スケールの最大/小値に自動スケーリングされる)
p.CData = 1 + (area > max(area) * 1 / 3 + min(area) * 2 / 3) + (area > max(area) * 2 / 3 + min(area) * 1 / 3);
p.FaceColor = 'flat'; % パッチの面毎に一様な色で塗りつぶし