利用Python求阴影部分的面积实例代码

  

  

今天看到微信群里一道六年级数学题,如下图,求阴影部分面积

  

利用Python求阴影部分的面积实例代码

  

看起来似乎并不是很难,可是博主添加各种辅助线,写各种方法都没出来,不得已而改用Python写代码来求面积了

  

  

1。用Python将上图画在坐标轴上,主要是斜线函数和半圆函数

  

利用Python求阴影部分的面积实例代码

  

2。均匀的在长方形上面洒满豆子(假设是豆子),求阴影部分豆子占比*总面积

  

利用Python求阴影部分的面积实例代码

  

  

<强> 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。举一反三,类似于这种不规则的面积,只要可以写出来函数,就可以求解面积。

利用Python求阴影部分的面积实例代码