众所周知,小学生题包罗万象,做不来的题都叫小学生题。这就来了,之前在网上看到一个求阴影面积的“小学生”题,如下:
题:
答:
这类圆和矩形重叠的题很典型,自以为通过割补、重叠等 *** 作可以像小学生一样求出面积,但是尝试后就会发现,貌似总是缺了一点东西。对,正常的小学生题应该是左下角的曲边三角也是阴影,那样就可以通过割补法之类的凑成规则的图形求解。因此这道题的核心本质就是求左下角的小曲边三角形面积。类似的还有以下这道题,本质上是一样的。
话不多说,开始。抽象出以下模型,假设圆半径为1。
可以看到
因此最主要的就是求弓形面积 ,而其关键便是求其所对的圆心角。
方法一:勾股定理
做以下辅助线:
设,则根据相似三角形有,在中,应用勾股定理,得到:
故得到,则有,,根据三角函数则有,则,则有:
而
则有
方法二:三角函数
作以下辅助线
则有
关键是求. 记,则有,,则有
故有
方法三:积分
最直接暴力的方法当然是用微积分了,以A点为原点建立坐标系,关键求交点P坐标。
设P=,根据,有
得,则有面积积分:
方法四:蒙特卡洛模拟
若只是求数值解,有一种实验性的方法,即蒙特卡洛方法,对于不规则图形面积求解尤其方便,只需要短短几行代码便可实现。
其基本思想是:往图形中均匀撒点,那么当撒点数很大时,落在每个区域的点数占比等于面积占比,典型的案例就是求圆周率及Buffon投针实验。
Python代码如下:
import numpy as np N = 10000000 counts = 0 for i in range(N): point = np.random.random(2) if not ((point[1] < point[0] / 2) and ((point[0]-1.)**2+(point[1]-1.)**2>1)): counts = counts + 1 print("阴影部分面积近似为:", 1- counts / N * 1**2)
这里由于阴影部分面积比较小,若统计掉在其内的粒子数会较少,相同总粒子数时,误差会较大。因此可以反过来统计掉在区域外的粒子数,求区域外面积,然后作差。上述代码运行结果为0.078257,已经很接近真实面积了。相对误差随总粒子数的变化见下图。通过一些适当加速方法可以提高蒙卡收敛的速度,可以通过更小的粒子数得到误差较小的结果。
综上所述,该题不可能是小学生题,至少要知道勾股定理及三角函数,应当是高中题较为合适。当然,如果小学已经会Python了,那当我没说。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)