You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python计算上下边界点数不同的不规则曲边多边形面积

上下边界点数不同的不规则曲边多边形面积计算(Python实现)

核心逻辑

这类图形是由两条有序曲线(上、下边界)在左右端点闭合形成的区域,无需强行对齐点数,可通过以下两种高效方法计算面积:


方法一:插值+梯形积分法

适合需要精确控制插值逻辑的场景:

  1. 合并并排序上下边界的所有x坐标,生成统一采样点
  2. 对上下边界分别做插值,得到每个采样点对应的y值
  3. 用梯形法计算上下y值差的积分,即为区域面积

代码示例

import numpy as np
from scipy.interpolate import interp1d

# 示例上下边界坐标(点数不同)
x_upper = np.array([1, 3, 5, 7, 9])
y_upper = np.array([5, 7, 6, 8, 4])
x_lower = np.array([1, 2, 4, 6, 8, 9])
y_lower = np.array([1, 2, 3, 2, 1, 0])

# 合并排序所有x坐标并去重
all_x = np.sort(np.unique(np.concatenate([x_upper, x_lower])))

# 创建线性插值函数(可替换为'cubic'等其他插值方式)
upper_interp = interp1d(x_upper, y_upper, kind='linear', fill_value="extrapolate")
lower_interp = interp1d(x_lower, y_lower, kind='linear', fill_value="extrapolate")

# 获取插值后的上下y值
y_upper_fit = upper_interp(all_x)
y_lower_fit = lower_interp(all_x)

# 梯形法计算面积
area = np.trapz(y_upper_fit - y_lower_fit, x=all_x)
print(f"面积:{area:.2f}")

方法二:Shapely库直接构建多边形

适合快速实现,无需手动处理插值:

  1. 将上边界点按从左到右排列,下边界点同样从左到右排列
  2. 拼接上边界点 + 逆序的下边界点,形成闭合路径
  3. 用Shapely创建多边形对象,直接读取面积属性

代码示例

from shapely.geometry import Polygon

# 示例上下边界坐标点
upper_points = [(1,5), (3,7), (5,6), (7,8), (9,4)]
lower_points = [(1,1), (2,2), (4,3), (6,2), (8,1), (9,0)]

# 构建闭合路径:上边界 + 逆序下边界(确保图形闭合)
closed_path = upper_points + lower_points[::-1]

# 创建多边形并计算面积
polygon = Polygon(closed_path)
area = polygon.area
print(f"面积:{area:.2f}")

注意事项

  • 所有边界点必须按从左到右的顺序排列,否则会导致闭合路径错误
  • 插值方法可根据曲线平滑度调整:线性插值适合折线类边界,立方插值适合平滑曲线
  • 若边界存在交叉,Shapely会自动处理复杂多边形的面积计算

内容的提问来源于stack exchange,提问作者Kağan Peneklioğlu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 08:25:30