DelaunayTri
クラスedges
とそのnearestNeighbor
メソッドを使用して、中点がボロノイ線との交点にあるエッジを選択するという最初のアイデアを実装できます。x
とy
値のランダムなペアが10個ある例を次に示します。
x = rand(10,1); %# Random x data
y = rand(10,1); %# Random y data
dt = DelaunayTri(x,y); %# Compute the Delaunay triangulation
edgeIndex = edges(dt); %# Triangulation edge indices
midpts = [mean(x(edgeIndex),2) ... %# Triangulation edge midpoints
mean(y(edgeIndex),2)];
nearIndex = nearestNeighbor(dt,midpts); %# Find the vertex nearest the midpoints
keepIndex = (nearIndex == edgeIndex(:,1)) | ... %# Find the edges where the
(nearIndex == edgeIndex(:,2)); %# midpoint is not closer to
%# another vertex than it is
%# to one of its end vertices
edgeIndex = edgeIndex(keepIndex,:); %# The "good" edges
そして今edgeIndex
はN行2列の行列であり、各行には「近くの」接続を定義する1つのエッジへのインデックスx
と1つのエッジのインデックスが含まれています。y
次のプロットは、ドロネー三角形分割(赤い線)、ボロノイ図(青い線)、三角形分割エッジの中点(黒いアスタリスク)、および残っている「良好な」エッジedgeIndex
(太い赤い線)を示しています。
triplot(dt,'r'); %# Plot the Delaunay triangulation
hold on; %# Add to the plot
plot(x(edgeIndex).',y(edgeIndex).','r-','LineWidth',3); %# Plot the "good" edges
voronoi(dt,'b'); %# Plot the Voronoi diagram
plot(midpts(:,1),midpts(:,2),'k*'); %# Plot the triangulation edge midpoints

使い方...
ボロノイ図は、一連のボロノイポリゴンまたはセルで構成されています。上の画像では、各セルは、他のどの頂点よりもその頂点に近い空間内のすべてのポイントを囲む、特定の三角形分割頂点の周囲の領域を表しています。この結果、他の頂点に近くない2つの頂点(画像の頂点6と8など)がある場合、それらの頂点を結ぶ線の中点は、Voronoiセル間の分離線になります。頂点。
ただし、2つの指定された頂点を結ぶ線に近い3番目の頂点がある場合、3番目の頂点のボロノイセルは2つの指定された頂点の間に伸び、それらを結ぶ線と交差し、その線を中点で囲みます。したがって、この3番目の頂点は、2つの頂点が互いに隣接しているよりも、指定された2つの頂点に「近い」隣接と見なすことができます。画像では、頂点7のボロノイセルが頂点1と2(および1と3)の間の領域に拡張されているため、頂点7は頂点2(または3)よりも頂点1に近いと見なされます。
場合によっては、このアルゴリズムは、ボロノイセルが接触していても、2つの頂点を「近い」隣接頂点と見なさない場合があります。画像の頂点3と5はこの例であり、頂点2は、頂点3または5が互いに隣接しているよりも、頂点3または5に近接していると見なされます。