假设我想对凸多边形内的点进行均匀采样。
这里和互联网上描述的最常见的方法之一通常包括对多边形进行三角测量,并使用不同的方案在每个三角形内生成均匀的随机点。
我发现最实用的方法是从均匀分布生成指数分布,例如 -log(U) 并将总和标准化为 1。
在 Matlab 中,我们将使用以下代码在三角形内均匀采样:
vertex=[0 0;1 0;0.5 0.5]; %vertex coordinates in the 2D plane
mix_coeff=rand(10000,size(vertex,1)); %uniform generation of random coefficients
x=-log(x); %make the uniform distribution exponential
x=bsxfun(@rdivide,x,sum(x,2)); %normalize such that sum is equal to one
unif_samples=x*vertex; %calculate the 2D coordinates of each sample inside the triangle
这工作得很好:
然而,对三角形以外的任何东西使用完全相同的方案都会失败。以四边形为例,我们得到以下结果:
显然,采样不再均匀,添加的顶点越多,“到达”角落就越困难。
如果我首先对多边形进行三角测量,那么每个三角形中的均匀采样很容易,并且显然可以完成工作。
但为什么?为什么需要先进行三角测量?
哪个特定属性具有三角形(以及一般的单纯形,因为这种行为似乎扩展到 n 维构造),使其适用于它们而不适用于其他多边形?
如果有人能给我对这些现象的直观解释,或者只是指出一些可以帮助我理解正在发生的事情的参考资料,我将不胜感激。