Main Content

subtract

2 つの polyshape オブジェクトの差

説明

polyout = subtract(poly1,poly2) は、各領域が 2 つの polyshape オブジェクトの幾何学的な差である polyshape オブジェクトを返します。出力 polyout には、poly1 の領域から、poly1 と重なっている poly2 の部分を差し引いたものが含まれます。入力引数 poly1poly2 の配列は互換性のあるサイズでなければなりません。

[polyout,shapeID,vertexID] = subtract(poly1,poly2) は、polyout の頂点から poly1poly2 の頂点への、頂点のマッピング情報も返します。関数 subtract がこの構文をサポートするのは、poly1poly2 がスカラー polyshape オブジェクトである場合のみです。

shapeID 要素は、polyout の対応する頂点が poly1 または poly2 に由来するか、あるいは差により作成されたかを識別します。vertexIDpolyout の頂点を poly1poly2、または差の頂点にマッピングします。

___ = subtract(poly1,poly2,'KeepCollinearPoints',TF) は、前述の任意の構文について、同一線上の点を polyout に保持するか削除するかを指定します。

すべて折りたたむ

部分的にオーバーラップしている 2 つの多角形 poly1poly2 を作成して、プロットします。

poly1 = polyshape([0 0 1 1],[1 0 0 1]);
poly2 = polyshape([0.75 1.25 1.25 0.75],[0.25 0.25 0.75 0.75]);
plot(poly1)
hold on
plot(poly2)

Figure contains an axes object. The axes object contains 2 objects of type polygon.

figure

poly2poly1 から引きます。この結果得られる多角形は、poly1 から、poly1 とオーバーラップしている poly2 の部分を差し引いたものとなります。

polyout1 = subtract(poly1,poly2)
polyout1 = 
  polyshape with properties:

      Vertices: [8x2 double]
    NumRegions: 1
      NumHoles: 0

plot(polyout1)

Figure contains an axes object. The axes object contains an object of type polygon.

次に、2 つの多角形の減算を逆の順序で行います。すなわち、poly1poly2 から引きます。この結果得られる多角形は、poly2 から、poly2 とオーバーラップしている poly1 の部分を差し引いたものとなります。

polyout2 = subtract(poly2,poly1)
polyout2 = 
  polyshape with properties:

      Vertices: [4x2 double]
    NumRegions: 1
      NumHoles: 0

plot(polyout2)
xlim([-0.2 1.4]);
ylim([-0.2 1.2]);

Figure contains an axes object. The axes object contains an object of type polygon.

2 つの多角形を作成し、その差を計算してプロットします。差の頂点の座標と、対応する頂点のマッピング情報を表示します。

poly1 = polyshape([0 0 1 1],[1 0 0 1]);
poly2 = translate(poly1,[0.5 0.5]);
[polyout,shapeID,vertexID] = subtract(poly1,poly2);
plot(polyout)
axis equal

Figure contains an axes object. The axes object contains an object of type polygon.

[polyout.Vertices shapeID vertexID]
ans = 6×4

         0    1.0000    1.0000    1.0000
    0.5000    1.0000         0         0
    0.5000    0.5000    2.0000    4.0000
    1.0000    0.5000         0         0
    1.0000         0    1.0000    3.0000
         0         0    1.0000    4.0000

差の 1 番目、5 番目、6 番目の頂点は poly1 に由来します。これは、対応する shapeID の値が 1 であることからわかります。これらの頂点はそれぞれプロパティ poly1.Vertices の 1 番目、3 番目、4 番目の頂点です。これは、vertexID の対応する値が 1、3、4 であることからわかります。同様に、差の 3 番目の頂点は poly2 に由来し、プロパティ poly2.Vertices の 4 番目の頂点です。差の 2 番目と 4 番目の頂点は差し引きの計算により作成されています。これは、対応する shapeIDvertexID の値が 0 であることからわかります。

入力引数

すべて折りたたむ

1 番目の入力 polyshape。スカラー、ベクトル、行列または多次元配列として指定します。

2 番目の入力 polyshape。スカラー、ベクトル、行列または多次元配列として指定します。

同一線上の頂点インジケーター。false または true として指定します。

  • false — 出力 polyshape が境界の定義に必要な最小数の頂点のみを含むように、同一線上の点を削除する。

  • true — 同一線上の点をすべて頂点として保持する。

'KeepCollinearPoints' パラメーターが指定されていない場合、入力 polyshape オブジェクトの作成時に使用した値に従って値が割り当てられます。

  • 各入力 polyshape の作成時に値が true だった場合、出力 polyshape の値は true に設定される。

  • 各入力 polyshape の作成時に値が false だった場合、出力 polyshape の値は false に設定される。

  • 入力 polyshape オブジェクトの値が一致しない場合、出力 polyshape の値は false に設定される。

データ型: logical

出力引数

すべて折りたたむ

出力 polyshape。スカラー、ベクトル、行列または多次元配列として返されます。

2 つの入力 polyshape 引数は互換性のあるサイズでなければなりません。たとえば、2 つの入力 polyshape ベクトルの長さ M と N が異なる場合、方向はそれぞれ異なっていなければなりません (一方が行ベクトル、もう一方が列ベクトルでなければなりません)。polyout は、各入力ベクトルの方向に応じて、M 行 N 列または N 行 M 列となります。互換性のある配列サイズの詳細については、基本的な演算で互換性のある配列サイズを参照してください。

形状 ID。差の頂点の発生元を各要素が表す列ベクトルとして返されます。shapeID の要素の値は、出力 polyshape の対応する頂点が差し引きにより作成された場合には 0 となります。対応する頂点が poly1 に由来する場合は要素が 1 に、poly2 に由来する場合は 2 になります。

shapeID の長さは、出力 polyshapeVertices プロパティの行数と等しくなります。関数 xor がこの出力引数をサポートするのは、入力 polyshape オブジェクトがスカラーである場合のみです。

データ型: double

頂点 ID。列ベクトルとして返されます。このベクトルの要素は、出力 polyshape の頂点を元の polyshape の頂点にマッピングします。vertexID の要素には、入力 polyshapeVertices プロパティにおける対応する頂点の行番号が格納されます。出力 polyshape の対応する頂点が差により作成されている場合、要素の値は 0 になります。

vertexID の長さは、出力 polyshapeVertices プロパティの行数と等しくなります。関数 subtract がこの出力引数をサポートするのは、入力 polyshape オブジェクトがスカラーである場合のみです。

データ型: double

バージョン履歴

R2017b で導入