Foj 2148 二维几何(点是否在三角形内)
2014-03-14 19:01
204 查看
[b]题目大意:给n个坐标(不存在三点共线的点),求能够组成多少个凸四边形。[/b]
#include<iostream> #include<cstdio> #include<cmath> using namespace std; struct Point { int x,y; Point(int x=0,int y=0):x(x),y(y){} }p[35]; typedef Point Vector; Vector operator - (Vector A, Vector B){ return Vector(A.x-B.x,A.y-B.y);} int AbsCross(Vector A,Vector B){ return fabs(A.x*B.y-A.y*B.x);} Point read_point() { Point p1; scanf("%d %d",&p1.x,&p1.y); return p1; } bool fun(int i,int j,int k,int m) { int area1,area2,area3,area4,sum; area1=AbsCross(p[j]-p[i],p[k]-p[i]); area2=AbsCross(p[j]-p[i],p[m]-p[i]); area3=AbsCross(p[k]-p[i],p[m]-p[i]); area4=AbsCross(p[k]-p[j],p[m]-p[j]); sum=area2+area3+area4; if(sum!=area1) return true; return false; } bool is_ok(int i,int j,int k,int m) { if(!fun(i,j,k,m)) return false; if(!fun(i,j,m,k)) return false; if(!fun(i,k,m,j)) return false; if(!fun(j,k,m,i)) return false; return true; } int main() { int i,j,k,m,n,T,Icase,ans; scanf("%d",&T); for(Icase=1;Icase<=T;Icase++) { ans=0; scanf("%d",&n); for(i=0;i<n;i++) p[i]=read_point(); for(i=0;i<n-3;i++) { for(j=i+1;j<n-2;j++) { for(k=j+1;k<n-1;k++) { for(m=k+1;m<n;m++) { if(is_ok(i,j,k,m)) ans++; } } } } printf("Case %d: %d\n",Icase,ans); } return 0; }
相关文章推荐
- CSU 1272 1272: Karma(几何 判断点是否在三角形内)
- foj 2148 Moon Game 判断n个点有几个凸四边形 + 枚举4个点 + 判断点在三角形外
- 第3章:几何方面:点是否在三角形内?
- 判断一个点是否在一个三角形内(二维)
- UVA 11437 Triangle Fun 三角形趣题 (二维几何)
- 二维平面上判断点是否在三角形内
- hrbustoj 1142:围困(计算几何基础题,判断点是否在三角形内)
- FOJ 2148 给定的二维坐标 能构成的凸四边形数
- 计算几何工具算法-判断点是否在三角形内
- 简单三维几何,判断俩个三角形是否相交
- 二维平面上判断点是否在三角形内
- C++ opencv数学方法判断点是否在三角形内
- 判断点是否在三角形内
- 判断点是否在三角形内 和 点是否在矩形内
- 输入三角形三边的值,判断是否是三角形,并输出是什么三角形
- 判断一个点是否在三角形内部
- Codeforces Round #358 (Div. 2) E 计算几何 旋转卡壳求最大三角形面积
- 判断点是否在三角形内
- 求任意一点是否在三角形内部
- 查找数组中是否存在任意三个数可组成三角形的算法