多邊形重心總結


多邊形求重心總結

       多邊形求重心:

       逆時針給出你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;
}
/********************************多邊形中心模板**************************************/

 

 


免責聲明!

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



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