python 封闭图形面积_Python求阴影部分面积
原标题: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求阴影部分面积相关推荐
- python求不规则图形面积_Python求阴影部分面积
一.前言说明 今天看到微信群里一道六年级数学题,如下图,求阴影部分面积 看起来似乎并不是很难,可是博主添加各种辅助线,写各种方法都没出来,不得已而改用写Python代码来求面积了 二.思路介绍 1.用 ...
- python正方形阴影面积计算_Python求阴影部分面积
一.前言说明 今天看到微信群里一道六年级数学题,如下图,求阴影部分面积 看起来似乎并不是很难,可是博主添加各种辅助线,写各种方法都没出来,不得已而改用写Python代码来求面积了 二.思路介绍 1.用 ...
- python 封闭图形面积_python实现计算图形面积
用Python编写关于计算图形面积的代码实现,供大家参考,具体内容如下 #寒假打卡28天第7天 import math class Round(): #圆形 def __init__(self, R) ...
- python 封闭图形面积_python opencv填充未完全闭合的等高线
我使用openCV来查找给定图像的外部轮廓并填充它. 我使用的图像作为输入是裤子的图像,就像一个附加的.问题是有时(如附件中所示)轮廓不是完全闭合的,然后我无法填充它.在这种情况下我能做什么? 请参阅 ...
- 半圆阴影_六年级数学:怎么求阴影部分面积?正方形与半圆,割补法常考题
欢迎您来到方老师数学课堂,请点击上方蓝色字体,添加关注.所有的视频内容,全部免费,请大家放心关注,放心订阅. 六年级数学:怎么求阴影部分面积?正方形与半圆,割补法常考题.大家先在草稿本上认真地做一遍, ...
- python datatime 平均值_python求数据的时间平均
#!/usr/bin/python # encoding: utf-8 import re from itertools import imap, ifilter # 定义正则表达式 patt = r ...
- python最优解集_python求最优解的集中算法
优化算法通常用来处理问题最优解的求解--这个问题有多个变量共同决定的,举一个例子比如有这样一张 人员关系表,需要绘制一张SOSO华尔兹(一种socialnetwork,http://tag.soso. ...
- python升序数_Python求最大升序子序列与最小出现频率最高的数字,急急急!
展开全部 >>> import sys >>> >>> def generateRandomList(size, start=0, stop=10 ...
- python正方形阴影面积计算_利用Python求阴影部分的面积实例代码
一.前言说明 今天看到微信群里一道六年级数学题,如下图,求阴影部分面积 看起来似乎并不是很难,可是博主添加各种辅助线,写各种方法都没出来,不得已而改用写Python代码来求面积了 二.思路介绍 1.用 ...
最新文章
- C#实现路由器断开连接,更改公网ip
- 加速100倍,性能媲美SOTA,浙大知识蒸馏新方法FastDFKD
- linux ELF文件格式分析
- #define与typedef的区别!
- matplotlib 横坐标少了一个点_刘洲成点赞说马苏拍戏少视频
- 程序员应该具备的能力
- php俄罗斯方块代码,[原创]Matlab做的俄罗斯方块(含代码)
- 在云环境上使用SLF4J对Java程序进行日志记录
- 颜宁课题组再发Cell!1个月时间内4篇顶刊!
- 聪明的质监员 2011年NOIP全国联赛提高组(二分+前缀和)
- LINQ IN ACTION读书笔记:LINQ 使用连接 1、组连接 2、内连接 3、左外连接 4、交叉连接 使用和区别...
- SQLServer之修改存储过程
- php redis 队列抢红包_redis 队列操作的例子(php)
- Coursera机器学习week11 笔记
- wms仓库管理系统中条形码管理的两大优势
- 工业相机IO口控制STM32输出PWM波
- 微信小程序chooseMedia应用
- android 2d 漫画界面,宅男舔屏必备!动漫人物Live2d壁纸App
- js获取当前时间的前几天时间
- minigui之显示gif
热门文章
- android手机功耗优化,安卓统一推送实测:待机功耗降30%
- ye读春秋左传系列视频讲解
- 安卓11客制需求:用户无操作一段时间,自动播放客户提供的视频,用户操作后退出播放
- int类型和number类型区别
- A1,A2,A3,A4纸的尺寸
- java 数值越界的判断_java 中int 范围越界校验算法
- C#基于虹软SDK的人脸识别签到系统
- USB device for mac
- JAVA计算机毕业设计教育培训机构信息管理系统Mybatis+系统+数据库+调试部署
- 专利撰写是什么工作_如何(以及为什么)撰写出色的用户故事