如何在Python中计算绿色曲线与红色直线间的指定区域面积?

计算红色直线与绿色曲线差值面积的实用方案
不需要找数学函数,用你已经拿到的离散绿色数据点就能计算——红色是恒定值,且数据每秒一个(时间间隔固定为1秒),直接用数值方法即可,步骤如下:
- 确定红色直线的恒定值
red_value(从图表读取或业务设定) - 收集按时间顺序排列的绿色数据点,每秒一个
- 遍历绿色数据,只计算绿色值低于红色值时的差值(
red_value - 绿色值),其余情况差值为0 - 用简单的数值积分方法计算面积,因为时间间隔是1秒,计算非常简便:
- 矩形法:直接把所有有效差值相加,结果就是面积(每个差值对应1秒间隔的矩形面积)
- 梯形法:精度稍高,公式为
0.5*(第一个差值+最后一个差值) + 中间所有差值的和
批量计算历史数据的面积
# 替换成实际的红色恒定值 red_value = 10 # 替换成你从cURL获取的绿色数据列表(按时间顺序) green_values = [8, 9, 11, 7, 6, 10, 8] # 计算有效差值 diff_values = [] for g_val in green_values: if g_val < red_value: diff_values.append(red_value - g_val) else: diff_values.append(0) # 矩形法(简单易理解) area_rect = sum(diff_values) # 梯形法(精度略高) area_trap = 0.5 * (diff_values[0] + diff_values[-1]) + sum(diff_values[1:-1]) print(f"矩形法面积: {area_rect}") print(f"梯形法面积: {area_trap}")
实时计算累积面积
如果是要实时处理每秒的新数据,不用存所有历史点,直接累积即可:
import time red_value = 10 total_area = 0 def get_green_data(): # 替换成你的cURL请求获取绿色值的逻辑 # 示例:模拟获取随机绿色值 import random return random.randint(6, 12) while True: current_green = get_green_data() if current_green < red_value: total_area += (red_value - current_green) print(f"当前累积面积: {total_area}") time.sleep(1) # 每秒获取一次数据
内容的提问来源于stack exchange,提问作者wolliumm
相关产品推荐
相关产品推荐

