标签:
嗯因为本人就是个计算几何渣所以标题就写个初步好了…
①求多边形面积 poj3907
随便找一个点,对多边形相邻顶点求叉积。加在一起求绝对值即可。
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <algorithm> #include <string.h> #include <vector> #include <math.h> #include <limits> #include <set> #include <map> using namespace std; int n; double x[2333333],y[2333333]; int main() { while(scanf("%d",&n),n) { for(int i=0;i<n;i++) scanf("%lf%lf",x+i,y+i); double mx=2000000000,my=2000000000; for(int i=0;i<n;i++) mx=min(mx,x[i]), my=min(my,y[i]); --mx; --my; double ans=0; for(int i=0;i<n;i++) { double x1=x[i]-mx, y1=y[i]-my; double x2=x[(i+1)%n]-mx, y2=y[(i+1)%n]-my; ans+=x1*y2-y1*x2; } ans/=2; if(ans<0) ans=-ans; printf("%.0lf\n",ans); } }
②点是否在多边形内 zoj1081
经典问题了,只要把这个点往一个方向做一条射线(水平容易出事),然后统计经过多边形边的交点数。
可以发现如果射线没有经过多边形顶点的话只要判一下交点的奇偶性就行。
标签:
原文地址:http://www.cnblogs.com/zzqsblog/p/5419346.html