メインコンテンツ

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(___,Name=Value) は、前述の構文の入力引数の任意の組み合わせに加え、1 つ以上の名前と値の引数を使用してオプションを指定します。前述の構文にある任意の出力引数の組み合わせが使用できます。たとえば、polyout = xor(poly1,poly2,Simplify=false) は、交差や適切でない入れ子が発生しても頂点を変更していない polyshape オブジェクトを返します。

すべて折りたたむ

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: [13×2 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。スカラー、ベクトル、行列または多次元配列として指定します。

名前と値の引数

すべて折りたたむ

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

例: polyout = xor(poly1,poly2,Simplify=false)

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: polyout = xor(poly1,poly2,"Simplify",false)

同一線上の点を頂点として保持します。次の数値または logical 値のいずれかとして指定します。

  • 1 (true) — 同一線上のすべての点を頂点として保持します。

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

名前と値の引数 KeepCollinearPoints を指定しない場合、関数はその値を入力 polyshape オブジェクトの作成時に使用された値に従って割り当てます。

  • 各入力 polyshape で作成時に同一線上の点が頂点として保持されていた場合、関数は KeepCollinearPointstrue に設定します。

  • 各入力 polyshape で作成時に同一線上の点が削除されていた場合、関数は KeepCollinearPointsfalse に設定します。

  • 入力 polyshape オブジェクトの同一線上の点の扱いがそれぞれで異なっていた場合、関数は KeepCollinearPointsfalse に設定します。

多角形の頂点を変更して出力を単純化します。次の数値または logical 値のいずれかとして指定します。

  • 1 (true) — 出力頂点によって交差や適切でない入れ子が発生する場合に、多角形の頂点を変更して、適切に定義された多角形を生成します。

  • 0 (false) — 交差するエッジ、適切でない入れ子、重複する点、または退化を含む可能性のある多角形を生成します。適切に定義されていない多角形を使用して計算すると、結果が不正確になったり、予期しないものになる可能性があります。

出力引数

すべて折りたたむ

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

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

形状 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 で導入

すべて展開する