這里提供三種計算凸包面積的方法。
第一個方法是將凸包划分為各三角形,計算各三角形面積。
第二種方法叉積求面積,速度比較快。
第三種是系統調用,驗證結果用。
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)) %系統函數,對比
三個方法結果是一致的。
放個圖: