UVA 143 Orchard Trees(判断点在三角形内)
2014-09-21 14:28
155 查看
UVA 143 Orchard Trees(判断点在三角形内)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&page=show_problem&problem=79
题意:
在一个[0,100]坐标范围的二维平面中,任意给你三角形的三点,问你[1,99]范围的整点坐标有多少个 在该三角形内部(在边上也算).
分析:
首先我们直接枚举所有的1-99整点,然后判断该点是否在三角形内部即可.
判断一个点是否在三角形内部可以用面积也可以用向量叉积方向的方法. 代码中我的面积判断.
题中给的3点如果共线的话, 那么只有一个整点也跟这3点共线且要在这3点构成的线段内才行.这点需要注意. 所以需要多判断一下该点的坐标是否在3点的坐标范围的最大最小值范围内.
我把double声明成了int, 结果WA了半天,真是醉了.
AC代码:
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&page=show_problem&problem=79
题意:
在一个[0,100]坐标范围的二维平面中,任意给你三角形的三点,问你[1,99]范围的整点坐标有多少个 在该三角形内部(在边上也算).
分析:
首先我们直接枚举所有的1-99整点,然后判断该点是否在三角形内部即可.
判断一个点是否在三角形内部可以用面积也可以用向量叉积方向的方法. 代码中我的面积判断.
题中给的3点如果共线的话, 那么只有一个整点也跟这3点共线且要在这3点构成的线段内才行.这点需要注意. 所以需要多判断一下该点的坐标是否在3点的坐标范围的最大最小值范围内.
我把double声明成了int, 结果WA了半天,真是醉了.
AC代码:
#include<cstdio> #include<cmath> #include<algorithm> using namespace std; const double eps=1e-10; int dcmp(double x) { if(fabs(x)<eps) return 0; return x<0?-1:1; } struct Point { double x,y; Point(){} Point(double x,double y):x(x),y(y){} }A,B,C; typedef Point Vector; Vector operator-(Point A,Point B) { return Vector(A.x-B.x,A.y-B.y); } double Cross(Vector A,Vector B) { return A.x*B.y-A.y*B.x; } double Area(Point A,Point B,Point C) { return fabs(Cross(A-B,A-C))/2; } bool InTriangle(Point P,Point A,Point B,Point C) { double max_x=max(A.x,max(B.x,C.x));//我真是醉了,这里声明成了int WA了我半天 double min_x=min(A.x,min(B.x,C.x)); double max_y=max(A.y,max(B.y,C.y)); double min_y=min(A.y,min(B.y,C.y)); double s=Area(A,B,C); if( dcmp( Area(P,A,B)+Area(P,A,C)+Area(P,B,C)-Area(A,B,C) ) ==0 ) { if(dcmp(s)>0) return true;//ABC三点不共线 return dcmp(P.x-min_x)>=0 && dcmp(P.x-max_x)<=0 && dcmp(P.y-min_y)>=0 && dcmp(P.y-max_y)<=0;//三点共线且P在线段ABC内 } return false; } int main() { while(scanf("%lf%lf%lf%lf%lf%lf",&A.x,&A.y,&B.x,&B.y,&C.x,&C.y)==6) { if(A.x==0 && A.y==0 && B.x==0 && B.y==0 && C.x==0 && C.y==0) break; int ans=0;//三角形内点数 for(int i=1;i<=99;++i) for(int j=1;j<=99;++j) { Point P(i,j); if(InTriangle(P,A,B,C)) ++ans; } printf("%4d\n",ans); } return 0; }
相关文章推荐
- UVA 143 || Orchard Trees (点 P 在三角形内,S(PAB) + S(PAC) + S( PBC) = S(ABC)
- UVa-143-Orchard Trees(果树林)[计算几何]
- uva143 - Orchard Trees
- UVa 143 Orchard Trees (数学&计算几何&枚举)
- UVa 143 - Orchard Trees
- UVa 143 - Orchard Trees
- Save the Students! UVALive - 5984 (几何判断点在三角形、圆、矩形)
- UVA 11275 判断空间三角形是否相交
- UVaOJ 143 Orchard Trees
- uva 10250 The Other Two Trees(矩形三角形坐标计算)
- UVA Orchard Trees(计算几何)
- uva 10112 Myacm Triangles(判断点是否在三角形内)
- UVa OJ 143 - Orchard Trees (果树林)
- 判断点是否在三角形内
- *分支-02. 三角形判断
- zzuli OJ 1030: 判断直角三角形
- 福大OJ2273 如何判断点是否在三角形内
- 判断点是否在三角形内 - 画三角形的重要方法
- 判断点是否在三角形内 和 点是否在矩形内
- Uva-297 - Quadtrees(四分树与结构体指针)