本文研究如何在区域内随机均匀布点, 来源于 <算法可视化 Visualizing Algorithms>, 这在CAE, 图形学中都有重要意义.
http://www.bilibili.com/video/av2182749/
比如在 3*1 的区域内随机布点 500 个, 如果每个点都是坐标都是随机给的, 结果可能并不均匀.
如 randomPoints.m 所演示的.
1 function randomPoints() 2 xmax = 3; 3 ymax = 1; 4 N = 500; 5 x = xmax*rand(N,1); 6 y = ymax*rand(N,1); 7 figure(1); 8 plot(x,y,'.','markerSize',5,'markerEdgeColor','r'); hold on; 9 title('Random Sampling'); 10 axis equal; 11 axis([0,xmax,0,ymax]); 12 set(gca,'xTick',[],'yTick',[]); 13 end
接下来介绍一种方法称为 Best-Candidate Sampling, 基本思路是, 没加一个点需要在若干 (numCandidates) 点 (比如 10)中寻找和已知点最近距离最大的那个点.
每加一个点的伪代码如下:
bestCandidate= 0; bestDistance = 0; loop i=1:numCandidates{ c = [rand(),rand()]; % 随机点 c 的坐标 d = distance( findClosest(samples,c), c ); % 获取 c 和已知点中最近的距离