如何用MATLAB计算多边形的几何中心

news2024/9/20 9:10:02

在MATLAB中,计算多边形的几何中心(又称质心或重心)可以通过以下步骤实现。假设你有一个多边形,其顶点按照顺时针或逆时针顺序排列在一个矩阵中。具体步骤如下:

  1. 定义多边形顶点:首先,你需要将多边形的顶点坐标存储在一个矩阵中。例如,假设你的多边形顶点为(x_{1},y_{1}),(x_{2},y_{2}),…,(x_{n},y_{n}),则可以将它们存储在一个 n×2 的矩阵 vertices 中。

  2. 计算几何中心:使用多边形顶点的坐标,通过公式计算几何中心。

多边形的几何中心坐标 (C_{x},C_{y})可以通过以下公式计算:

C_{x}=\frac{1}{6A}\sum_{i=0}^{n-1}(x_i+x_{i+1})(x_iy_{i+1}-x_{i+1}y_{i})

C_{y}=\frac{1}{6A}\sum_{i=0}^{n-1}(y_i+y_{i+1})(x_iy_{i+1}-x_{i+1}y_{i})

其中,A 是多边形的面积,计算公式为:

A=\frac{1}{2}\sum_{i=0}^{n-1}(x_iy_{i+1}-x_{i+1}y_{i})

下面是MATLAB代码,用于计算多边形的几何中心:

function [Cx, Cy] = polygonCentroid(vertices)  
    % Number of vertices  
    n = size(vertices, 1);  
      
    % Ensure the vertices are in a closed polygon (the last vertex should be the same as the first)  
    if ~isequal(vertices(end,:), vertices(1,:))  
        vertices(end+1, :) = vertices(1, :);  
        n = n + 1;  
    end  
      
    % Initialize variables for the sums  
    sumCx = 0;  
    sumCy = 0;  
    area = 0;  
      
    % Loop over vertices  
    for i = 1:n-1  
        x1 = vertices(i, 1);  
        y1 = vertices(i, 2);  
        x2 = vertices(i+1, 1);  
        y2 = vertices(i+1, 2);  
          
        % Calculate the area term  
        crossProduct = x1 * y2 - x2 * y1;  
        area = area + crossProduct;  
          
        % Calculate the sum for Cx and Cy  
        sumCx = sumCx + (x1 + x2) * crossProduct;  
        sumCy = sumCy + (y1 + y2) * crossProduct;  
    end  
      
    % Calculate the scaled area  
    area = area / 2;  
      
    % Ensure the area is not zero (to avoid division by zero)  
    if area == 0  
        error('The polygon area is zero, check the vertices.');  
    end  
      
    % Calculate the centroid coordinates  
    Cx = sumCx / (6 * area);  
    Cy = sumCy / (6 * area);  
end  
  

使用方法

clc;close all;clear all;warning off;%清除变量
rand('seed', 100);
randn('seed', 100);
format long g;

p =[27.6177681446901          24.4271853914931
    26.9564380155505          27.2100207716501
    22.7866669489879          26.9872271275884
    22.4598242645914          26.0383172616035
    23.6707146140053          22.2069731560275
    27.6177681446901          24.4271853914931];


[Cx, Cy] = polygonCentroid(p);
figure;
plot(p(:,1),p(:,2),'b-','LineWidth',2);
hold on;
plot(Cx, Cy,'r.','MarkerSize',20);

程序结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2143110.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FPGA随记——状态机

1. 概念 状态机(State Machine): 有限状态机(Finite State Machine,简称FSM) 在有限个状态之间按一定规律转换的时序电路。 2 状态机模型 组成元素:输入、状态、状态转移条件、输出&#xff…

BSN六周年:迈向下一代互联网

当前,分布式技术作为现代计算机科学和信息技术的重要组成部分,在云计算、区块链等技术的推动下,正以多样化的形式蓬勃发展。 ​而区块链作为一种特殊的分布式系统,近年来也在各个领域得到了广泛关注。通过在区块链上运行智能合约…

情系河北 缘聚苏州——2024苏州河北同乡迎国庆贺中秋大团圆联谊活动圆满举办

金秋送爽,月朗中天。9月15日晚,由苏州市河北商会志愿者工作委员会牵头,苏州河北以及各地市老乡群联合主办的第二届“情系河北 缘聚苏州”--2024年苏州河北同乡迎国庆贺中秋大团圆联谊活动在香雪海饭店(吴中大道店)二楼…

C++自学笔记35(文件操作)

讲解常见文件操作函数 fopen FILE* fp fopen(char const* _FileName,char const* _Mode) 第一个参数:文件名,字符串表示 第二个参数:文件打开模式3种 1.rb(read birary):读文件…

【算法】动态规划—编辑距离

题目 给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符删除一个字符替换一个字符 思路分析 编辑距离问题就是给定两个字符串 s1 和 s2,只能用三种操作…

STM32外设-0.96寸OLED显示屏

江科大OLED教程:01-快速上手(上集)_哔哩哔哩_bilibili 01 0.96寸OLED显示屏原理 1.1 0.96寸OLED显示屏简介 适用器件: 0.96寸OLED显示屏(驱动芯片:SSD1306 / SSD1315) 1.3寸OLED显示屏&…

