这里提供三种计算凸包面积的方法。
第一个方法是将凸包划分为各三角形,计算各三角形面积。
第二种方法叉积求面积,速度比较快。
第三种是系统调用,验证结果用。
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)) %系统函数,对比
三个方法结果是一致的。
放个图: