今天有人发了一道初中数学题:
就是4只鸭子在一个圆,求他们在一个半圆的概率。
其实如果用半径和弧度来表示鸭子的位置,可以避开平面坐标二次项的麻烦。
而且显然鸭子是否属于一个半圆只与它们的弧度有关,与它们距离圆心的距离无关。
4只鸭子属于一个半圆的充要条件:其中一只鸭子顺时针转180度,或逆时针转180度,可以扫遍其它的鸭子。
按照这个思路不难写出程序:
set.seed(100)
n <- 1000000
angle <- matrix(runif(n*4, 0, 360), nrow=4)
max.angle <- apply(angle, 2, max)
min.angle <- apply(angle, 2, min)
reverse.angle <- ifelse(angle>180, angle-360, angle)
max.reverse <- apply(reverse.angle,2,max)
min.reverse <- apply(reverse.angle,2,min)
sum(max.angle-min.angle<180 | max.reverse-min.reverse<180)/n
结果就是0.5.
如果用python是这样: