【发布时间】:2020-12-25 19:26:24
【问题描述】:
假设我想对凸多边形内的点进行均匀采样。
这里和互联网上描述的最常见的方法之一是对多边形进行三角剖分,并使用不同的方案在每个三角形内生成均匀随机的点。
我认为最实用的一种方法是从均匀分布生成指数分布,以 -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 维构造)使其适用于它们而不适用于其他多边形?
如果有人能给我对这些现象的直观解释,或者只是指出一些可以帮助我理解正在发生的事情的参考资料,我将不胜感激。
【问题讨论】:
标签: matlab random polygon triangulation