poj 2318 TOYS(计算几何 点跟直线的位置关系)
2013-08-01 10:56
579 查看
原题友情链接直通车~便民服务~鼠标点击此打开~ poj 2318
简单的计算几何
先说下题目的意思:
告诉一个矩形,在告诉n条直线的信息,这n条直线把这个矩形划分成n+1个区域,接着告诉m个点的坐标,让你求出这m个点分别在哪个区域中。
出个n+1个区域中分别有多少个点。
思路:
有一个细节是他告诉的直线信息是一次从矩形的左端到右端排列的。也就是说存放直线的line数组里直线是有序的,知道这个就可以用二分+叉乘来判断点的区域了。
具体实现看代码,
简单的计算几何
先说下题目的意思:
告诉一个矩形,在告诉n条直线的信息,这n条直线把这个矩形划分成n+1个区域,接着告诉m个点的坐标,让你求出这m个点分别在哪个区域中。
出个n+1个区域中分别有多少个点。
思路:
有一个细节是他告诉的直线信息是一次从矩形的左端到右端排列的。也就是说存放直线的line数组里直线是有序的,知道这个就可以用二分+叉乘来判断点的区域了。
具体实现看代码,
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> using namespace std; const int Maxsize = 5010; typedef struct { int x,y; }point; typedef struct { point a,b; }Line; Line line[Maxsize]; int cnt[Maxsize]; int crossProduct(point p1,point p2,point p0)/*叉乘判断点跟直线的位置关系*/ { return (p1.x - p0.x)*(p2.y - p0.y) - (p2.x - p0.x)*(p1.y - p0.y); } void found(point p0,int n)/*二分找区域*/ { int r,l,mid; l = 0 , r = n -1; while(l < r) { mid = (r + l )>>1; if(crossProduct(p0,line[mid].a,line[mid].b) > 0) { l = mid+1; } else { r = mid; } } if(crossProduct(p0,line[l].a,line[l].b) < 0) cnt[l]++; else cnt[l+1]++; } int main() { int ct; int n,m,x1,y1,x2,y2,t1,t2; while(scanf("%d",&n) && n) { scanf("%d %d %d %d %d",&m,&x1,&y1,&x2,&y2); ct = 0; memset(cnt,0,sizeof(cnt)); for(int i = 0 ; i < n ; i++) { scanf("%d %d",&t1,&t2); line[ct].a.x = t1; line[ct].b.x = t2; line[ct].a.y = y1; line[ct++].b.y = y2; } for(int i = 0 ; i < m ; i++) { point p; scanf("%d %d",&p.x,&p.y); found(p,n); } for(int i = 0 ; i <= n ; i++) { printf("%d: %d\n",i,cnt[i]); } printf("\n"); } return 0; }
相关文章推荐
- POJ 2318 TOYS(计算几何+点与直线位置关系+二分)
- POJ 2318 TOYS 计算几何(点与直线关系)
- poj 2398 Toy Storage(计算几何,点跟直线的位置关系)
- poj2318——TOYS(计算几何+点与线段的位置)
- POJ 2318 TOYS + POJ 2398 Toy Storage (点与直线的位置关系)
- POJ--2318 -- TOYS [点、线基本关系] [计算几何]
- POJ-2318 TOYS 计算几何 判断点在线段的位置
- poj 题目2318 TOYS (计算几何,点与边的关系)
- poj 2318 TOYS(计算几何 点与线段的关系)
- POJ_2318_TOYS&&POJ_2398_Toy Storage_二分+判断直线和点的位置关系
- POJ 2318 TOYS(计算几何)
- POJ 3304 Segments 【计算几何】【直线和线段的关系】
- 【POJ】2318 TOYS(计算几何基础+暴力)
- POJ1269 计算几何直线与直线的关系
- POJ - 2318 TOYS(计算几何)
- poj 2318 TOYS(计算几何)
- POJ 2318 TOYS(计算几何)
- POJ 2318 TOYS 计算几何 入门题 叉积 + 二分
- POJ 2318:TOYS & POJ 2398:Toy Storage 计算几何
- poj 2318 直线和点位置关系(二分查找)