计算几何知识整理
1、判断一个点是否在三角形内
把这个点与三角形的顶点连线,算出这三个小三角形的面积之和与大三角形对比
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; }
2、皮克定理
皮克定理是指一个计算点阵中顶点在格点上的多边形面积公式,该公式可以表示为2S=2a+b-2,其中a表示多边形内部的点数,b表示多边形边界上的点数,S表示多边形的面积。
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; }