随机弦之长

题目:

在一个半径为r的圆中,随机选取一条弦,则这条弦的弦长c比半径r长的概率是多少?
![](http://7xl5w6.com1.z0.glb.clouddn.com/20170630141217.png? imageView2/1/w/600/h/400/format/webp/q/75|watermark/2/text/5oKf56m6/font/5b6u6L2v6ZuF6buR/fontsize/320/fill/IzAwMDAwMA==/dissolve/100/gravity/SouthEast/dx/10/dy/10|imageslim)


分析一:

先在圆上随机选取一点A,再在圆上随机选取另一点A',则线段AA'即为所选取的弦。


选定点A后,需满足AA' >= r,即∠A'CA不小于π/6,因此P = 1 - ((π/6) * 2) / π = 1 - 1/3 = 2/3

import random
import math

r = 1

def random_point():
    while True:
        rho = random.uniform(0, math.pi * 2)

        x = r * math.cos(rho)
        y = r * math.sin(rho)

        return x, y

def main():
    c = (math.sqrt(3) / 2) * r
    
    acc = 0;
    acc_exceed = 0
    while acc < 10000:
        x1, y1 = random_point()
        x2, y2 = random_point()

        d = math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2)
        if d >= r:
            acc_exceed += 1
        acc += 1

    print float(acc_exceed) / float(acc)

if __name__ == '__main__':
    main()

分析二:

先在圆内随机选取一点E,以此点作为弦的中点,过点E作一条直线,且垂直于点E与圆心O的连线,与圆相交得所选取的弦。


若弦长c小于半径r,则有c2 <= (AC2 - d2) / 4 ,得c’ = (厂3)r/2。当点E在半径为c’圆内时,构成的弦则满足题目要求,于是可以用圆的面积来求概率,得P = π*c'*c' / π*r*r = 3/4

import random
import math

r = 1

def random_point():
    while True:
        x = random.uniform(0, r)
        y = random.uniform(0, r)

        d = math.sqrt(x*x + y*y)
        if d <= r:
            return d

def main():
    c = (math.sqrt(3) / 2) * r
    
    acc = 0
    acc_exceed = 0
    while acc < 10000:
        d = random_point()
        if d <= c:
            acc_exceed += 1
        acc += 1

    print float(acc_exceed) / float(acc)

if __name__ == '__main__':
    main()

分析三:

弦距离圆心的长度d的取值范围为[0, r),随机生成弦到圆心的距离d,再由此作弦。


假设距离d[0, 1)上服从均匀分布,那么概率为P = (厂3) / 2

import random
import math

r = 1

def random_point():
    return random.uniform(0, r)

def main():
    c = (math.sqrt(3) / 2) * r
    
    acc = 0;
    acc_exceed = 0
    while acc < 1000000:
        d = random_point()
        if d <= c:
            acc_exceed += 1
        acc += 1

    print float(acc_exceed) / float(acc)

if __name__ == '__main__':
    main()

做完这道题,不由得发问:为什么选择不同的随机选取方式,结果会有这么大的差异呢?这三种随机选取方式的本质不同又是什么呢?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 高级钳工应知鉴定题库(858题) ***单选题*** 1. 000003难易程度:较难知识范围:相关4 01答案:...
    开源时代阅读 5,987评论 1 9
  • 1. 关于诊断X线机准直器的作用,错误的是()。 (6.0 分) A. 显示照射野 B. 显示中心线 C. 屏蔽多...
    我们村我最帅阅读 10,838评论 0 5
  • 《机械制图》10%(50+30=80) 单项选择题 Q-B1-E-001 L 基本幅面不能满足需要而采用加长幅面时...
    开源时代阅读 3,980评论 1 1
  • 很多时候,机会总是与你不期而遇,懂得抓住机会,才能真正做到成功。 上午和他们去环亚签单,很开心,虽然是小马的单子,...
    Cherish_U阅读 139评论 0 0
  • 浪矢雄治开了一家浪矢杂货店,而浪矢经常被玩皮的小孩故意念成烦恼,因此调皮的小孩恶作剧般地把自己的烦恼写在纸上寄给杂...
    云淼淼阅读 705评论 0 0