Main Content

nearestNeighbor

アルファ形状の最近傍の境界点を求める

説明

I = nearestNeighbor(shp,qx,qy) は、2 次元アルファ形状 shp について、クエリ点の最近傍にある shp の境界点のインデックスを返します。I は最近傍インデックスの配列であり、各インデックスは shp.Points の行インデックスに対応します。クエリ座標 qx および qy は同じサイズでなければなりません。

I = nearestNeighbor(shp,qx,qy,qz) は、3 次元アルファ形状について、(qx,qy,qz) の最近傍にある shp の境界点のインデックスを返します。このインデックスは shp.Points の行インデックスに対応します。クエリ座標 qxqy および qz は同じサイズでなければなりません。

I = nearestNeighbor(shp,QP) は、クエリ点を行列 QP として指定します。2 次元アルファ形状の場合、QPqx 座標と qy 座標を表す 2 列の行列です。3 次元アルファ形状の場合、QP には qx 座標、qy 座標および qz 座標を表す 3 列があります。

I = nearestNeighbor(___,RegionID) は、RegionID で指定された領域の境界上にある最近傍点のインデックスを返します。ここで、1RegionIDnumRegions(shp) です。前述の構文のいずれかの入力引数を含めることができます。

[I,D] = nearestNeighbor(___) はさらに、クエリ点からその最近傍点までのユークリッド距離も返します。D のサイズは I と同じです。

すべて折りたたむ

2 次元の点の集合を作成します。

th = (pi/12:pi/12:2*pi)';
x1 = [reshape(cos(th)*(1:5), numel(cos(th)*(1:5)),1); 0];
y1 = [reshape(sin(th)*(1:5), numel(sin(th)*(1:5)),1); 0];
x = [x1; x1+15];
y = [y1; y1];

アルファ半径が 1 のアルファ形状を作成してプロットします。

shp = alphaShape(x,y,1);
plot(shp)
hold on

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

クエリ点 QP の最近傍である shp の境界点を計算します。クエリ点を青、最近傍点を赤でプロットします。

QP = [6 3];
plot(QP(1),QP(2),'b.','MarkerSize',10)
hold on
I = nearestNeighbor(shp, QP);
plot(shp.Points(I,1),shp.Points(I,2),'r.','MarkerSize',10)

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

入力引数

すべて折りたたむ

アルファ形状。alphaShape オブジェクトとして指定します。詳細については、alphaShape を参照してください。

例: shp = alphaShape(x,y) は、座標 (x,y) の点から 2 次元の alphaShape オブジェクトを作成します。

クエリ点の x 座標。数値配列として指定します。

データ型: double

クエリ点の y 座標。数値配列として指定します。

データ型: double

クエリ点の z 座標。数値配列として指定します。

データ型: double

クエリ点の座標。2 列の行列または 3 列の行列として指定します。

  • 2 次元の場合、P の各列は qx 座標と qy 座標を表します。

  • 3 次元の場合、P の各列は qx 座標、qy 座標、qz 座標を表します。

データ型: double

アルファ形状の領域の ID 番号。1numRegions(shp) の範囲の正の整数スカラーとして指定します。

アルファ形状には、点集合やパラメーターに基づく複数の小さい領域を含めることができます。それらの小さい領域には、面積または体積が大きい順に一意の RegionID が割り当てられます。たとえば、2 つの領域をもつ 3 次元のアルファ形状を考えます。体積が大きい領域の RegionID は 1、体積が小さい領域の RegionID は 2 になります。

例: shp.RegionThreshold = area(shp,numRegions(shp)-2); は、2 次元アルファ形状 shp の領域を小さい方から 2 つ抑制します。

データ型: double

出力引数

すべて折りたたむ

最近傍点のインデックス。整数値の配列として返されます。インデックスは shp.Points の行インデックスに対応し、与えられたクエリ点の最近傍である shp の境界点を示します。

クエリ点から最近傍点までの距離。数値配列で返します。D は 2 次元または 3 次元のユークリッド距離であり、サイズは I と同じです。

拡張機能

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

バージョン履歴

R2015a で導入