首页 > 其他 > 详细

matlab练习程序(凸包面积)

时间:2019-12-28 00:21:37      阅读:186      评论:0      收藏:0      [点我收藏+]

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

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

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

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

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))        %系统函数,对比

三个方法结果是一致的。

放个图:

技术分享图片

matlab练习程序(凸包面积)

原文:https://www.cnblogs.com/tiandsp/p/12110068.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!