当前位置: 首页 > article >正文

python之求平面离散点集围成的面积

鞋带公式(Shoelace Formula)是一种计算多边形面积的数学公式,特别适用于已知顶点坐标的多边形。这个公式的名字来源于计算过程中的交叉相乘,类似于系鞋带时的交叉方式。

假设一个多边形有n 个顶点,顶点的坐标依次为((x_1, y_1), (x_2, y_2), \ldots, (x_n, y_n),并且最后一个顶点与第一个顶点相连,即 (x_{n+1}, y_{n+1}) = (x_1, y_1)。那么,这个多边形的面积\ A可以通过以下公式计算:

A = \frac{1}{2} \left| \sum_{i=1}^{n} (x_i y_{i+1} - y_i x_{i+1}) \right|

这个公式可以这样理解:我们把多边形的顶点坐标按顺序排列,然后将每个顶点的 \( x \) 坐标与下一个顶点的 \( y \) 坐标相乘,再减去每个顶点的 \( y \) 坐标与下一个顶点的 \( x \) 坐标相乘,最后将所有这些乘积的差求和并取绝对值,再除以 2,就得到了多边形的面积。

鞋带公式的计算过程可以直观地表示为:

A = \frac{1}{2} \left| x_1y_2 + x_2y_3 + \cdots + x_ny_1 - (y_1x_2 + y_2x_3 + \cdots + y_nx_1) \right|

这个公式在计算多边形面积时非常有用,特别是在编程和计算机图形学中,因为它可以很容易地通过循环和数组来实现。

对于平面离散点集围成的面积,只要这些点能够形成一个简单的多边形(即不自交的多边形),就可以使用鞋带公式来计算。首先,需要确定这些点的顺序,使得它们能够形成一个闭合的多边形。然后,按照鞋带公式的步骤,计算出多边形的面积。

例如,假设我们有四个点((1, 1), (4, 1), (4, 5), (1, 5)),它们可以形成一个矩形。按照鞋带公式,我们可以这样计算面积:

A = \frac{1}{2} \left| 1 \cdot 1 + 4 \cdot 5 + 4 \cdot 5 + 1 \cdot 1 - (1 \cdot 4 + 1 \cdot 4 + 5 \cdot 1 + 5 \cdot 1) \right|

A = \frac{1}{2} \left| 1 + 20 + 20 + 1 - (4 + 4 + 5 + 5) \right|

A = \frac{1}{2} \left| 42 - 18 \right|

A = \frac{1}{2} \times 24 = 12

所以,这个矩形的面积是 12。
下面通过python实现圆的面积计算:

import numpy as np
def shoelace_formula(x,y):
    x=np.append(x,x[0])
    y=np.append(y,y[0])
    n=len(x)-1
    area=0
    for i in range(n):
        area+=(x[i]*y[i+1])-(y[i]*x[i+1])
    area=abs(area)/2.0
    return area
theta = np.arange(0, 2 * np.pi, 0.01)
r=1
x =  r * np.cos(theta)
y =  r * np.sin(theta)
area_theory=np.pi*r**2
area_cal=shoelace_formula(x,y)
print("area_theory:",area_theory)
print("area_cal:",area_cal)


http://www.kler.cn/a/442301.html

相关文章:

  • 【AI学习】地平线首席架构师苏箐关于自动驾驶的演讲
  • SUN的J2EE与微软的DNA
  • 基于机器学习的用户健康风险分类及预测分析
  • 正则表达式先入门,精不精通看修行
  • 网络科技有限公司网络设计
  • 增广卡尔曼滤波AKF的要点分析
  • Qt 开发笔记2
  • 深度学习之循环神经网络及进化(RNN-LSTM-GRU)
  • 安防监控Liveweb视频汇聚融合平台助力执法记录仪高效使用
  • 快消品 B2B 困境与破局:基于 2+1 链动模式与 S2B2C 商城小程序的思考
  • Starting MySQL.... ERROR! The server quit without updating PID file解决方案
  • 低延迟!实时处理!中软高科AI边缘服务器,解决边缘计算多样化需求!
  • Windows生态圈:如何改变我们的数字生活
  • Linux高性能服务器编程中的TCP带外数据梳理总结
  • 如何实现对象的克隆?如何实现单例模式?
  • 利用 html_table 函数轻松获取网页中的表格数据
  • 【射频仿真技巧学习笔记】Cadence仿真nmos_rf出现SFE-1966报错的解决办法
  • KeepAlive与RouterView缓存
  • Leetcode H 指数
  • 【题解】—— LeetCode一周小结50
  • 超维机器人油气化工智能巡检解决方案
  • 电脑文档损坏:原因剖析和修复方法
  • 【硬件接口】I2C总线接口
  • 联邦学习中:公共物品属性的一般定义
  • 消息队列 Kafka 架构组件及其特性
  • 【Elasticsearch05】企业级日志分析系统ELK之集群工作原理