查看: 5329| 回复: 12
收起左侧

Google : 随机生成圆中的点

wwwyhx | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   177
88%
12%
25

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
Given a perfect random generator Random(n) which can generate number between
[0,1], write a program to generate a random pair of (x, y) within a circle
of radius 1, and with (0,0) center with uniform distribution inside the
circle.  What is the expect probability of values fall into the circle?

上一篇:会python语言的请进。
下一篇:Facebook, 计算分布在多台机器上数的median
lawzlo 2014-9-17 16:19:43 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   0
0%
0%
0
wwwyhx 发表于 2011-9-2 04:17
对的,如果是通过随机产生夹角和距离再用极坐标就欠妥了, 密度不一样

能不能解释下为什么密度不一样,刚才想了一下没想通,产生的x为半径,y为与水平轴顺时针形方向形成的夹角。
回复

使用道具 举报

coder 2011-9-2 03:41:17 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   1
100%
0%
0
我想地太简单了么?

  1. import java.util.Random;

  2. public class Random_circle {
  3.         Random r;
  4.         double x,y,temp;
  5.         Random_circle(int i){// i is the number of pairs you want
  6.                 r = new Random();
  7.                 while(i>0){
  8.                         x=random();
  9.                         y=random();
  10.                         temp = (Math.sqrt(Math.pow(x,2)+Math.pow(y,2)));
  11.                         if(temp<=1)
  12.                                 output(x,y);
  13.                         i--;
  14.                 }
  15.         }
  16.         private double random(){
  17.                 return r.nextDouble();
  18.         }
  19.         private void output(double x, double y){
  20.                 System.out.println("("+x+","+y+")");
  21.         }
  22.         public static void main(String[] args){
  23.                 Random_circle rc = new Random_circle(100);
  24.         }

  25. }
复制代码
回复

使用道具 举报

 楼主| wwwyhx 2011-9-2 04:15:01 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   177
88%
12%
25
我想地太简单了么?
coder 发表于 2011-9-2 03:41



    对的,如果是通过随机产生夹角和距离再用极坐标就欠妥了, 密度不一样
回复

使用道具 举报

 楼主| wwwyhx 2011-9-2 04:17:08 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   177
88%
12%
25
我想地太简单了么?
coder 发表于 2011-9-2 03:41



    对的,如果是通过随机产生夹角和距离再用极坐标就欠妥了, 密度不一样
回复

使用道具 举报

flslamdunk 2011-9-17 02:17:18 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   85
100%
0%
0
http://www.anderswallin.net/2009 ... -polar-coordinates/

这个方法挺好, 因为靠近圆心的地方密度高, 所以在选择半径的时候用sqrt(Random()) 而不是Random()
回复

使用道具 举报

 楼主| wwwyhx 2011-9-17 03:44:43 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   177
88%
12%
25
这个方法挺好, 因为靠近圆心的地方密度高, 所以在选择半径的时候用sqrt(Random()) 而不是Random()
flslamdunk 发表于 2011-9-17 02:17



    是个好方法,但是这个怎么证明呢??
回复

使用道具 举报

Imbalism 2011-9-17 12:26:15 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   42
100%
0%
0
先生成r*r正方形中随机的点,然后如果超出圆的范围,就抛弃,重新生成一个。
回复

使用道具 举报

iveney 2011-9-29 05:15:50 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   59
100%
0%
0
本帖最后由 iveney 于 2011-9-29 05:17 编辑
是个好方法,但是这个怎么证明呢??
wwwyhx 发表于 2011-9-17 03:44



    sample bounding box 裡的點,然後 output 圓裡面的點的做法是 rejection sampling,跟 Monte Carlo 很类似。

   那篇文章里的方法,用的是 inverse transform sampling。r 的 cdf 是 r^2/R^2, inverse function 是 R sqrt(u)。
回复

使用道具 举报

 楼主| wwwyhx 2011-9-29 09:10:34 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   177
88%
12%
25
sample bounding box 裡的點,然後 output 圓裡面的點的做法是 rejection sampling,跟 Monte Carlo 很类似。

   那篇文章里的方法,用的是 inverse transform sampling。r 的 cdf 是 r^2/R^2, inverse function 是 R sqrt(u)。
iveney 发表于 2011-9-29 05:15


"inverse transform sampling" 太复杂了, 公式表示看不懂, 这个看来是google面统计的
回复

使用道具 举报

tedshow 2011-10-1 01:38:35 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   6
100%
0%
0
哇 我一来就中弹了 原来R和theta的方法没有直接reject来的有效
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表