• 多边形叉积求面积法


    对于一个多边形(可以为凹多边形)求其面积可以用叉积面积法,其证明过程十分简单,对于任意3个点A,B,C若其点成逆时针给出,那么三角形的面积就是,设A点是原点:(xb*yc-xc*yb)/2;这其实就是向量求面积得来的,这个结果为正,当点A,B,C顺时针给出时,其面积就会为负。我们求一个多边形面积时,我们就可以取o点(原点)来求,每求次按顺序取出多边形的连续两点,对所求结果求和即为面积。注意(最后一个点和第一个点也要算进去,故,求和次数是n次,n为多边形边数)基础题练手:http://acm.hdu.edu.cn/showproblem.php?pid=2036  多边形叉积面积法详解博客:https://blog.csdn.net/Adusts/article/details/80546770

    ac代码:(自定义ak函数是给出3边求面积的海伦公式,bk是叉积函数)

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<queue>
     5 #include<stack>
     6 #include<algorithm>
     7 #include<vector>
     8 #include<cmath>
     9 #define MAX(a,b) (((a)>(b))?(a):(b))
    10 #define MIN(a,b) (((a)>(b))?(b):(a))
    11 using namespace std;
    12 typedef long long ll;
    13 typedef pair<ll,ll> P;
    14 const int mod=1000;
    15 struct node{
    16     ll x,y;
    17 }p[105];
    18 double ak(node a,node b,node c)
    19 {
    20     double ans=0;
    21     double la,lb,lc,ls;
    22     la=sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
    23     lb=sqrt((a.x-c.x)*(a.x-c.x)+(a.y-c.y)*(a.y-c.y));
    24     lc=sqrt((c.x-b.x)*(c.x-b.x)+(c.y-b.y)*(c.y-b.y));
    25     ls=(la+lb+lc)/2.0;
    26     ans=sqrt(ls*(ls-la)*(ls-lb)*(ls-lc));
    27     return ans;
    28 }
    29 double bk(node a,node b)
    30 {
    31     double ans;
    32     ans=(a.x*b.y-b.x*a.y)/2.0;
    33     return ans;
    34 }
    35 int main()
    36 {
    37     int n;
    38     while(cin>>n&&n)
    39     {
    40         for(int i=0;i<n;i++)
    41             cin>>p[i].x>>p[i].y;
    42         double ans=0;
    43         for(int i=0;i<n-1;i++)
    44             ans+=bk(p[i],p[i+1]);
    45         ans+=bk(p[n-1],p[0]);
    46         printf("%.1f
    ",ans);
    47     }
    48     return 0;
    49 }
  • 相关阅读:
    jvm误区--动态对象年龄判定
    jmeter入门实例
    七牛云的文件上传和下载
    layer.prompt添加多个输入框
    zero copy图解
    java枚举的线程安全及序列化
    java单例模式
    ubuntu16.04 python3.5 opencv的安装与卸载(转载)
    独家git clone 加速方法
    apt get update无法正常使用解决方案(转载)
  • 原文地址:https://www.cnblogs.com/wwq-19990526/p/11282993.html
Copyright © 2020-2023  润新知