发布网友
共3个回答
热心网友
用线性代数的思路,三角形的一个顶点作为坐标原点,两条临边对应两个向量,分别叫它们为e1和e2,
因为是三角形所以 e1, e2 一定线性无关的,用它们作为基底构成一个二维线性空间,三角形在这个空间里刚好是单位正方形的下三角部分,在单位正方形内很容易产生平均分布的点,x, y 坐标分别为0..1 之间的随机数,不过会有一半的点落在三角形外面,外面这部分是一个一模一样的三角形,沿矩形中心转180°刚好重合,这里面的点也可以对应过去,方法是 (1,1) - (x, y),见下图:
不用判断点是否在三角形内,norm((x,y)) 和norm( (1,1) - (x,y)) 哪个小就取哪个,一定是在三角形内的,然后得到如何下结果:
构造一个矩阵 M = (e1,e2),M*(x,y) 把点转换回原来的空间就可以了:
你取三角形的其中两个边,然后取俩随机数,作为基于这两个边的坐标,它会在一个平行四边型上。如果在平行四边型的另外那半拉,就翻转回来。
关于”线密度“的问题,按某人的看法,我推论一下:
设矩形内有N个点,假设它们是按某人的算法抽取的,已经是“均匀分布”好了的。那么,它们必然在一条边上的线密度是N/a,概率密度是1/a;另一条边上的线密度是N/b,概率密度是1/b。完B了,线密度不均匀!!!肿末办?!!
实验一下,懒得写C++,直接Perl好了。
生成两组十万个随机数,一组来自于[0, 1000)的随机数除以1000,另一组来自于[0, 1000)的随机数反复排除直至小于1。然后分别排序、求相邻值的间距。
热心网友
既然是正三角形,就可以把大的正三角形分解成4个小的正三角形(把每个边的中点连起来)。然后再把每个小的正三角形分成四个更小的正三角形。如此循环分下去,直到分的够细。每个小的正三角形的中心即为样本。要随机的话,把所有样本乱序就好了。
然后,是那个匿名用户的“在圆上随机选择一条弦”,就是
说的「贝特朗悖论」吧?这压根不是个问题,这个悖论是说我们必须定义清楚「样本空间」,而在这里,样本空间有歧义么?
我就很搞不清楚,这个问题,如果给那些做过monte carlo的人,甚至都不必是专门的研究概率统计的人,都没有任何歧义,为啥有一些数学系的学生,查也不查一查,就出来到处跟人argue呢?
回到这个问题。其实很简单,rejection method就可以解决。但是如果简单粗暴的画矩形再rejection
热心网友
我们再来理论上推导一下:
假如我用坐标缩放的方法,获得了尺寸为a x b的矩形内的N个点。这N个点在短边上的线密度就是N/a,在长边上的密度就是N/b。
然后,把矩形补成方的,补的那块面积就是(b-a) x b。在上面用同样的方法成比例地搞K个点,让K与N和这俩的面积成比例,即K : N = (b-a) : a,这样就有K = N * (b-a) / a。然后,摞到一起,总的点数就是M = K+N = N*b/a。往长边上投射,线密度是M / b = N / a。
假如使用投射后截取的方法:我们首先在b x b尺寸的正方形上搞M个点,然后再截一块a x b的矩形出来,上面的点数N,就有M : N = b : a,完了。
这就好比:阿基米德定律说物体受的浮力等于排开水的重力,那么1kg水有没有可能浮起2kg物体?
重新模拟了一下2D的实际情景,两种方法的X坐标分别为缩放得到和剔除得到,都是得到2x5矩形内的100K个点;Y坐标使用相同的方法得到。然后,计算宽度为1的横、纵向条带内部的点的平均纵、横向距离,统计这些距离的均值与标准差。因为懒,依然使用Perl脚本: