原标题:Python求阴影部分面积

一、前言说明

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

Python学习资料或者需要代码、视频加Python学习群:516107834

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

二、思路介绍

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

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

三、源码设计

1.做图源码

import matplotlib.pyplot as plt

import numpy as np

def init():

plt.xlabel('X')

plt.ylabel('Y')

fig = plt.gcf()

fig.set_facecolor('lightyellow')

fig.set_edgecolor("black")

ax = plt.gca()

ax.patch.set_facecolor("lightgray") # 设置ax区域背景颜色

ax.patch.set_alpha(0.1) # 设置ax区域背景颜色透明度

ax.spines['right'].set_color('none')

ax.spines['top'].set_color('none')

ax.xaxis.set_ticks_position('bottom')

ax.yaxis.set_ticks_position('left')

ax.spines['bottom'].set_position(('data', 0))

ax.spines['left'].set_position(('data', 0))

# 原下半函数

def f1(px, r, a, b):

return b - np.sqrt(r**2 - (px - a)**2)

# 斜线函数

def f2(px, m, n):

return px*n/m

# 斜线函数2

def f3(px, m, n):

return 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*m)

y = np.linspace(0, n, 100*n)

# 半圆形

y1 = f1(x, r, a, b)

plt.plot(x, y1)

# 矩形横线

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.plot(x, y2, 'purple')

# 阴影部分填充

xf = x[np.where(x <= 0.5*x.max())]

plt.fill_between(xf, y.min(), f1(xf, r, a, b), where=f1(xf, r, a, b) <= f2(xf, m, n),

facecolor='y', interpolate=True)

plt.fill_between(xf, y.min(), f2(xf, m, n), where=f1(xf, r, a, b) > f2(xf, m, n),

facecolor='y', interpolate=True)

# 半圆填充

plt.fill_between(x, y1, y.max(), facecolor='r', alpha=0.25)

plt.show()

Draw.py

2.计算源码,其中side是要不要计算图形边框上的点,理论上side只能为True;t设置越大运行时间越长也越精准

import numpy as np

def f1(px, r, a, b):

return b - np.sqrt(r**2 - (px - a)**2)

def f2(px, m, n):

return px*n/m

if __name__ == '__main__':

r = 4 # 圆半径

m = 8 # 宽

n = 4 # 高

a, b = (4, 4) # 圆心坐标

t = 100 # 精度

xs = np.linspace(0, m, 2*t*m)

ys = np.linspace(0, n, t*n)

# 半圆形

y1 = f1(xs, r, a, b)

# 斜线

y2 = f2(xs, m, n)

numin = 0

numtotel = 0

side = True # 是否计算边框

for x in xs:

for y in ys:

if not side:

if (x <= 0) | (x >= 8) | (y <= 0) | (y >= 4):

continue

numtotel += 1

if x >= 4:

continue

y1 = f1(x, r, a, b)

y2 = f2(x, m, n)

if y1 - y2 >= 0:

if y2 - y > 0:

numin += 1

if (y2 - y == 0) and side:

numin += 1

elif y2 - y1 > 0:

if y1 - y > 0:

numin += 1

if (y2 - y == 0) and side:

numin += 1

print(32*numin/numtotel)

calc.py

四、最后小结

1.此种算法t为100时,阴影面积为1.268;t为1000时,阴影面积为1.253,已经非常接近正确答案(正确答案1.252)

2.举一反三,类似于这种不规则的面积,只要可以写出来函数,就可以求解面积.

2.下面有三种求解方法,第三种表示比大学高数还难看懂,你们呢?

责任编辑:

python 封闭图形面积_Python求阴影部分面积相关推荐

  1. python求不规则图形面积_Python求阴影部分面积

    一.前言说明 今天看到微信群里一道六年级数学题,如下图,求阴影部分面积 看起来似乎并不是很难,可是博主添加各种辅助线,写各种方法都没出来,不得已而改用写Python代码来求面积了 二.思路介绍 1.用 ...

  2. python正方形阴影面积计算_Python求阴影部分面积

    一.前言说明 今天看到微信群里一道六年级数学题,如下图,求阴影部分面积 看起来似乎并不是很难,可是博主添加各种辅助线,写各种方法都没出来,不得已而改用写Python代码来求面积了 二.思路介绍 1.用 ...

  3. python 封闭图形面积_python实现计算图形面积

    用Python编写关于计算图形面积的代码实现,供大家参考,具体内容如下 #寒假打卡28天第7天 import math class Round(): #圆形 def __init__(self, R) ...

  4. python 封闭图形面积_python opencv填充未完全闭合的等高线

    我使用openCV来查找给定图像的外部轮廓并填充它. 我使用的图像作为输入是裤子的图像,就像一个附加的.问题是有时(如附件中所示)轮廓不是完全闭合的,然后我无法填充它.在这种情况下我能做什么? 请参阅 ...

  5. 半圆阴影_六年级数学:怎么求阴影部分面积?正方形与半圆,割补法常考题

    欢迎您来到方老师数学课堂,请点击上方蓝色字体,添加关注.所有的视频内容,全部免费,请大家放心关注,放心订阅. 六年级数学:怎么求阴影部分面积?正方形与半圆,割补法常考题.大家先在草稿本上认真地做一遍, ...

  6. python datatime 平均值_python求数据的时间平均

    #!/usr/bin/python # encoding: utf-8 import re from itertools import imap, ifilter # 定义正则表达式 patt = r ...

  7. python最优解集_python求最优解的集中算法

    优化算法通常用来处理问题最优解的求解--这个问题有多个变量共同决定的,举一个例子比如有这样一张 人员关系表,需要绘制一张SOSO华尔兹(一种socialnetwork,http://tag.soso. ...

  8. python升序数_Python求最大升序子序列与最小出现频率最高的数字,急急急!

    展开全部 >>> import sys >>> >>> def generateRandomList(size, start=0, stop=10 ...

  9. python正方形阴影面积计算_利用Python求阴影部分的面积实例代码

    一.前言说明 今天看到微信群里一道六年级数学题,如下图,求阴影部分面积 看起来似乎并不是很难,可是博主添加各种辅助线,写各种方法都没出来,不得已而改用写Python代码来求面积了 二.思路介绍 1.用 ...

最新文章

  1. C#实现路由器断开连接,更改公网ip
  2. 加速100倍,性能媲美SOTA,浙大知识蒸馏新方法FastDFKD
  3. linux ELF文件格式分析
  4. #define与typedef的区别!
  5. matplotlib 横坐标少了一个点_刘洲成点赞说马苏拍戏少视频
  6. 程序员应该具备的能力
  7. php俄罗斯方块代码,[原创]Matlab做的俄罗斯方块(含代码)
  8. 在云环境上使用SLF4J对Java程序进行日志记录
  9. 颜宁课题组再发Cell!1个月时间内4篇顶刊!
  10. 聪明的质监员 2011年NOIP全国联赛提高组(二分+前缀和)
  11. LINQ IN ACTION读书笔记:LINQ 使用连接 1、组连接 2、内连接 3、左外连接 4、交叉连接 使用和区别...
  12. SQLServer之修改存储过程
  13. php redis 队列抢红包_redis 队列操作的例子(php)
  14. Coursera机器学习week11 笔记
  15. wms仓库管理系统中条形码管理的两大优势
  16. 工业相机IO口控制STM32输出PWM波
  17. 微信小程序chooseMedia应用
  18. android 2d 漫画界面,宅男舔屏必备!动漫人物Live2d壁纸App
  19. js获取当前时间的前几天时间
  20. minigui之显示gif

热门文章

  1. android手机功耗优化,安卓统一推送实测:待机功耗降30%
  2. ye读春秋左传系列视频讲解
  3. 安卓11客制需求:用户无操作一段时间,自动播放客户提供的视频,用户操作后退出播放
  4. int类型和number类型区别
  5. A1,A2,A3,A4纸的尺寸
  6. java 数值越界的判断_java 中int 范围越界校验算法
  7. C#基于虹软SDK的人脸识别签到系统
  8. USB device for mac
  9. JAVA计算机毕业设计教育培训机构信息管理系统Mybatis+系统+数据库+调试部署
  10. 专利撰写是什么工作_如何(以及为什么)撰写出色的用户故事