UVA Orchard Trees(计算几何)
2013-10-13 21:48
459 查看
求给定浮点三角形中的整点个数,包括边界上面的,开始以为又是什么转化的PICK定理,后来发现点的范围很小,所以直接暴力枚举每个点
判断在不在三角形内部,判断直接用面积判断
可能会导致wa的地方是三角形可能会退化成一条直线,那么在共线的点无论在不在三角形状内部都符合,所以这里要加一个判断
判断在不在三角形内部,判断直接用面积判断
可能会导致wa的地方是三角形可能会退化成一条直线,那么在共线的点无论在不在三角形状内部都符合,所以这里要加一个判断
#include <iostream> #include <string.h> #include <algorithm> #include <cmath> #include <stdio.h> using namespace std; #define eps 1e-8 #define zero(x) (fabs(x)<eps?1:0) #define MAX(a,b) (a>b?a:b) #define MIN(a,b) (a<b?a:b) struct point{ double x,y; }a,b,c,temp; double area; double cross(point &a,point &b,point &c){ return (b.x-a.x)*(c.y-a.y)-(c.x-a.x)*(b.y-a.y); } bool is_ok(point &temp){ double ans=0; ans+=fabs(cross(temp,a,b)); ans+=fabs(cross(temp,b,c)); ans+=fabs(cross(temp,a,c)); if(!zero(ans-area)) return false; if(zero(area)){ return (temp.x>=MIN(a.x,b.x) && temp.x<=MAX(a.x,b.x)) || (temp.x>=MIN(b.x,c.x) && temp.x<=MAX(b.x,c.x))|| (temp.x>=MIN(a.x,c.x) && temp.x<=MAX(a.x,c.x)); } return zero(ans-area); } int main(){ int i,j,k,ans; while(scanf("%lf%lf%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y,&c.x,&c.y)){ if(a.x==0 && b.x==0 && c.x==0 && a.y==0 && b.y==0 && c.y==0) return 0; ans=0; area=fabs(cross(a,b,c)); for(i=1;i<100;i++) for(j=1;j<100;j++){ temp.x=i,temp.y=j; if(is_ok(temp)){ ans++; } } printf("%4d\n",ans); } return 0; }
相关文章推荐
- UVa-143-Orchard Trees(果树林)[计算几何]
- UVa 10250 The Other Two Trees (计算几何)
- UVA 10250 题目 The Other Two Trees (计算几何)
- uva 11178 Morley's Theorem 计算几何
- UVA 11437 - Triangle Fun(计算几何)
- UVa 143 - Orchard Trees
- UVa 12714 Two Points Revisited (水题,计算几何)
- UVA 1473 - Dome of Circus(三分+计算几何)
- Uva 10112 【简单的计算几何】.cpp
- uva 10652 Board Wrapping (计算几何-凸包)
- 两线段间的距离,三分法,计算几何(狗的距离,uva 11796)
- HDU 1392 Surround the Trees(计算几何,求凸包周长)
- UVa10263 - Railway(计算几何)
- UVALIVE 5893 计算几何+搜索
- UVALive-7351-The Agglomerator(计算几何)
- 计算几何专项:UVa 11072
- UVa 10012 How Big is It? (计算几何+DFS)
- UVa 438 The Circumference of the Circle (计算几何)
- UVA - 10250 - The Other Two Trees (简单计算几何)
- uva 12300 Smallest Regular Polygon(计算几何)