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))        %系統函數,對比

三個方法結果是一致的。

放個圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM