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

一、前言说明

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

看起来似乎并不是很难,可是博主添加各种辅助线,写各种方法都没出来,不得已而改用写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.下面有三种求解方法,第三种表示比大学高数还难看懂,你们呢?

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • python计算两个矩形框重合百分比的实例

    如下所示: def mat_inter(box1,box2): # 判断两个矩形是否相交 # box=(xA,yA,xB,yB) x01, y01, x02, y02 = box1 x11, y11, x12, y12 = box2 lx = abs((x01 + x02) / 2 - (x11 + x12) / 2) ly = abs((y01 + y02) / 2 - (y11 + y12) / 2) sax = abs(x01 - x02) sbx = abs(x11 - x12) say

  • python计算圆周长、面积、球体体积并画出圆

    输入半径,计算圆的周长.面积.球体体积,并画出这个圆.拖动条.输入框和图像控件的数据保持一致! Fedora下测试通过 复制代码 代码如下: #https://github.com/RobberPhex/GTK-Example-CalcAreafrom gi.repository import Gtk, Gdk, GdkPixbuffrom PIL import Image, ImageDrawfrom io import BytesIOfrom math import pi class Mod

  • Python Numpy计算各类距离的方法

    详细: 1.闵可夫斯基距离(Minkowski Distance) 2.欧氏距离(Euclidean Distance) 3.曼哈顿距离(Manhattan Distance) 4.切比雪夫距离(Chebyshev Distance) 5.夹角余弦(Cosine) 6.汉明距离(Hamming distance) 7.杰卡德相似系数(Jaccard similarity coefficient) 8.贝叶斯公式 1.闵氏距离的定义: 两个n维变量A(x11,x12,-,x1n)与 B(x21,x

  • python 计算两个列表的相关系数的实现

    用pandas计算相关系数 计算相关系数用pandas,比如我想知道风速大小与风向紊乱(标准差来衡量)之间的相关系数,下面是代码: import pandas as pd import pylab as plt #每小时的阵风风速平均值 all_gust_spd_mean_list = [8.21529411764706, 7.872941176470587, 7.829411764705882, 8.354117647058825, 9.025882352941174, 9.384523809

  • python 标准差计算的实现(std)

    numpy.std() 求标准差的时候默认是除以 n 的,即是有偏的,np.std无偏样本标准差方式为加入参数 ddof = 1: pandas.std() 默认是除以n-1 的,即是无偏的,如果想和numpy.std() 一样有偏,需要加上参数ddof=0 ,即pandas.std(ddof=0) :DataFrame的describe()中就包含有std(): demo: >>> a array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) >>>

  • Python计算两个矩形重合面积代码实例

    这篇文章主要介绍了Python 实现两个矩形重合面积代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 代码如下 计算两个矩形的重合面积 import math x1, y1, x2, y2 = input().split(" ") x1, y1, x2, y2=int(x1), int(y1), int(x2), int(y2) # print(x1, y1, x2, y2) x1,x2 = min(x1,x2),max(x1,

  • Python3计算三角形的面积代码

    关于Python语言,众说纷纭,但无外乎两种,强大,垃圾.大多数人还是对Python持肯定意见,认为它很强大.前些天和两个的大学同学聊天,一个是在做手机测试,一个是给银行系统做维护一类的工作,都在北京.都在一边工作一边学习,其中一个学的就是Python.我也不能落后啊,走上了Python的不归路.我个人觉得对广大编程爱好者来说,尤其是在校大学生,大家可以有时间学习一门语言,对以后是很有帮助的. 以下实例为通过用户输入三角形三边长度,并计算三角形的面积: # -*- coding: UTF-8 -

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

    一.前言说明 今天看到微信群里一道六年级数学题,如下图,求阴影部分面积 看起来似乎并不是很难,可是博主添加各种辅助线,写各种方法都没出来,不得已而改用写Python代码来求面积了 二.思路介绍 1.用Python将上图画在坐标轴上,主要是斜线函数和半圆函数 2.均匀的在长方形上面洒满豆子(假设是豆子),求阴影部分豆子占比*总面积 三.源码设计 1.做图源码 import matplotlib.pyplot as plt import numpy as np def init(): plt.xla

  • 利用Python进行数据可视化的实例代码

    目录 前言 首先搭建环境 实例代码 例子1: 例子2: 例子3: 例子4: 例子5: 例子6: 总结 前言 前面写过一篇用Python制作PPT的博客,感兴趣的可以参考 用Python制作PPT 这篇是关于用Python进行数据可视化的,准备作为一个长贴,随时更新有价值的Python可视化用例,都是网上搜集来的,与君共享,本文所有测试均基于Python3. 首先搭建环境 $pip install pyecharts -U $pip install echarts-themes-pypkg $pi

  • 利用python/R语言绘制圣诞树实例代码

    目录 Python R语言 总结 圣诞节快到了,想着用python.r来画画圣诞树玩,就在网络上各种找方法,不喜勿喷哈~~ Python 1. import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle() circle.shape('circle') circle.color('red') circle.speed('fastest') circle.up() square = turt

  • 利用python求相邻数的方法示例

    前言 本文主要给大家介绍了关于利用python求相邻数的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 什么是相邻数? 比如5,相邻数为4和6,和5相差1的数,连续相差为1的一组数 需求: 遍历inputList 所有数字,取出所有数字,判断是否有相邻数, 不相邻数字 和 相邻数字 都以 "数组"形式 添加到 outputList 中, 并且 每个"数组" 里 第一位 递减 补全两位数,末位 递增 补全两位数, 每一个数不能小于0, 不能大

  • Python实现七彩蟒蛇绘制实例代码

    本文主要研究的是Python编程turtle的实例,绘制一个七彩蟒蛇..具体如下. 第2周的课后练习里,有一道题目,要求修改"蟒蛇绘制"程序,对Python 蟒蛇的每个部分采用不同颜色,绘制一条彩色蟒蛇. 原蟒蛇绘制程序如下: 因为刚开始学Python,不太熟悉,所以自己加了一些注释,方便理解. #蟒蛇绘制 import turtle def drawSnake(rad,angle,len,neckrad): for i in range(len): turtle.circle(rad

  • C语言输入三角形边长判断其类型并输出面积实例代码

    本文主要研究的是输入三角形边长判断其类型并输出面积,用C语言实现,具体如下. 思路:首先判断所给的三条边是否能够组成三角形,若可以组成三角形,则判断该三角形是什么类型,并求三角形的面积. 相关知识: 三角形是由同一平面内不在同一直线上的三条线段'首尾'顺次连接所组成的封闭图形.常见的三角形按边分有普通三角形(三条边都不相等),等腰三角(腰与底不等的等腰三角形.腰与底相等的等腰三角形即等边三角形) 不等边三角形:不等边三角形,数学定义,指的是三条边都不相等的三角形叫不等边三角形. 等腰三角形:等腰

  • python提取照片坐标信息的实例代码

    python提取照片坐标信息的代码如下所示: from PIL import Image from PIL.ExifTags import TAGS import os output="Z://result.csv" out=open(output,'a') out.write('lat,lon\n') fpath="Z://iphonephoto" for item in os.walk(fpath): ob=item[2] for i in ob: name=f

  • 利用 Python ElementTree 生成 xml的实例

    Python 处理 xml 文档的方法有很多,除了经典的 sax 和 dom 之外,还有一个 ElementTree. 首先 import 之: from xml.etree import ElementTree as etree 然后开始构建 xml 树: from xml.etree.ElementTree import Element, SubElement, ElementTree # 生成根节点 root = Element('root') # 生成第一个子节点 head head =

  • Python扑克牌21点游戏实例代码

    废话还是说太多了 直接上代码 import random import sys # 牌面列表 card_code = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'] # 花色列表 card_symbol = ['', '', '', ''] # 游戏初始化 def init(player_count): # 根据玩家数来生成玩家记牌器 player_group = [[] for _ in range(play

  • jQuery 利用ztree实现树形表格的实例代码

    最近公司的项目中要做一个树形表格,因为之前一直在用ztree实现基本的树形结构,理所当然的首先想到利用ztree来做. 网上找了一下别人做的树形表格,有使用ztree的,也有使用treeTable的,但效果都不太好,于是参考使用ztree的做法自己做了一个,贴出来供大家参考,请看注释说明,效果如下所示. <!DOCTYPE HTML> <html> <head> <link href="https://cdn.bootcss.com/zTree.v3/3

随机推荐