zoukankan      html  css  js  c++  java
  • 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))        %系统函数,对比

    三个方法结果是一致的。

    放个图:

  • 相关阅读:
    TWinHttp之二
    日志池
    TWinHTTP
    TJSONTableObject跨平台解析JSON
    TSQLTableJSON解析JSON
    TDocVariantData解析JSON
    Vue.js常用指令汇总(v-if//v-show//v-else//v-for//v-bind//v-on等)
    VUE -- 十分钟入门 Less
    VUE -- ejs模板的书写
    Go VUE --- vuejs在服务器部署?
  • 原文地址:https://www.cnblogs.com/tiandsp/p/12110068.html
Copyright © 2011-2022 走看看