supersonics 发表于 2009-12-30 23:21

voronoi布点

我想要控制voronoi图形核点的密集程度,看到一个文献里面说“首先我们在面积为A的正方形内随机布N个形核点,这些点的坐标由均匀分布的随机序列得到。第一个点的坐标被指定后,从随机序列取得每一个后序的点被放在排列中,要求这样的点到任何已有点的距离必须不小于允许的最小值d,在给定个数的连续的点被拒绝后,认为排列是满的。”我搞了半天也没有实现这个效果,那个判断与已有点的距离的循环嵌套编的总是不对,总是无法实现判断的时候再次从已有的第一个点开始判断(比如:比较到和已经存在的第3个点的距离小于了最小值,等新插入的点的坐标付了新值后,循环还是从第3个点开始比较,没有从第一个点开始比较)。那位好心人帮个忙吧,谢谢了。

ChaChing 发表于 2009-12-30 23:59

个人水平专业有限, 亦非编程问题! 同待高人路过

supersonics 发表于 2010-1-2 08:30

回复 楼主 supersonics 的帖子

现在我把我的程序贴出来,大家帮我看看,我运行完后无法得到所有点和点之间的距离。当形核点个数为8时,应该有28个点和点之间的距离,可我得到的distance的维数为1*23,而且c怎么等于1了,不可理解。大家一定帮帮忙,谢谢大家了。

clear all;
rand('state',5);
x(1)=0;%定义第一个点的横坐标
y(1)=0;%定义第一个点的纵坐标
n=8;%形核点个数
N=n^2;
dpoint=0; %求点和点的距离变量初始化
L=1;
A=L^2;
k=0.7;%密集程度系数
c=0;%点和点距离的个数,即总共有多少个距离
dmax=(2*A/(N*3^0.5))^0.5;
dmin=k*dmax;%点和点之间的最小距离的限定值
mindistance=0;%点和点之间的最小距离变量初始化
for i=2:n
    x(i)=rand(1,1);%随机取第i点的横坐标
    y(i)=rand(1,1);%随机取第i点的纵坐标
    for j=1:i-1
      dpoint(j)=sqrt((x(i)-x(j))^2+(y(i)-y(j))^2);%求第i点到已有点(j点)的距离
      c=c+1;
      distance(1,c)=dpoint(j);%将任意两点的距离存储到距离向量里面
      mindistance=min(distance);%得到向量里面的最小值
      if mindistance<dmin %判断点和点之间的最小距离是否小于给定的最小值
            x(i)=rand(1,1);%重新取第i点的横坐标
            y(i)=rand(1,1);%重新取第i点的纵坐标
            c=c-j;%回退到这次循环开始前c的值;
            continue;
      end
    end
end
页: [1]
查看完整版本: voronoi布点