这个问题的描述很简单,在球面任取四点作一个四面体(三棱锥),这个四面体包含球心的概率是多少。
概要
为了搞定这个问题我先尝试解决平原圆上任意内接三角形包含圆心的概率,通过暴力积分的方法得到概率
终于算出来了之后用程序验证,随机生成10000次,发现成功包含圆心的次数只有2575次,也就是实验结果
重新审查积分公式发现一个地方搞错了(涉及概率密度),纠正后最终得到正确计算方式
搞定二维问题后尝试用同样的方法解决三维的原问题,发现需要利用球坐标系进行任意部分球面面积微元的计算,遂卒。
解决思路
乍一看很简单,但是稍微想一想发现非常麻烦,所以先尝试解一个退化到2维平面的题。
Problem2: 在一个平面圆上任取三点作三角形,该三角形包含圆心的概率。
这个问题看起来比较简单,但是我在5分钟内并不能搞定,所以继续对这道题进行降维打击。
Problem3: 在球的直径上任取两点,该线段包含圆心的概率是。
这个概率是1/2,因为固定一个点,另一个点与第一个点同侧或者异侧是等可能的,异侧的话就能包含圆心。
任意内接三角形包含圆心的概率
按照上述方法,一个圆上任取三点,可以先固定第一个点A,令其角度为0,设第二个点B的角度为θ,由对称性令θ∈[0,π],第三个点C落入与弧AB对称的弧上时,三角形能包含圆心,点C落入与弧AB对称的弧上的概率 P3=θ/2π,点B的角度为θ的概率密度P2=1/π,所以 P2×P3从0积分到π就是总的概率。
实验验证
运行10000次,最终结果,2575次三角形成功包含圆心,7425次没有包含,统计概率为25.75%。
Success: 2575 Failure: 7425 Probability: 0.257500
部分实验图
概率收敛图
根据大数定理,试验次数足够多,频率将趋近于概率。下面三个图标展示了试验次数为100次、1000次、10000次时的收敛曲线。可以看到频率最终趋近于概率0.25。以上结果表明问题数学求解和实验代码的正确性。
后记
根据一维问题答案是1/2,二维问题答案为1/4,我猜测三维问题的答案为1/8,即随机内接四面体包含球心的概率为1/8。但是球面积分涉及球坐标系的多重积分,虽不复杂,但是计算上十分麻烦。正如暴力算法的时间和空间成本通常是最高的一样。
除了这种暴力积分的求解方法,3Blue1Brown 提供了一个十分优雅的解决方法,把对称性发挥到极致,并且将问题转化为抛硬币问题,十分巧妙。链接如下
通过这次折腾,把复习大物时重复训练用到的取微元求积分思想、机器学习里面的实验思路和图表结果绘制、计算机图形学里判断一个点是否在一个三角形面片内的方法、实现代码时对python类的初始化和运算符重载、概率密度和几何概型的概念 都放在一锅里炖了,加深了对各个知识点的理解和所需技能的运用。