Main Content

intersect

polyshape オブジェクトの交差

説明

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

polyout = intersect(polyvec) は、領域がベクトル polyvec のすべての polyshape オブジェクトの交差である polyshape オブジェクトを返します。この交差には、polyvec のすべての polyshape オブジェクトがオーバーラップしている領域があります。

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

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

[polyout,shapeID,vertexID] = intersect(polyvec) は、polyout から polyshape オブジェクト polyvec のベクトルの各要素への、頂点のマッピング情報を返します。

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

[in,out] = intersect(poly1,lineseg) は、poly1 の内側と外側にある lineseg の線分を返します。行列 lineseg には 2 つの列があります。1 列目は線分の x 座標を定義し、2 列目は対応する y 座標を定義します。

intersect がこの構文をサポートするのは、poly1 がスカラーの polyshape であり、かつ lineseg に自己交差がない場合のみです。

すべて折りたたむ

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 の交差を計算してプロットします。

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

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

plot(polyout)
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 つの多角形を含むベクトルを作成します。

polyarray1 = polyshape([0 0 1 1],[1 0 0 1]);
polyarray2 = polyshape([0.75 1.25 1.25 0.75],[0.25 0.25 0.75 0.75]);
poly1 = [polyarray1 polyarray2]
poly1 = 
  1x2 polyshape array with properties:

    Vertices
    NumRegions
    NumHoles

plot(poly1(1))
hold on
plot(poly1(2))

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

figure

poly1 の要素の交差を計算します。

polyout = intersect(poly1)
polyout = 
  polyshape with properties:

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

plot(polyout)
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 = polyshape([0.75 1.25 1.25 0.75],[0.25 0.25 0.75 0.75]);
[polyout,shapeID,vertexID] = intersect(poly1,poly2);

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

    0.7500    0.2500    2.0000    1.0000
    0.7500    0.7500    2.0000    2.0000
    1.0000    0.7500         0         0
    1.0000    0.2500         0         0

交差の最初の 2 つの頂点は poly2 に由来します。これは、shapeID の対応する値が 2 であることからわかります。これらの頂点は、それぞれ poly2.Vertices プロパティの 1 番目と 2 番目の頂点です。これは、各頂点の対応する vertexID の値がそれぞれ 1 と 2 であることからわかります。polyout の最後の 2 つの頂点は交差により作成されたものです。これは、shapeIDvertexID の対応する値が 0 であることからわかります。

四角形多角形と線分を作成します。

poly1 = polyshape([0 0 1 1],[1 0 0 1]);
lineseg = [0.5 0.5; 1.5 1.5];

多角形と線分の交差を計算し、線分のどのセクションが多角形の内側にあり、どのセクションが外側にあるかを判定します。

[in,out] = intersect(poly1,lineseg);
plot(poly1)
hold on
plot(in(:,1),in(:,2),'b',out(:,1),out(:,2),'r')
legend('Polygon','Inside','Outside','Location','NorthWest')

Figure contains an axes object. The axes object contains 3 objects of type polygon, line. These objects represent Polygon, Inside, Outside.

入力引数

すべて折りたたむ

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

データ型: polyshape

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

データ型: polyshape

polyshape ベクトル。

データ型: polyshape

線分の座標。2 列の行列として指定します。1 列目は線分の x 座標を定義し、2 列目は y 座標を定義します。lineseg には少なくとも 2 つの行がなければならず、また自己交差があってはなりません。

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

同一線上の頂点インジケーター。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 列となります。互換性のある配列サイズの詳細については、基本的な演算で互換性のある配列サイズを参照してください。

  • 1 つの入力引数 polyvec を指定した場合、polyout はスカラーの polyshape オブジェクトです。

形状 ID。各要素が交差の頂点の発生元を表す列ベクトルとして返されます。

  • shapeID の長さは、出力 polyshapeVertices プロパティの行数と等しくなります。

  • shapeID の要素は、入力引数の数によって異なります。

    • 2 つの入力引数 poly1 および poly2 を指定した場合、要素はスカラーの polyshape オブジェクトでなければなりません。shapeID の要素の値は、出力 polyshape の対応する頂点が交差により作成された場合には 0 となります。対応する頂点が poly1 に由来する場合は要素が 1 に、poly2 に由来する場合は 2 になります。

    • polyshape オブジェクトのベクトルである入力引数 polyvec を 1 つ指定した場合、shapeID には要素インデックス polyvec が含められ、対応する出力頂点の由来元となります。対応する頂点が交差により作成された場合、その要素の値は 0 になります。

データ型: double

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

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

データ型: double

内側の線分の座標。2 列の行列として返されます。in の 1 列目には入力 polyshape の内側にある線分の x 座標が含まれ、2 列目には対応する y 座標が含まれます。

データ型: double

外側の線分の座標。2 列の行列として返されます。out の 1 列目には入力 polyshape の外側にある線分の x 座標が含まれ、2 列目には対応する y 座標が含まれます。

データ型: double

バージョン履歴

R2017b で導入

参考

|