Main Content

polyshape

2 次元の多角形のような形状

説明

関数 polyshape は、2 次元の頂点から多角形のような形状を作成します。ただし、多角形とは異なり、polyshape は不連続の領域および穴をもつことができます。polyshape オブジェクトのプロパティでは頂点、固体領域、および穴を記述します。

たとえば、pgon = polyshape([0 0 1 1],[1 0 0 1]) は 4 点 (0,1)、(0,0)、(1,0)、(1,1) で定義される固体正方形を作成します。

>> pgon = polyshape([0 0 1 1],[1 0 0 1])
pgon = 

  polyshape with properties:

      Vertices: [4×2 double]
    NumRegions: 1
      NumHoles: 0
>> plot(pgon)

Plot of a square polyshape

作成

polyshape オブジェクトの作成時に、入力頂点により、交差がなく適切に入れ子になっている多角形の境界を 1 つ以上定義する必要があります。そうしない場合、関数 polyshape は必要に応じて入力頂点を自動的に変更し、適切に定義された多角形を作成します。

正多角形を作成する場合、関数 nsidedpoly を使用することもできます。nsidedpoly では、多角形の中心点、辺の長さなどのパラメーターをオプションで指定できます。

説明

pgon = polyshape() は、空の polyshape オブジェクトを作成します。

pgon = polyshape(x,y) は、x 座標のベクトルと、対応する y 座標のベクトルで定義される 2 次元の頂点から polyshape を作成します。xy は同じ長さで、少なくとも 3 つの要素がなければなりません。

pgon = polyshape(P) は、N 行 2 列の行列 P (N は頂点の数) で定義される 2 次元の頂点から polyshape を作成します。P の 1 列目は x 座標を定義し、2 列目は y 座標を定義します。

pgon = polyshape(X,Y) は、M 個の境界で構成される多角形を作成します。ここで、XY は x 座標と y 座標のベクトルからなる 1 行 M 列の cell 配列です。X の各ベクトルの長さは、Y の対応するベクトルと同じでなければなりませんが、頂点の数は境界ごとに異なっていてもかまいません。

pgon = polyshape(___,Name,Value) は、前述の任意の構文について、polyshape オブジェクトを作成するための追加パラメーターを指定します。

入力引数

すべて展開する

多角形の頂点の x 座標。ベクトルとして指定します。一度に複数の境界の座標を表すには、各境界の間に NaN を配置します。たとえば、pgon = polyshape([0 0 1 NaN 1 5 5],[1 0 0 NaN 5 5 1]) は 2 つの固体三角形で構成される polyshape を作成します。

double 型でない数値入力座標は、自動的に double 型に変換されます。

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

多角形の頂点の y 座標。ベクトルとして指定します。一度に複数の境界の座標を表すには、各境界の間に NaN を配置します。たとえば、pgon = polyshape([0 0 1 NaN 1 5 5],[1 0 0 NaN 5 5 1]) は 2 つの固体三角形で構成される polyshape を作成します。

double 型でない数値入力座標は、自動的に double 型に変換されます。

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

多角形の 2 次元の頂点。2 列の行列として指定します。P の 1 列目には頂点の x 座標が含まれ、2 列目には y 座標が含まれています。P には少なくとも 3 行がなければなりません。

一度に複数の境界の座標を表すには、各境界の間に NaN を配置します。たとえば、pgon = polyshape([1 0; 0 0; 0 1; NaN NaN; 1 5; 5 5; 5 1]) は 2 つの固体三角形で構成される polyshape を作成します。

double 型でない数値入力座標は、自動的に double 型に変換されます。

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

M 個の境界の x 座標。ベクトルの cell 配列として指定します。ベクトルの長さはそれぞれ異なっていてもかまいませんが、対応する y ベクトルの長さとは一致しなければなりません。

double 型でない数値入力座標は、自動的に double 型に変換されます。

データ型: cell

M 個の境界の y 座標。ベクトルの cell 配列として指定します。ベクトルの長さはそれぞれ異なっていてもかまいませんが、対応する y ベクトルの長さとは一致しなければなりません。

double 型でない数値入力座標は、自動的に double 型に変換されます。

データ型: cell

名前と値の引数

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

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

例: pgon = polyshape(P,'SolidBoundaryOrientation','ccw')

境界の方向。'SolidBoundaryOrientation' と次の値のいずれかで構成されるコンマ区切りのペアとして指定します。

  • 'auto' — 境界の入れ子に基づいて、境界のタイプを自動的に判別します。

  • 'cw' — 時計回りの頂点の方向が実線の境界として扱われます。

  • 'ccw' — 反時計回りの頂点の方向が実線の境界として扱われます。

このパラメーターは通常、多角形データが他のソフトウェアにより特定の規則を使用して作成された場合に、一貫性を確保するために指定されます。

頂点の変更。'Simplify' と、次のいずれかで構成されるコンマ区切りのペアとして指定します。

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

  • false — 交差や適切でない入れ子が発生していても、入力頂点を変更しません。適切に定義されていない多角形を使用して計算すると、結果が不正確になったり、予期しないものになる可能性があります。

データ型: logical

同一線上の頂点。'KeepCollinearPoints' と、次のいずれかで構成されるコンマ区切りのペアとして指定します。

  • falsepolyshape の作成時に、境界の定義に必要な最小数の頂点のみを含むように、同一線上の点を削除する。

  • truepolyshape の作成時に、同一線上の点をすべて頂点として保持する。

polyshape の作成後、オブジェクト関数 addboundary または simplify を使用すると、'KeepCollinearPoints' の値が自動的に引き継がれます。

データ型: logical

プロパティ

すべて展開する

多角形の 2 次元の頂点。2 列の行列として指定します。頂点の行列には、多角形の各境界の頂点が含まれています。境界ごとの頂点の組は NaN 値で区切られます。

データ型: double

この プロパティ は読み取り専用です。

多角形を構成する領域の数。スカラー整数として指定します。領域は、外部境界で囲まれたエリアです。領域には、外部境界内に全体が収まる穴の境界がある場合があります。

データ型: double

この プロパティ は読み取り専用です。

多角形の穴の数。スカラー整数として指定します。

データ型: double

オブジェクト関数

すべて展開する

addboundarypolyshape の境界を追加
polybuffer点、ライン、または polyshape オブジェクトの周囲にバッファーを作成
rmboundarypolyshape の境界を削除
rmholespolyshape の穴を削除
rmsliverspolyshape の境界の外れ値を削除
rotatepolyshape の回転
scalepolyshape のスケーリング
simplifypolyshape の境界を単純化
sortboundariespolyshape の境界の並べ替え
sortregionspolyshape の領域の並べ替え
translatepolyshape の平行移動
boundarypolyshape の境界の頂点の座標
holespolyshape の穴の境界を polyshape オブジェクトの配列に変換
isholepolyshape の境界が穴であるかどうかを判定
isinteriorpolyshape の内側にあるクエリ点
issimplifiedpolyshape が適切に定義されているかどうかを判別
nearestvertex最も近い polyshape 頂点をクエリ
numboundariespolyshape の境界の数
numsidespolyshape の辺の数
overlapspolyshape オブジェクトがオーバーラップしているかどうかを判別
plotpolyshape のプロット
regionspolyshape の領域にアクセス
areapolyshape の面積
boundingboxpolyshape の境界ボックス
centroidpolyshape の重心
convhullpolyshape の凸包
perimeterpolyshape の周囲長
triangulationpolyshape の三角形分割
turningdistpolyshape オブジェクト間のターニング距離を計算
intersectpolyshape オブジェクトの交差
subtract2 つの polyshape オブジェクトの差
unionpolyshape オブジェクトの結合
xor2 つの polyshape オブジェクトの排他的 OR

すべて折りたたむ

4 つの点で構成される多角形を作成してプロットし、その面積、周囲長、重心座標を計算します。

pgon = polyshape([0 0 1 3], [0 3 3 0]);
plot(pgon)

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

A = area(pgon)
A = 6
P = perimeter(pgon)
P = 10.6056
[Cx Cy] = centroid(pgon)
Cx = 1.0833
Cy = 1.2500

境界が交差している多角形を解析します。

境界に自己交差が存在する多角形を作成します。既定では、関数 polyshape は境界を 2 つの個別の境界に分割し、適切に定義された多角形を作成します。

P = [0 0; 1 1; 1 0; 0 1; 0 0];
pgon = polyshape(P)
Warning: Polyshape has duplicate vertices, intersections, or other inconsistencies that may produce inaccurate or unexpected results. Input data has been modified to create a well-defined polyshape.
pgon = 
  polyshape with properties:

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

多角形をプロットして、面積を計算します。

plot(pgon)

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

A = area(pgon)
A = 0.5000

元の入力頂点を単純化しない場合、多角形の 2 つの三角形領域の面積が相殺されます。

pgon2 = polyshape(P,'Simplify',false)
pgon2 = 
  polyshape with properties:

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

A2 = area(pgon2)
A2 = 0

入れ子になった境界がある多角形を解析します。

適切に入れ子になっている 2 つの境界がある多角形を作成します。polyshape は、最も外側にある境界を、固体領域の外側の境界として定義します。内側に向かって次の境界は、穴の開始を定義します。

t = 0.05:0.5:2*pi;
x1 = cos(t);
y1 = sin(t);
x2 = 0.5*cos(t);
y2 = 0.5*sin(t);
pgon = polyshape({x1,x2},{y1,y2})
pgon = 
  polyshape with properties:

      Vertices: [27x2 double]
    NumRegions: 1
      NumHoles: 1

plot(pgon)

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

関数 addboundary を使用して、pgon に 3 番目の外側の境界を追加する 2 番目の多角形を作成します。

x3 = 2*cos(t);
y3 = 2*sin(t);
pgon2 = addboundary(pgon,x3,y3)
pgon2 = 
  polyshape with properties:

      Vertices: [41x2 double]
    NumRegions: 2
      NumHoles: 1

plot(pgon2)

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

3 番目の外側の境界を追加するには、polyshape が新しい入れ子パターンに基づいて固体の境界と穴の境界を再構成する必要があります。前述のとおり、polyshape は固体領域の開始を示す最も外側の境界から始まり、内側に向かって、入れ子になっているそれぞれの境界で穴の境界と固体の境界を切り替えます。新しい多角形には 2 つの固体領域と 1 つの穴があります。

拡張機能

スレッドベースの環境
MATLAB® の backgroundPool を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool を使用してコードを高速化します。

バージョン履歴

R2017b で導入