matlab练习程序(凸包面积)

这里提供三种计算凸包面积的方法。

第一个方法是将凸包划分为各三角形,计算各三角形面积。

第二种方法叉积求面积,速度比较快。

第三种是系统调用,验证结果用。

matlab代码如下:

clear all;
close all;
clc;

n=30;
p=rand(n,2);

ind=convhull(p(:,1),p(:,2));
hull=p(ind,:);          %随机点凸包

plot(p(:,1),p(:,2),'.');
hold on;
plot(hull(:,1),hull(:,2),'r');

myarea=0;
%海伦公式法
triangle1=hull(1,:);
for i=2:length(hull)-1
    triangle2=[hull(i,:);hull(i+1,:)];  
    triangle=[triangle1;triangle2];         %构造三角形
    
    a = sqrt(sum((triangle(1,:)-triangle(2,:)).^2));       %三个边长
    b = sqrt(sum((triangle(1,:)-triangle(3,:)).^2));
    c = sqrt(sum((triangle(2,:)-triangle(3,:)).^2));
    
    p = (a+b+c)/2;                              %海伦公式
    S = sqrt(p*(p-a)*(p-b)*(p-c));
    myarea = myarea + S;
end
myarea

myarea = 0;
%叉积求面积,更快
for i=1:length(hull)-1
    myarea = myarea + (hull(i,1)*hull(i+1,2) - hull(i+1,1)*hull(i,2)) / 2;
end

myarea
area = polyarea(hull(:,1),hull(:,2))        %系统函数,对比

三个方法结果是一致的。

放个图:

猜你喜欢

转载自www.cnblogs.com/tiandsp/p/12110068.html