計算幾何知識整理

一、判斷一個點是否在三角形內spa

  把這個點與三角形的頂點連線,算出這三個小三角形的面積之和與大三角形對比code

    

double gs(double x1,double x2,double x3,double y1,double y2,double y3)
{
    return abs((x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2)));
}
int pd()
{
    double sabc=gs(po[1].x,po[2].x,po[3].x,po[1].y,po[2].y,po[3].y)*100;
    double sadb=gs(po[1].x,po[2].x,po[4].x,po[1].y,po[2].y,po[4].y)*100;
    double sadc=gs(po[1].x,po[3].x,po[4].x,po[1].y,po[3].y,po[4].y)*100;
    double sbdc=gs(po[2].x,po[3].x,po[4].x,po[2].y,po[3].y,po[4].y)*100;
    double tot=sadb+sadc+sbdc;
    if(sadb==0||sadc==0||sbdc==0)
        return 3;
    if(tot==sabc)
        return 1;
    if(tot!=sabc)
        return 2;
    return 2; 
}

二、皮克定理blog

  皮克定理是指一個計算點陣中頂點在格點上的多邊形面積公式,該公式能夠表示爲2S=2a+b-2,其中a表示多邊形內部的點數,b表示多邊形邊界上的點數,S表示多邊形的面積。ci

    

int gcd(int a,int b)
{
    while(b>0)
    {
        int c=a%b;
        a=b;
        b=c;
    }
    return a;
}
int main()
{
    cin>>n>>m>>p;
    b+=gcd(n,m);
    b+=p-1;
    b+=gcd(abs(n-p),m);
    s=(p*m);
    a=s-b+2;
    cout<<a/2;
    return 0;
}
相關文章
相關標籤/搜索