栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python计算折线与坐标轴的面积(正负抵消)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python计算折线与坐标轴的面积(正负抵消)

计算下图中折线与y轴围成的面积,蓝色为负,黄色为正,正负抵消后的和。

  • 采用梯形面积和累加,
  • 由于业务需要,本例以130为边界,分别求50-130之间的面积,以及130-210之间的面积>

本例只给 ( 50 , x 1 ) , ( 70 , x 2 ) , ( 90 , x 3 ) , ( 130 , x 4 ) , ( 190 , x 5 ) , ( 230 , x 6 ) (50, x_1),(70, x_2),(90, x_3),(130, x_4),(190, x_5),(230, x_6) (50,x1​),(70,x2​),(90,x3​),(130,x4​),(190,x5​),(230,x6​),这 6 个点, 其中 x 1 = 0 x_1=0 x1​=0

  • 区域1面积: 是一个三角形,为 底*高/2 即为: x 2 × ( 70 − 50 ) ÷ 2 x_2times{(70-50)div{2}} x2​×(70−50)÷2
  • 区域2面积:梯形面积,上底+下底*高/2,即为: ( x 1 + x 2 ) × ( 90 − 70 ) ÷ 2 (x_1+x_2)times{(90-70)div{2}} (x1​+x2​)×(90−70)÷2
  • 区域3面积:可以直接上底+下底*高/2,(已经过验证),分析过程,蓝色三角形和黄色三角形是相似三角形,。$$
    • 首先判断 a = ∣ x 2 ∣ − ∣ x 3 ∣ a=mid x_2 mid-mid{x_3}mid a=∣x2​∣−∣x3​∣的大小,若 a > 0 a>0 a>0,而且1和2面积正负抵消,剩余就是求3的面积,即梯形3的面积则面积为 ( x 2 + ∣ x 3 ∣ ) × (x_2+mid x_3mid)times{} (x2​+∣x3​∣)×
  • 区域4,类似1区域3
  • 区域5,类似于区域3

复杂写法:

aera['down'] = df_10min_down.apply(lambda x: sum( 
    [0.5*(abs(i[0][0])/(abs(i[0][0])+abs(i[0][1])))*i[1]*i[0][0]*(1-(i[0][1]/i[0][0])**2) if i[0][0]*i[0][1] < 0 else 0.5*(i[0][0]+i[0][1])*i[1] 
     for i in zip(zip(x[:-1], x[1:]), height[:6])]), axis=1)
aera['up'] = df_10min_up.apply(lambda x: sum( 
    [0.5*(abs(i[0][0])/(abs(i[0][0])+abs(i[0][1])))*i[1]*i[0][0]*(1-(i[0][1]/i[0][0])**2) if i[0][0]*i[0][1] < 0 else 0.5*(i[0][0]+i[0][1])*i[1] 
     for i in zip(zip(x[:-1], x[1:]), height[6:])]), axis=1)

简化写法(推荐)

aera['down'] = df_10min_down.apply(lambda x: sum([0.5*(i[0][0]+i[0][1])*i[1] for i in zip(zip(x[:-1], x[1:]), height[:6])]), axis=1)
aera['up'] = df_10min_up.apply(lambda x: sum([0.5*(i[0][0]+i[0][1])*i[1] for i in zip(zip(x[:-1], x[1:]), height[6:])]), axis=1)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1029398.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号