おそらく、これをできるだけ一般的にしたい場合は、ツリー構造が必要になります(つまり、内部にポリゴンがあり、内部に穴があるポリゴンの穴のあるポリゴンなど)。Matlabは、ツリー構造を効率的に表現するのはあまり得意ではありませんが、ここに1つのアイデアがあります...
ポリゴンの構造体配列があります。
各ポリゴンは、「corners」と「children」の2つのフィールドを持つ構造体です。
'corners'フィールドには、「data {polyIdx} .corners(:、cornerIdx)」としてアクセスされる、コーナーの(x、y)座標のマトリックスが含まれています。
'children'フィールドは、ポリゴンの構造体配列です。
これは、穴である偽の子で三角形を作成するためのコードの例です(ただし、重複する可能性があるため、実際には有効ではありません。
polygon = struct;
npoints = 3;
polygon.corners = rand(2,npoints);
polygon.children = struct;
nchildren = 5;
for c=1:nchildren
polygon.children(c).corners = rand(2,npoints);
polygon.children(c).children = struct;
end
穴の作成と塗りつぶしを交互に繰り返す子を再帰的に定義し続けることができます。