zoukankan      html  css  js  c++  java
  • 多边形重心总结

    多边形求重心总结

           多边形求重心:

           逆时针给出你n边形的n个顶点,求重心利用的原理就是,加权平均,如下图:

    a点作为所有小三角形的公共顶点,那么多边形abcdef的中心=);

     

    三角形的面积:用向量的×乘就可以 s1=向量ac×向量ba;(尽量不要用海伦公式,因为海林公式除法太多,容易卡精度)

    三角形的重心:重心为顶点与对边中点的连线的交点,有一个性质很重要如下图:

    ab=ac*(2/3);中学里学过的,证明方法这里就不讲了

    利用这个性质就简单的求出三角形的重心

    /********************************多边形中心模板**************************************/
    struct Point{
           double x,y;
           Point(){}
           Point(double a,double b){
                  x=a;
                  y=b;
           }
           void input(){
                  scanf("%lf%lf",&x,&y);
           }
    };
    Point p;
     
    vector<Point>v;//用来存储所有的点
    double s[N];//用来存放n-2个小三角形的面积
    void init(){
           v.clear();
    }
    double dis(Point a,Point b){//两点间距离
           return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
    }      
    Point operation_Focus(){
           double sall=0;
           Point p(0,0);
           for(int i=1;i<v.size()-1;i++){//每个三角形由v[0],v[i],v[i+1]三个顶点组成
                  //面积
                  s[i-1]=(v[i].x - v[0].x)*(v[i+1].y - v[0].y) - (v[i].y-v[0].y)*(v[i+1].x - v[0].x);
                  sall+=s[i-1];
                  //cout<<"S="<<s[i-1]<<endl;
                  //重心
                  p.x+=s[i-1]*(v[i].x+v[i+1].x+v[0].x)*1.0/3;  
                  p.y+=s[i-1]*(v[i].y+v[i+1].y+v[0].y)*1.0/3;
                  //cout<<"Point=("<<(fx*2+v[0].x)/3<<","<<(fy*2+v[0].y)/3<<")"<<endl;
           }
           p.x/=sall*1.0;
           p.y/=sall*1.0;
           return p;
    }
    /********************************多边形中心模板**************************************/

     

  • 相关阅读:
    问题:弹窗还没点击确认就执行了跳转
    关于版本的问题
    timeUtil
    使用jframe编写一个base64加密解密工具
    JMeter 命令行(非GUI模式)详解(一)-分布式(远程)执行脚本及查看指定结果、日志
    jmeter分布式压测 java.io.FileNotFoundException: rmi_keystore.jks (系统找不到指定的文件。)
    mysql5.7日志时间与系统时间不一致
    mysql查看执行sql语句的记录日志
    Appium如何获取appPackage和appActivity
    关于测试设置
  • 原文地址:https://www.cnblogs.com/wuwangchuxin0924/p/6219536.html
Copyright © 2011-2022 走看看