问题

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

题解

如下图所示:

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

Python 代码模拟

#! /usr/bin/env python3
# -*- coding: utf-8 -*-# @Author: wzdnzdimport numpy as npdef simulate(n):# 圆心角θ所对应的弦长 l = 2 * R * sin(θ/2), R为圆的半径def compute(theta):if theta > np.pi:theta = 2 * np.pi - thetareturn 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 -1elif array[0] ** 2 + array[1] ** 2 == array[2] ** 2:return 0else:return 1acute, right, obtuse = 0, 0, 0for _ 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 += 1elif flag == 0:right += 1else:obtuse += 1return [x / n for x in [acute, right, obtuse]]if __name__ == "__main__":probabilities = simulate(100000)print('acute: {}\tright: {}\tobtuse: {}'.format(probabilities[0], probabilities[1], probabilities[2]))

运行结果如下:

acute: 0.25009  right: 0.0      obtuse: 0.74991

转载于:https://www.cnblogs.com/betabear/p/10807597.html

数理统计 - 圆环上随机取3个点组成一个锐角三角形的概率相关推荐

  1. vue中从数组中取一个随机颜色,随机取1到10的一个整数

    data中定义数据 colorArr:[ " red ", " black " , " yellow ", " green &qu ...

  2. matlab:圆内均匀随机取点

    文章目录 1.舍选法 2.反函数法 3.代码 这里介绍两种圆内均匀取点的方法:舍选法和反函数法. 1.舍选法 顾名思义,舍选法是指在正方形(边长等于圆直径)的上面均匀撒点,然后在正方形上画圆,超出圆形 ...

  3. 等概率随机取数算法的几种实现(洗牌算法)

    等概率随机取数算法的几种实现 最近读了项目中的工具脚本,发现一个随机取数的函数,功能大概是从M个数中不重复的随机取出N个数,算是数组随机排序然后取前N个值的变种. 脚本实现采取原始的方法,每随机取一个 ...

  4. 算法题:一个圆环上有100个灯泡,灯泡有打开和关闭两种状态,灯泡的状态随机,按一个灯泡的开关,相邻的两个灯泡的状态也发生一次变化。比如暗-亮-暗,按中间灯泡,变化为亮-暗-亮。问设计一道算法,使得所有

    算法题:一个圆环上有100个灯泡,灯泡有打开和关闭两种状态,灯泡的状态随机,按一个灯泡的开关,相邻的两个灯泡的状态也发生一次变化.比如暗-亮-暗,按中间灯泡,变化为亮-暗-亮.问设计一道算法,使得所有 ...

  5. 算法题:一个圆环上有100个灯泡,灯泡有打开关闭两种状态,灯泡状态随机。设计算法,使灯泡都亮。

    算法题:一个圆环上有100个灯泡,灯泡有打开关闭两种状态,灯泡状态随机,按一个灯泡,相邻两个灯泡的状态也会改变. eg: ' 暗 - 亮 - 暗 ' 按中间灯泡 ,变化为 ' 亮 - 暗 - 亮 '. ...

  6. 3D视觉识别案例:3D无序棒料抓取,阀体圆环上下料,电机定子上料

    3D无序棒料抓取 某知名汽车行业 项目背景 长春某知名汽车行业,需求3D视觉实现圆形棒材的上料自动化. 作业流程 钢棒依次经过剪切/锯切下料,从深筐中抓取,先放置在V型二次定位平台上,再从平台抓到输送 ...

  7. spring 数组中随机取几个_游戏编程中需要掌握哪些数学物理知识

    一. 相似三角形知识的应用 在摇杆控制物体运动的游戏中,摇杆的手柄(下图黄色圆饼),不能移出摇杆所在的套(下图灰色圆环),也就是说摇杆偏离中心点的最大距离为max_R.一旦触摸移动过程中移动的点超出此 ...

  8. 利用边缘灰度变化建模,来提高圆环直径求取精度

    简 介: 利用对所获得的圆环边缘亮度平均变化曲线,利用Sigmoid函数进行建模逼近,可以对原来经由HoughCircle所获得的半径进行补偿.对于利用扫描仪所获得的图片进行实际处理,可以看到它可以获 ...

  9. mysql快速随机_MySQL随机取数据最高效的方法

    mysql随机取数据最高效率的方法 发现在SQL语句里有一个 ORDER BY rand() 这样的一个语句,这个说是用着方便,但是效率实在是太低了,于是我用了以下的方法来优化,就是用JOIN表的方法 ...

最新文章

  1. win10无法连接到Windows(SENS)服务网络连不上怎么办
  2. 兰州大学计算机考研专硕学费,2018年兰州大学在职硕士研究生学费标准
  3. 岗位推荐 | 阿里巴巴达摩院招聘自然语言处理、机器翻译算法专家
  4. 基于InkCanvas实现的桌面涂鸦工具-[ WPF开发 ]
  5. 在一个数组中删除另一个数组存在的值
  6. 国家开放大学2021春1129土木工程力学(本)题目
  7. CSliderCtrl(滑块)控件
  8. CentOS 7.6虚拟机ping: www.baidu.com: Name or service not known
  9. 微型计算机三部分基本组成,微型计算机的基本组成-电脑自学网
  10. Excel2013制作甘特图
  11. 001-三阶魔方-概述及层先法
  12. 语音转文字软件哪个好,这三款值得收藏
  13. 上传图片校验图片类型、大小及尺寸
  14. 10分钟制作UWP汉堡菜单
  15. NLifeBill第四章添加页面
  16. android Qwerty 键盘搜索联系人分析与实现(支持多音字)
  17. 小a与星际探索 线性基算法
  18. Python:设置不显示Using TensorFlow backend及FutureWarning: Passing (type, 1) or ‘1type‘ as a synonym of typ
  19. 如何在Photoshop中为黑白老式照片着色
  20. ORACLE EBS WORKFLOW实现多附件下载

热门文章

  1. 【年终巨献】车联网距离我们还有多远?《5G与车联网技术》给您最专业的解读...
  2. 【转载】贵妃醉酒百态(原创)
  3. 视频文件损坏无法播放怎么修复?
  4. 督办管理系统——让企业工作落实到位
  5. jenkins打包报Archiving artifacts
  6. Redis 部署方式(单点、master/slaver、sentinel、cluster) 概念与区别
  7. Android SIGABRT的可能原因及开启手机Log日志
  8. python中的折线图、散点图、直方图绘制和图像参数设置
  9. NLP 前置知识2 —— 深度学习算法
  10. android操作蓝牙打印机(上)