桥型冲孔板关键词:三角形冲孔网
标题:如何在三角形(比如正三角形)里随机取点?
桥型冲孔板
来源:知乎
文章内容: 我实现过随机取任意三角形内一点的算法:
三角形三个顶点A,B,C
首先:
求得两个向量
ab = B - A
ac = C - A。
然后:
使用rand()获得两个0~1之间的随机实数x, y
如果x+y>1, 那么令x=1-x, y=1-y
如果x+y<=1, 那么令x=x, y=y
*后:
随机点 = A + x * ab + y‘ * ac
给个图像:
看到有人质疑这个算法,我也不会用严谨的数学方法来证明.就发两幅图像佐证一下吧:
两幅图中,第一幅是正方形内随机取点12000000次生成的图像.第二幅是三角形内随机取点4000000次生成的图像.看上去雪花屏的感觉是一样的.
-----------------桥型冲孔板-------
参考 @李晓生答案中的链接:uniform random point in triangle
我使用这个公式P=A*(1 - sqrt(r1)) + B*sqrt(r1)*(1 - r2) + C*r2*sqrt(r1),也生成了同样的雪花屏图像.
------------------------
关于均匀与随机.
举个例子:假如你娶了3个媳妇,要做到"雨露均沾",有两种办法:
第一种,三个轮流着来.每次严格按ABCABCABC...的顺序,这叫均匀.
第二种,每次ABC中都有1/3的概率被选中,这叫随机.
所以均匀是规则的,随机是不规则的.对于这个问题,只能做到随机,无法做到绝对的均匀.
还有个相关的问题:随机三维单位向量的生成算法如何做到均匀分布? - 叶飞影的回答桥型冲孔板