今天看到微信群里一道六年级数学题,如下图,求阴影部分面积
看起来似乎并不是很难,可是博主添加各种辅助线,写各种方法都没出来,不得已而改用Python写代码来求面积了
1。用Python将上图画在坐标轴上,主要是斜线函数和半圆函数
2。均匀的在长方形上面洒满豆子(假设是豆子),求阴影部分豆子占比*总面积
<强> 1。做图源码强>
进口matplotlib。pyplot作为plt 进口numpy np def init (): plt.xlabel (“X”) plt.ylabel (Y) 无花果=plt.gcf () fig.set_facecolor(浅黄色) fig.set_edgecolor(“黑色”) ax=plt.gca () ax.patch.set_facecolor(浅灰色)#设置ax区域背景颜色 ax.patch.set_alpha(0.1) #设置ax区域背景颜色透明度 ax.spines['正确'].set_color(“无”) ax.spines .set_color(“顶级”)(“无”) ax.xaxis.set_ticks_position(底部) ax.yaxis.set_ticks_position(左) ax.spines“底”。set_position((“数据”,0)) ax.spines['左']。set_position((“数据”,0)) #原下半函数 def f1 (px, r, a, b): 返回b - np。√r * * 2 - (px - a) * * 2) #斜线函数 def f2 (px, m, n): 返回px * n/m #斜线函数2 def f3 (px, m, n): 返回n - 1 * px * n/m if __name__==癬_main__”: r=4 #圆半径 m=8 #宽 n=4 #高 a、b=(4, 4) #圆心坐标 init () x=np。linspace (0 m 100 *米) y=np。linspace (100 0 n * n) #半圆形 日元=f1 (x, r, a, b) plt。情节(x, y?) #矩形横线 plt.plot (x.min (), x.max ()), (y.min (), y.min ()),“g”) plt.plot (x.min (), x.max ()), (y.max (), y.max ()),“g”) plt.plot (x.max (), x.max ()), (y.max () + 2, y.max () + 2),“g”) #画点(8,6)避免图形变形 #矩形纵向 plt.plot (x.min (), x.min ()), (y.min (), y.max ()),“g”) plt.plot (x.max (), x.max ()), (y.min (), y.max ()),“g”) #斜线方法 y2=f2 (x, m, n) plt。情节(x, y2,“紫色”) #阴影部分填充 xf=x (np。在(x & lt;=0.5 * x.max ())) plt。fill_between (xf y.min (), f1 (xf r a、b),在那里=f1 (xf, r, a, b) & lt;=f2 (xf, m, n), facecolor=' y ',插入=True) plt。fill_between (xf y.min (), f2 (xf, m, n),在那里=f1 (xf, r, a, b)比;f2 (xf, m, n), facecolor=' y ',插入=True) #半圆填充 plt。fill_between (x, y?, y.max (), facecolor=畆’,α=0.25) plt.show () Draw.py
2。计算源码,其中一方是要不要计算图形边框上的点,理论上一边只能为真;t设置越大运行时间越长也越精准
进口numpy np def f1 (px, r, a, b): 返回b - np。√r * * 2 - (px - a) * * 2) def f2 (px, m, n): 返回px * n/m if __name__==癬_main__”: r=4 #圆半径 m=8 #宽 n=4 #高 a、b=(4, 4) #圆心坐标 t=100 #精度 x=np。linspace (0 m 2 * t *米) y=np。linspace (t 0 n * n) #半圆形 日元=f1 (xs, r, a, b) #斜线 y2=f2 (xs, m, n) numin=0 numtotel=0 一边=True #是否计算边框 x在xs: 在y y: 如果不是: 如果(x & lt;=0) | (x祝辞=8)| (y & lt;=0) | (y祝辞=4): 继续 numtotel +=1 如果x比;=4: 继续 日元=f1 (x, r, a, b) y2=f2 (x, m, n) 如果y1, y2祝辞=0: 如果y2 - y比;0: numin +=1 如果(y2 - y==0): numin +=1 elif y2 - y1比;0: 如果y1 - y比;0: numin +=1 如果(y2 - y==0): numin +=1 打印(32 * numin/numtotel) calc.py
1。此种算法t为100时,阴影面积为1.268;t为1000时,阴影面积为1.253,已经非常接近正确答案(正确答案1.252)
2。举一反三,类似于这种不规则的面积,只要可以写出来函数,就可以求解面积。