Main Content

delaunayTriangulation

2 次元および 3 次元における Delaunay 三角形分割

説明

一連の点から 2 次元または 3 次元の Delaunay 三角形分割を作成するには、delaunayTriangulation オブジェクトを使用します。2 次元データでは、エッジの制約を指定することもできます。

delaunayTriangulation に対しては、triangulation クエリを含む、さまざまな幾何学的なクエリと位相幾何学的なクエリを実行できます。たとえば、特定の点を含む小平面を見つけたり、凸包の頂点を探したり、ボロノイ線図を計算したりします。

作成

delaunayTriangulation オブジェクトを作成するには、三角形分割の点と制約付きエッジを定義する入力引数を指定して、関数 delaunayTriangulation を使用します。

説明

DT = delaunayTriangulation(P) は、P 内の点から Delaunay 三角形分割を作成します。点が 2 次元空間と 3 次元空間のいずれにあるかに応じて、行列 P は 2 列または 3 列です。

DT = delaunayTriangulation(P,C) は、P の 2 次元の点に対するエッジの制約を行列 C で指定します。C の各行は制約付きエッジの始点および終点の頂点 ID を定義します。頂点 ID は、DT.Points プロパティ内の対応する頂点の行番号です。

DT = delaunayTriangulation(x,y) は、列ベクトル x および y の点座標から 2 次元 Delaunay 三角形分割を作成します。

DT = delaunayTriangulation(x,y,C) は、行列 C でエッジの制約を指定します。

DT = delaunayTriangulation(x,y,z) は、列ベクトル xy および z の点座標から 3 次元 Delaunay 三角形分割を作成します。

DT = delaunayTriangulation() は、空の Delaunay 三角形分割を作成します。

入力引数

すべて展開する

点。三角形分割の点の x 座標、y 座標、および (場合によっては) z 座標の列をもつ行列として指定します。P の行番号は、三角形分割の頂点 ID です。

三角形分割の点の x 座標。列ベクトルとして指定します。

三角形分割の点の y 座標。列ベクトルとして指定します。

三角形分割の点の z 座標。列ベクトルとして指定します。

2 列の行列として指定された制約付きエッジの頂点 ID。C の各行は制約付きエッジに対応し、2 つの ID を含んでいます。

  • C(j,1) は、エッジの開始位置の頂点 の ID です。

  • C(j,2) は、エッジの終了位置の頂点 の ID です。

エッジの制約は、2 次元三角形分割に対してのみ指定できます。

プロパティ

すべて展開する

三角形分割の点。次の特性を備えた行列として表されます。

  • DT.Points の各行は、頂点の座標を含んでいます。

  • DT.Points の各行の番号は頂点 ID です。

三角形分割連結リスト。次の特性を備えた行列として表されます。

  • DT.ConnectivityList の各要素は頂点 ID です。

  • 各行は、三角形分割の三角形または四面体を表します。

  • DT.ConnectivityList の各行の番号は三角形または四面体 ID です。

制約付きエッジ。頂点 ID の 2 列の行列として表されます。DT.Constraints の各行は制約付きエッジに対応し、2 つの ID を含んでいます。

  • DT.Constraints(j,1) は、エッジの開始位置の頂点 の ID です。

  • DT.Constraints(j,2) は、エッジの終了位置の頂点 の ID です。

三角形分割に制約付きエッジがない場合、DT.Constraints は空行列になります。

オブジェクト関数

convexHullDelaunay 三角形分割の凸包
isInterior Delaunay 三角形分割の内側にあるクエリ点
voronoiDiagramDelaunay 三角形分割のボロノイ線図
barycentricToCartesian座標を重心座標から直交座標に変換
cartesianToBarycentric座標を直交座標から重心座標に変換
circumcenter三角形または四面体の外心
edgeAttachments指定エッジに接続している三角形または四面体
edges三角形分割のエッジ
faceNormal三角形分割の単位法線ベクトル
featureEdges表面の三角形分割の鋭いエッジ
freeBoundary自由境界の小平面
incenter三角形分割の要素の内心
isConnected2 つの頂点がエッジで連結されているかどうかをテスト
nearestNeighbor指定の点に最も近い頂点
neighbors三角形または四面体の近傍
pointLocation三角形または四面体を囲んでいる点
size三角形分割連結リストのサイズ
vertexAttachments頂点に追加された三角形または四面体
vertexNormal三角形分割の頂点法線

すべて折りたたむ

30 個の乱数点の 2 次元 delaunayTriangulation オブジェクトを作成します。

rng default;
P = rand([30 2]);
DT = delaunayTriangulation(P)
DT = 
  delaunayTriangulation with properties:

              Points: [30x2 double]
    ConnectivityList: [48x3 double]
         Constraints: []

各三角形の中心点を計算し、三角形分割とその中心点をプロットします。

IC = incenter(DT);
triplot(DT)
hold on
plot(IC(:,1),IC(:,2),'*r')

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers

30 個の乱数点の 3 次元 delaunayTriangulation オブジェクトを作成します。

rng default;
x = rand([30 1]);
y = rand([30 1]);
z = rand([30 1]);
DT = delaunayTriangulation(x,y,z)
DT = 
  delaunayTriangulation with properties:

              Points: [30x3 double]
    ConnectivityList: [102x4 double]
         Constraints: []

三角形分割をプロットします。

tetramesh(DT,'FaceAlpha',0.3);

Figure contains an axes object. The axes object contains 102 objects of type patch.

三角形分割の凸包を計算してプロットします。

[K,v] = convexHull(DT);
trisurf(K,DT.Points(:,1),DT.Points(:,2),DT.Points(:,3))

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

詳細

すべて展開する

ヒント

  • delaunayTriangulation は、境界の制約が交差するかオーバーラップする場合に、不正確な結果または矛盾する結果を生成することがあります。この動作を回避するには、1 つ以上の閉じた境界を形成する、交差もオーバーラップもしない複数の制約を使用します。

拡張機能

バージョン履歴

R2013a で導入