跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

C++ 计算给定 n 个有序顶点多边形的面积

介绍如何使用鞋带公式(Shoelace Formula)计算给定 n 个有序顶点坐标的多边形面积。通过叉积推导三角形面积并求和,实现代码时间复杂度为 O(n),空间复杂度为 O(1)。示例展示了具体输入输出及计算过程。

KernelLab发布于 2026/3/22更新于 2026/7/545 浏览
C++ 计算给定 n 个有序顶点多边形的面积

C++ 计算给定 n 个有序顶点多边形的面积

给定一个有 n 个顶点的多边形,其顶点坐标按顺时针或逆时针顺序排列。本例介绍如何计算该多边形的面积。

示例

输入:X[] = {0, 4, 4, 0}, Y[] = {0, 0, 4, 4} 输出:16

输入:X[] = {0, 4, 2}, Y[] = {0, 0, 4} 输出:8

我们可以使用鞋带公式(Shoelace Formula)计算多边形的面积。

鞋带公式示意图

面积计算公式如下: Area = 1/2 * | sum(xi*y(i+1)) - sum(x(i+1)*yi) |

上述公式是通过对顶点进行叉积来推导多边形中三角形面积的。以下是具体实现。

示例代码

// C++ program to evaluate area of a polygon using shoelace formula
#include <bits/stdc++.h>
using namespace std;

// (X[i], Y[i]) are coordinates of i'th point.
double polygonArea(double X[], double Y[], int n) {
    // Initialize area
    double area = 0.0;

    // Calculate value of shoelace formula
    int j = n - 1;
    for (int i = 0; i < n; i++) {
        area += (X[j] + X[i]) * (Y[j] - Y[i]);
        j = i;  // j is previous vertex to i
    }

    // Return absolute value
    return abs(area / 2.0);
}

// Driver program to test above function
int main() {
    double X[] = {0, 2, 4};
    double Y[] = {1, 3, 7};

    int n = sizeof(X)/sizeof(X[0]);

    cout << polygonArea(X, Y, n);
}

输出

2

复杂度分析

  • 时间复杂度:O(n)
  • 辅助空间:O(1),因为没有占用额外的空间。

为什么叫鞋带公式?

这个公式的命名源于我们计算它的方式,类似于系鞋带的交叉过程。

例如:设输入顶点为 (0, 1), (2, 3), and (4, 7)。我们将顶点写成如下所示: 0 1 2 3 4 7 0 1 (写两次)

评估正项如下: 0 \ 1 2 \ 3 4 \ 7 0 1 即:03 + 27 + 4*1 = 18

评估负项如下: 0 1 2 / 3 4 / 7 0 / 1 即:07 + 43 + 2*1 = 14

面积 = 1/2 * (18 - 14) = 2

查看 维基百科 以获得更清晰的图像。

原理说明

我们总是可以将一个多边形分成三角形。面积公式如下:取每条边 AB,计算顶点位于原点 O 的三角形 ABO 的面积(有符号),然后取叉积(得出平行四边形的面积)除以 2。绕多边形旋转时,这些面积为正负的三角形会重叠,原点和多边形之间的面积会被抵消,总和为 0,只剩下参考三角形内部的面积。

为了更好地理解,请看下图:

使用叉积计算三角形面积

将多边形划分为更小的三角形来计算面积

类似地,对于不规则多边形,我们可以形成三角形来计算面积

目录

  1. C++ 计算给定 n 个有序顶点多边形的面积
  2. 示例
  3. 示例代码
  4. 输出
  5. 复杂度分析
  6. 为什么叫鞋带公式?
  7. 原理说明
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Python 字典(dict)数据类型详解
  • Web 团队构建 App:Capacitor 选型指南
  • 二分答案专题:木材加工与砍树算法详解
  • CentOS 系统安装 Oracle 数据库完整指南
  • C++ STL 标准库算法详解与应用
  • Linux 命令行进度条实现原理解析
  • 从数学概率到神经网络:双色球预测的算法演进史
  • ibbot 智体机灵 V1.0:基于 dtns.os 的移动端 AI 智能体平台
  • Gazebo 机器人三维物理仿真平台详解
  • AI 时代提问能力:从创意到产品的快速实现
  • 前端Bug修复专家:从现象到根因,再到测试闭环的SOP
  • DeepSeek-R1 大模型基于 MS-Swift 框架的部署、推理与微调实践
  • GLM-4.7 基于 vLLM Ascend 的 12 项核心性能优化实战
  • cargo-asm 插件开发指南:为 Rust 项目贡献新功能
  • C++ 中的 and、or、not 替代标记详解
  • C++ 语言基础与进阶教程
  • 基于若依框架的 SpringBoot+Vue3 前后端分离项目搭建与代码生成教程
  • MetaGPT:基于多智能体的软件开发框架使用指南
  • K-近邻算法(KNN)原理、实战与工程优化指南
  • 前端 CI/CD 实践:构建与自动化部署详解

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online