二维Voronoi图

用voronoi函数绘Voronoi图。该函数的调用格式为:[大谦MATLAB,dqmatlab点com]

voronoi(x,y) 绘制x,y点集的Voronoi图的有界单元。包含无限远处点的为无界单元,不予绘制。

voronoi(x,y,TRI) 使用三角网TRI,不用delaunay函数计算。

voronoi(x,y,options) 指定一个字符串单元数组options,它通用delaunay函数用在Qhull算法中。如果options为[],则使用默认选项。如果options为{''},则不使用选项。

voronoi(AX,…) 绘入AX指定的坐标系,而不是当前坐标系。

voronoi(…, 'LineSpec') 用指定的颜色和线型绘制图形。

h=voronoi(…) 将line对象创建的句柄返回到h中。

[vx,vy]=voronoi(…) 将Voronoi边的有界顶点返回到vx和vy中,然后可以用plot(vx,vy, '-',x,y, '. ')创建Voronoi图。使用下面的方法之一绘制Voronoi图:

如果不提供输出参数,直接用voronoi函数绘图。

如果试图对颜色、线型和其他图形属性作更多控制,使用语法[vx,vy]=voronoi(…)。该语法返回有界Voronoi边的顶点,然后可以用plot函数绘图。

如果试图用颜色填充单元,使用voronoin函数(n=2)获取每个单元的编号,然后用patch函数和其他绘图函数生成图形。注意,patch函数不用颜色填充无界单元。

下面的代码用voronoi函数绘10个随机点的Voronoi图。

code.matlab
>> rand('state',5);
>> x=rand(1,10); y=rand(1,10);
>> voronoi(x,y)

生成图4-2。

Document Image

图4-2 10个随机点的Voronoi图

下面的代码用有界Voronoi边的顶点绘上面的10个随机点的Voronoi图。

code.matlab
>> rand('state',5);
>> x=rand(1,10); y=rand(1,10);
>> [vx, vy]=voronoi(x,y);
>> plot(x,y,'r+',vx,vy,'b-'); axis equal

生成图4-3。

Document Image

图4-3 用有界边顶点绘制的Voronoi图

注意,可以通过添加下面的代码来获得图1-10的效果。

code.matlab
>> xlim([min(x) max(x)])
>> ylim([min(y) max(y)])

下面的代码使用voronoin函数和patch函数,用颜色填充Voronoi图的有界单元。

code.matlab
>> rand('state',5);
>> x=rand(10,2);
>> [v,c]=voronoin(x);
>> for i=1:length(c)
     if all(c{i}~=1)   % 如果至少有一个顶点为1,
                  % 则它是一个开放的区域,
                  % 不能用patch函数着色
     patch(v(c{i},1),v(c{i},2),i); % 用第i种颜色着色
     end
end
>> axis equal

生成图4-4。

Document Image

图4-4 给有界单元着色