matlab中查找y1与y2相近点,matlab – 寻找附近的邻居

本文介绍了如何使用DelaunayTriclass的edges和nearestNeighbor方法选择那些中点落在与Voronoi线交点上的边。通过随机生成的10个点对进行演示,并解释了Delaunay三角化与Voronoi图的关系。
摘要由CSDN通过智能技术生成

您可以通过使用

DelaunayTri class及其

edges和

nearestNeighbor方法来实现您的第一个想法,即选择其中点落在与Voronoi线交点的边。这里有一个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矩阵,其中每行包含一个边缘的x和y的索引,用于定义“近”连接的一个边。下面的图表示了Delaunay三角测量(红线),Voronoi图(蓝线),三角形边缘(黑色星号)的中点以及保留在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

怎么运行的…

Voronoi图由一系列Voronoi多边形或细胞组成。在上述图像中,每个单元格表示给定的三角测量顶点周围的区域,其包围空间中比任何其它顶点更靠近该顶点的所有点。因此,当您有两个顶点不靠近任何其他顶点(如图像中的顶点6和8)时,连接这些顶点的线的中点落在Voronoi单元之间的分隔线上顶点。

然而,当存在接近连接2个给定顶点的线的第三顶点时,第三顶点的Voronoi单元可以在2个给定顶点之间延伸,穿过连接它们的线并且包围该线中点。因此,这个第三个顶点可以被认为是比两个顶点彼此相对的2个给定顶点的“更接近”的邻居。在您的图像中,顶点7的Voronoi单元延伸到顶点1和2(和1和3)之间的区域,因此顶点7被认为比顶点2(或3)更靠近顶点1。

在某些情况下,该算法可能不会将两个顶点视为“近”邻居,即使它们的Voronoi细胞接触。您的图像中的顶点3和5就是一个例子,其中顶点2被认为比顶点3或5彼此相对于顶点3或5的最近邻居。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值