黑马程序员技术交流社区

标题: 有挑战人没有,说思路。。。 [打印本页]

作者: 冯超    时间: 2013-2-15 18:51
标题: 有挑战人没有,说思路。。。
利用随机函数求圆周率ぇ。

    编程思路:设有一个边长为1的正方形ABCD,则其面积为1,则s1 = 1*1=1;以A为圆心,以1为半径画狐,得到一个扇形ABD,s2 = 1*1*PI/4。
A-----------------------B
|                           |
|                           |
|                           |                                                              
|                           |
|                           |
C---------------------- D   
                         此贴为1活跃论坛,2看看技术大侠的思路,一千读者就有一千个哈姆雷特,3斑竹觉得这个题目好就给一个技术分(若没人我就自己说思路,绝不会打酱油。)                                                                                                                                                                          

未命名.jpg (5.72 KB, 下载次数: 36)

未命名.jpg

作者: 寇龙飞    时间: 2013-2-15 22:35
我是来捣乱的.

画狐得到扇形应该是ABC

另外,求圆周率,知道割圆术.你说的随机函数是什么
作者: 姚永生    时间: 2013-2-16 08:10
这个思路蛮好!用一个不断变小的随机数(比如除10),这样就可以得出一个逐渐精确的PI值。很巧妙!
作者: 姚永生    时间: 2013-2-16 08:33
可是,我再认真的思考一下,居然很离谱。
很抱歉,这个我玩不了。
作者: 铿锵科技    时间: 2013-2-16 15:42
等等看你是怎样推算圆周率PI的{:soso_e129:}
作者: 冯超    时间: 2013-2-21 22:59
我来分析:正方形面积为1,扇形面积为1/4 PI;
有图片可以知道:该曲线的方程为x*x + y * y = 1(0<=x,y<=1)
                         若:x*x + y * y <= 1,则该点落在扇形内。

姑且令正方形面积为M,扇形面积为N
  则:M/N = 4/PI;
PI  = 4 * N / M;
   
面积这个东西不好算,用点来表示吧。
设: 落在正方形中的点有M(x,y)个。
       若x*x + y * y <= 1,则M中有N个点落在扇形中。
  1. public class RandomTesy {
  2.         public static void main(String args[])
  3.         {
  4.                 int m = 100254;  //从这里输入M的值
  5.                 double PI = (double)4 * mNumber(m) / m;
  6.                
  7.                 System.out.println(PI);
  8.         }
  9.        
  10.         //产生的N的个数
  11.         public static int mNumber(int m)
  12.         {
  13.                 int n = 0;
  14.                 for(int i = 1; i <= m; i++)
  15.                 {
  16.                         double x = Math.random();//x大于或等于 0.0 但小于 1.0 的伪随机 double 值
  17.                         double y = Math.random();
  18.                        
  19.                         if(x * x + y * y <= 1)
  20.                         {
  21.                                 n++;
  22.                         }
  23.                 }
  24.                 return n;
  25.         }

  26. }
复制代码
************************************
   很抱歉这个帖子我没做好,今天刚回到学校,顺便把这个题目的思路给说下,大神有更好的想法也可以说一下。PI的值与你输入的m的值有关,若m为我上面的那个100254,则PI为3.143056636144194。

未命名.jpg (6.27 KB, 下载次数: 29)

未命名.jpg

未22命名.jpg (49.28 KB, 下载次数: 32)

未22命名.jpg

作者: 江华    时间: 2013-2-21 23:50
汗!
终于,想明白是怎么会事了!
这个想法真的奇特!!!!
作者: 江华    时间: 2013-2-22 00:13
这个是这样计算的。
圆 的方程式是    x*x+y*y=R*R  【圆半径的平方】。
圆的面积是   2*R*R*PI。
圆外切正方形的面积是  2R*2R

根据以上公式,随机的出现的点,所在的位置,会因为圆所占正方面积的比例,而成比例出现在圆内。

因为是随机的,也可能存在某两次出现了相同的值。

作者: 冯超    时间: 2013-2-22 10:01
江华 发表于 2013-2-22 00:13
这个是这样计算的。
圆 的方程式是    x*x+y*y=R*R  【圆半径的平方】。
圆的面积是   2*R*R*PI。

是的·谢谢关注本人的帖子@
作者: 冯超    时间: 2013-2-22 10:01
江华 发表于 2013-2-22 00:13
这个是这样计算的。
圆 的方程式是    x*x+y*y=R*R  【圆半径的平方】。
圆的面积是   2*R*R*PI。

是的·谢谢关注本人的帖子。
作者: honeys天空s    时间: 2013-10-6 16:51
这是用的JAVA写的代码
作者: honeys天空s    时间: 2013-10-6 17:11
令正方形面积为M,扇形面积为N
为什么:“M/N = 4/PI”啊; 有点不明白,求解释啊!!





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2