我想找到Centroidal Voronoi,但我很困惑。例如,假设我有两个向量
X=[1 2 1.1 1.3 1.4 1.5 1.3 1.2 1.8 2.1 2.2]; and
Y=[1.5 1.3 1.5 1.8 1.4 1.6 2.5 2.3 2.4 1.1 1.8];
我使用命令voronoi(X,Y)来获得图表(参见附件)。如何根据劳埃德的算法进行Centroidal Voronoi镶嵌?我在互联网上找到了劳埃德的算法:
while generating points xi not converged to centroids do
Compute the Voronoi diagram of xi
Compute the centroids Ci using equation (1)
Move each generating point xi to its centroid Ci
end while
但我无法理解为了编写代码并在matlab中使用Centroidal Voronoi我必须做什么。有什么想法或替代方案吗?
答案 0 :(得分:0)
为什么不尝试CVT Centroidal Voronoi Tessellations
你可以找到源代码和几个例子,它有matlab,fortran和c++源代码
这是来自原始资料
CVT是一个MATLAB库,可以创建Centroidal Voronoi Tessellation (CVT)数据集。
CVT数据集的生成必然比复杂 对于准随机序列。涉及迭代,所以必须有 发电机的初始分配,然后是一些 迭代。而且,在每次迭代中,必须进行估计 Voronoi细胞的体积和位置。这通常是通过 蒙特卡洛抽样。得到的CVT的准确性取决于 部分取决于采样点的数量和迭代次数 服用。
该库主要用于统一生成点数据集 分布在单位hypersquare。但是,用户可能会感兴趣 在计算中与其他几何形状或点密度。去做这个, 用户需要替换CVT库中的USER例程,并且 然后指定适当的值init = 3和sample = 3.
USER例程从区域返回一组采样点 利益。默认的USER例程统一采样点 单位圈。但其他几何形状很容易设置。改变了 点密度只需要对该区域的采样进行加权。