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;
    }
    /********************************多边形中心模板**************************************/

     

  • 相关阅读:
    fn project 试用之后的几个问题的解答
    fn project 扩展
    fn project 生产环境使用
    fn project 对象模型
    fn project AWS Lambda 格式 functions
    fn project 打包Function
    fn project Function files 说明
    fn project hot functions 说明
    fn project k8s 集成
    fn project 私有镜像发布
  • 原文地址:https://www.cnblogs.com/wuwangchuxin0924/p/6219536.html
Copyright © 2011-2022 走看看