• 数理统计


    问题

    在一个圆环上随机取3点,求这3个点组成一个锐角三角形的概率

    题解

    如下图所示:

    ![图 1](https://i.loli.net/2019/04/18/5cb7da63b7766.png)

    取单位圆上任意不同两点A和B,A、B两点确定以后,点A、B、C三点要够成锐角三角形,点C必须在DE之间,否在将构成直角三角形(点C与点D或点E重合)或钝角三角形。设AB弧所对应的圆心角为( heta),则当且仅当( heta in (0, pi)) 时有可能构成锐角三角形。( heta) 的概率密度是 (frac{1}{pi}),此时组成锐角三角形需要C点在AB对应的DE段间的概率是 (frac{ heta}{2pi})。故在一个圆环上随机添加3点,三个点组成一个锐角三角形的概率为

    [int_0^pi frac{1}{pi}cdotfrac{ heta}{2pi}mathrm{d} heta = frac{ heta ^ 2}{4pi ^ 2}igg|_0^pi = frac{1}{4} ]

    Python 代码模拟

    #! /usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    # @Author: wzdnzd
    
    import numpy as np
    
    
    def simulate(n):
        # 圆心角θ所对应的弦长 l = 2 * R * sin(θ/2), R为圆的半径
        def compute(theta):
            if theta > np.pi:
                theta = 2 * np.pi - theta
    
            return 2 * np.sin(theta / 2)
    
        # 根据三角形三条边的平方关系判断是否是锐角、直角或钝角三角形
        def judge(array):
            if len(array) != 3:
                raise ValueError('len(array) must be 3.')
    
            if array[0] ** 2 + array[1] ** 2 > array[2] ** 2:
                return -1
            elif array[0] ** 2 + array[1] ** 2 == array[2] ** 2:
                return 0
            else:
                return 1
    
        acute, right, obtuse = 0, 0, 0
        for _ in range(n):
            angles = sorted(np.random.rand(3) * 2 * np.pi)
            chords = sorted([compute(angles[1] - angles[0]),
                             compute(angles[2] - angles[1]), 
                             compute(2 * np.pi + angles[0] - angles[2])])
    
            flag = judge(chords)
            if flag == -1:
                acute += 1
            elif flag == 0:
                right += 1
            else:
                obtuse += 1
    
        return [x / n for x in [acute, right, obtuse]]
    
    
    if __name__ == "__main__":
        probabilities = simulate(100000)
        print('acute: {}	right: {}	obtuse: {}'.format(
            probabilities[0], probabilities[1], probabilities[2]))
    

    运行结果如下:

    acute: 0.25009  right: 0.0      obtuse: 0.74991
    
  • 相关阅读:
    TCP/IP四层模型
    Java编程题
    大整数阶乘的运算(可以计算1000!) .
    sleep和wait的区别
    Javascript保留字(Javascript Reserved Words)
    WEBLOGIC 内存溢出 解决方案
    Java学习的30个目标以及系统架构师推荐的书
    笔记分析
    MySQL分区(Partition)功能试验
    Java线程:生产者消费者模型
  • 原文地址:https://www.cnblogs.com/betabear/p/10807597.html
Copyright © 2020-2023  润新知