针对国内AIGC市场,国内目前出台了那些法律法规?

针对国内AIGC市场,特别是AI生成与合成内容方面,中国已经出台了一系列法律法规来规范其发展和应用。 图片源自“央视新闻” 以下是一些主要的法律法规: 一、国家层面的法律法规 《中华人民共和国网络安全法》 施行时间:2017年6月…

【课程学习】信号检测与估计II

b站 文章目录 1-概述贝叶斯方法1-概述 线性、正交、平稳、高斯 研究线性模型,采用正交化方法,假设信号平稳,考虑信号的统计特性是高斯的。 本学期考虑,非线性、非正交、非平稳、非高斯。 阵列处理 1980-1990 MUSIC 稀疏性 2006-2012 LASS 时频分析 1995-2000 小波 贝叶斯 2…

echarts 自定义标注样式自定义tooltip弹窗样式

文章目录 1. 实现根据经纬度自定义标注图片样式2. 实现鼠标悬浮标注自定义弹窗样式内容 1. 实现根据经纬度自定义标注图片样式 设置 symbol 属性为 image://${require("/assets/img/dataView/point.png")} 图片地址即可,注意前面跟 image:// 特有的写法b…

搭建一个基于角色的权限验证框架

说明:基于角色的权限验证(Role-Based Access Control,RBAC)框架,是目前大多数服务端的框架。本文介绍如何快速搭建一个这样的框架,不用Shiro、Spring Security、Sa-Token这样的“大框架”实现。 RBAC 基于…

【图像匹配】基于‌墨西哥帽小波(Marr小波)算法的图像匹配,matlab实现

博主简介:matlab图像代码项目合作(扣扣:3249726188) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 本次案例是基于‌墨西哥帽小波(Marr小波)算法的图像匹配,用…

09_Python流程控制_分支

流程控制 流程控制是管理程序执行顺序的重要组成部分。分支(也称为条件语句)是流程控制的一种形式,它允许程序根据某些条件的真假来选择执行不同的代码路径。 顺序结构:按部就班执行选择结构:根据条件不同执行循环结…

项目实训:CSS基本布局理解——WEB开发系列38

对CSS学习已经接近尾声,下面你可以对以下两道“小卡拉米”测试进行测试下CSS理解程度。 题 1:基于栅格布局的现代博客首页设计 题目要求: 创建一个博客首页布局,包含一个顶部导航栏、一个主要的内容区域(左侧为博客文…

Netty笔记09-网络协议设计与解析

文章目录 前言一、协议设计1. 数据格式2. 消息长度3. 编码方式4. 错误处理5. 安全性 二、协议解析1. 消息分隔2. 粘包与半包处理3. 校验机制 三、为什么需要协议?四、redis 协议五、HTTP 协议六、自定义协议要素编解码器💡 什么时候可以加 Sharable 前言…

使用 PHPstudy 建立ThinkPHP8 本地集成环境

安装Composer 下载地址:https://getcomposer.org/Composer-Setup.exehttps://getcomposer.org/Composer-Setup.exe 打开PHPstudy创建网站: cmd终端进入PHPstudy www根目录下: 执行代码:cd phpstudy www 根目录地址 cd C:\phpst…

甲骨文发布全球首个采用英伟达™(NVIDIA®)Blackwell GPU的Zettascale人工智能超级计算集群

甲骨文公司宣布推出全球首个Zettascale云计算集群。 该集群配备了令人印象深刻的 131,072 个英伟达Blackwell GPU,能够提供 2.4 ZettaFLOPS 的峰值性能。 这一强大的人工智能基础设施使企业能够以更大的灵活性和主权处理大规模人工智能工作负载。 Oracle云计算基础…

算法_宽度优先搜索解决FloodFill---持续更新

文章目录 前言什么是FloodFill算法图像渲染题目要求题目解析代码如下 岛屿数量题目要求题目解析代码如下 岛屿的最大面积题目要求题目解析代码如下 被围绕的区域题目要求题目解析代码如下 前言 本文将会向你介绍宽度优先搜索解决FloodFill算法相关题型:图像渲染、岛…

2019-2023(CSP-J)选择题真题解析

1,了解的知识 中国的国家顶级域名是( )【2019年CSP-J初赛选择题第一题】 A…cn B…ch C…chn D…china 【答案】:A 以下哪个奖项是计算机科学领域的最高奖?( )【2019年CSP-J初赛选择题第…

2025年最新大数据毕业设计选题-基于Hive分析相关

选题思路 回忆学过的知识(Python、Java、Hadoop、Hive、Sqoop、Spark、算法等等。。。) 结合学过的知识确定大的方向 a. 确定技术方向,比如基于Hadoop、基于Hive、基于Spark 等等。。。 b. 确定业务方向,比如民宿分析、电商行为分析、天气分析等等。。。…

uniapp uview扩展u-picker支持日历期间 年期间 月期间 时分期间组件

uniapp uview扩展u-picker支持日历期间 年期间 月期间 时分期间组件 日历期间、年期间、月期间及时分期间组件在不同的应用场景中发挥着重要的作用。这些组件通常用于表单、应用程序或网站中,以方便用户输入和选择特定的日期和时间范围。以下是这些组件的主要作用&a…