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

devtools/2024/12/26 8:47:33/

鞋带公式(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实现圆的面积计算:

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)-1area=0for i in range(n):area+=(x[i]*y[i+1])-(y[i]*x[i+1])area=abs(area)/2.0return 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.ppmy.cn/devtools/144050.html

相关文章

霍尔传感器在VR虚拟现实技术上的应用

在当今科技飞速发展的时代,虚拟现实(VR)技术正以前所未有的速度不断革新与拓展应用领域。 从沉浸式的游戏体验到专业的模拟训练,从虚拟的艺术创作空间到远程协作的工作场景,VR 已逐渐渗透到人们生活与工作的多个层面&…

Scala的泛型界限

泛型界限 上限 泛型的上限,下限。对类型的更加具体的约束! 如果给某个泛型设置了上界:这里的类型必须是上界 如果给某个泛型设置了下界:这里的类型必须是下界

M4Pro内核MacOS brew安装docker爬坑

安装Docker和Docker-Compose 1 brew install docker 2 brew install docker-compose 3 docker —version 4 docker-compose —version 5 docker-ps报错: 解决方案:Mac需要安装Colima替代Desktop版本 brew install colima brew unlink colima(重新…

使用FakeSMTP创建本地SMTP服务器接收邮件具体实现。

以下代码来自Let’s Go further节选。具体说明均为作者本人理解。 编辑邮件模版 主要包含三个template: subject:主题plainBody: 纯文本正文htmlBody:超文本语言正文 {{define "subject"}}Welcome to Greenlight!{{end}} {{def…

linux上qt打包(二)

sudo apt install git 新建一个文件夹 名为xiazai, chmod -R 777 xiazai cd xiazai 并进入这个文件夹,然后clone git clone https://github.com/probonopd/linuxdeployqt.git 此处可能要fanQiang才能下 cd linuxdeployqt文件夹 下载平台需要的…

Java操作FTP服务器(下)

Windwos中搭建FPT可以查看我的一篇文章《windows搭建ftp服务器(上)》 Java 操作 FTP 服务器通常使用 Apache Commons Net 库,这是一个功能强大的网络库,支持多种协议,包括 FTP。 一、我们需要在pom.xml中引入相…

mysql的事务控制和数据库的备份和恢复

事务控制语句 行锁和死锁 行锁 两个客户端同时对同一索引行进行操作 客户端1正常运行 客户端2想修改,被锁行 除非将事务提交才能继续运行 死锁 客户端1删除第5行 客户端2设置第1行为排他锁 客户端1删除行1被锁 客户端2更新行5被锁 如何避免死锁 mysql的备份和还…

【自动化部署】Ansible循环

文章目录 Ansible循环1. with_items2. with_list3. with_flattened4. with_together5. with_cartesian 和 with_nested Ansible 配置模板与效率优化一、配置模板1. 准备配置模板文件2. 修改 inventory 主机清单配置文件3. 编写 playbook 二、Ansible 执行效率优化1. 加大 forks…