matlab计算任意多边形面积

已知多边形的各个点坐标,且点按瞬时间或逆时间顺序排列,求多边形面积。


首先根据计算多边形面积的计算公式,用向量法计算比较方便。两向量叉乘为这俩向量组成的三角形面积的两倍,所以多边形面积公式为:
S = 0.5 * (OA 叉乘 OB +OB 叉乘 OC +…O** 叉乘 OA)
这里写图片描述

matlab代码实现:

第一步:取得坐标点数据,读取excel
第二步:计算向量叉乘
第三步:求和即面积

主函数:

clear variables
close all
clc

global x;  %全局变量
global y;
global len;

NReadxcel;      %读取数据
length  = len;  %从读取数据来的数据数目

clear p;
p.x = zeros(length,1);  % 初始化结构体等
p.y = zeros(length,1);
s = 0;

for count =1:length           %将数据赋值到P点
    p(count).x = x(count);
    p(count).y = y(count);   
end

for count2 = 1 :length-1
s = s +getcha(p(count2),p(count2+1));
end
s =s + getcha(p(length),p(1));
s = 0.5 * abs(s)

读取EXCEl函数:

function NReadxcel
global x;
global y;
global len;

 FileName = uigetfile('*.xlsx','请点数据excel文件');
 %[PosData, Text] = xlsread(FileName);  
[~,~, raw] = xlsread(FileName);  

len = length(raw);
x = cell2mat(raw(2:len,1));%第一列数据
y = cell2mat(raw(2:len,2));%第二列数据
len = len-1;

叉乘函数:

function cha = getcha(p1,p2)

cha =p1.x * p2.y - p2.x * p1.y;

end

excel数据和画的多边形
这里写图片描述

运行时文件夹:
这里写图片描述

  • 6
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
计算任意多边形的几何中心和重心需要用到多边形的顶坐标。以下是使用MATLAB计算多边形几何中心和重心的方法: 假设多边形坐标为 $P_1(x_1,y_1), P_2(x_2,y_2),...,P_n(x_n,y_n)$。 1. 计算几何中心 几何中心是所有顶坐标的平均值,即: $$x_c=\frac{1}{n}\sum_{i=1}^{n} x_i$$ $$y_c=\frac{1}{n}\sum_{i=1}^{n} y_i$$ MATLAB代码如下: ```matlab % 输入顶坐标 x = [x1, x2, ..., xn]; y = [y1, y2, ..., yn]; % 计算几何中心 xc = mean(x); yc = mean(y); ``` 2. 计算重心 重心是所有三角形重心的加权平均值,其中每个三角形的重心是三个顶坐标的平均值。具体而言,对于第 $i$ 个三角形,其重心坐标为: $$x_i=\frac{1}{3}(x_{i1}+x_{i2}+x_{i3})$$ $$y_i=\frac{1}{3}(y_{i1}+y_{i2}+y_{i3})$$ 其中 $(x_{i1},y_{i1})$、$(x_{i2},y_{i2})$ 和 $(x_{i3},y_{i3})$ 是第 $i$ 个三角形的三个顶坐标。 重心的坐标为所有三角形重心坐标的加权平均值,其中每个三角形的面积为其三个顶构成的三角形面积的和,即: $$x_g=\frac{\sum_{i=1}^{n} S_i x_i}{\sum_{i=1}^{n} S_i}$$ $$y_g=\frac{\sum_{i=1}^{n} S_i y_i}{\sum_{i=1}^{n} S_i}$$ 其中 $S_i$ 是第 $i$ 个三角形的面积MATLAB代码如下: ```matlab % 输入顶坐标 x = [x1, x2, ..., xn]; y = [y1, y2, ..., yn]; % 计算三角形面积和重心 S = 0; xg = 0; yg = 0; for i = 1:n-2 for j = i+1:n-1 for k = j+1:n % 计算第 i,j,k 个顶组成的三角形面积 Si = abs((x(j)-x(i))*(y(k)-y(i))-(x(k)-x(i))*(y(j)-y(i)))/2; % 计算三角形重心坐标 xi = (x(i) + x(j) + x(k))/3; yi = (y(i) + y(j) + y(k))/3; % 更新重心坐标和三角形面积 xg = xg + Si*xi; yg = yg + Si*yi; S = S + Si; end end end % 计算重心坐标 xg = xg/S; yg = yg/S; ``` 注意,如果多边形是凸多边形,则几何中心和重心重合。如果多边形是凹多边形,则重心会偏离几何中心。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值