Main Content

xor

2 つの polyshape オブジェクトの排他的 OR

説明

polyout = xor(poly1,poly2) は、領域が 2 つの polyshape オブジェクトの幾何学的な排他的 OR である polyshape オブジェクトを返します。幾何学的な排他的 OR には、poly1poly2 の領域のうちオーバーラップしていない部分が含まれます。poly1poly2 の配列は互換性のあるサイズでなければなりません。

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

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

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

すべて折りたたむ

2 つの多角形を作成してプロットします。

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

poly1poly2 の排他的 OR を計算してプロットします。

polyout = xor(poly1,poly2)
polyout = 
  polyshape with properties:

      Vertices: [13x2 double]
    NumRegions: 2
      NumHoles: 0

plot(polyout)

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

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

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

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

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

         0    1.0000    1.0000    1.0000
    0.5000    1.0000    2.0000    1.0000
    0.5000         0    2.0000    4.0000
         0         0    1.0000    4.0000
       NaN       NaN       NaN       NaN
    1.0000    1.0000    1.0000    2.0000
    1.5000    1.0000    2.0000    2.0000
    1.5000         0    2.0000    3.0000
    1.0000         0    1.0000    3.0000

この排他的 OR には 2 つの境界があり、Vertices プロパティの NaN 値の行で区切られています。たとえば、配列の最初の境界について考えます。排他的 OR の最初と最後の頂点は poly1 に由来しています。これは、shapeID の対応する値が 1 であることからわかります。これらの頂点はそれぞれプロパティ poly1.Vertices の 1 番目と 4 番目の頂点です。これは、vertexID の対応する値が 1 および 4 であることからわかります。同様に、この排他的 OR の 2 番目と 3 番目の頂点は poly2 に由来し、それぞれがプロパティ poly2.Vertices の 1 番目と 4 番目の頂点でもあります。

入力引数

すべて折りたたむ

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。排他的 OR の頂点の発生元を各要素が表す列ベクトルとして返されます。shapeID の要素の値は、出力 polyshape の対応する頂点が排他的 OR により作成された場合には 0 となります。対応する頂点が poly1 に由来する場合は要素が 1 に、poly2 に由来する場合は 2 になります。

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

データ型: double

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

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

データ型: double

バージョン履歴

R2017b で導入