一、判斷一個點是否在三角形內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; }