zoj 1081 Points Within
来源:互联网 发布:november rain 知乎 编辑:程序博客网 时间:2024/06/02 03:05
改进弧长算法
要求多边形是有向多边形
#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <algorithm>using namespace std;struct node{ double x, y;} p[105], pp[105];int inpolygon(node t, int n){ int i,t1, t2, sum, f; for( i = 0; i <= n; i++) { p[i].x = pp[i].x - t.x; p[i].y = pp[i].y - t.y; } //判断当前点在第几象限 t1 = p[0].x >= 0 ?(p[0].y >=0?0:3) : (p[0].y >=0?1:2); for(sum = 0, i = 1; i <= n; i ++) { if(!p[i].x && !p[i].y) break; f = p[i].y*p[i-1].x - p[i].x*p[i-1].y; //处理当多边形的某条边在坐标轴上而且两个顶点分别在原点 //的两侧会出错,所以每次算P[i]和p[i+1]时,就计算 //叉积点积判断该点是否在边上,是则判断结束 if(!f && p[i-1].x*p[i].x <= 0 && p[i-1].y*p[i].y <= 0) break; t2 = p[i].x >=0?(p[i].y >= 0 ? 0:3) :(p[i].y >= 0 ? 1 : 2); //判断相对象限 if(t2 == (t1+1)%4) sum += 1; else if(t2 == (t1 + 3)%4) sum -= 1; else if(t2 == (t1 + 2)%4) { if(f > 0) sum += 2; else sum -= 2; } t1 = t2; } if(i <= n || sum) return 1; return 0;}int main(){ int n, i; node t; int ca = 1; while(scanf("%d",&n) != EOF && n) { int m; scanf("%d",&m); if(n == 0) break; for(int i = 0; i < n; i++) scanf("%lf%lf",&pp[i].x, &pp[i].y); pp[n] = pp[0]; if(ca > 1) puts(""); printf("Problem %d:\n",ca++); for( int i = 0; i < m; i++) { scanf("%lf%lf",&t.x, &t.y); if(inpolygon(t, n)) puts("Within"); else puts("Outside"); } } return 0;}
0 0
- zoj 1081 Points Within
- ZOJ 1081 Points Within
- zoj 1081 Points Within
- ZOJ 1081 Points Within (几何)
- ZOJ 1081 Points Within(点在多边形内判定)
- zoj 1081 Points Within[判断点在简单多边形内]
- ZOJ 1081 Points Within 判断点是否在多边形内
- ZOJ 1081 Points Within(点在多边形内判定)
- zoj 1081 Points Within (判断点是否在多边形内)
- zoj 1081 Points Within 判断点是否在任意多边形内(模板)
- zoj 1081 Points Within (判断点是否在多边形内)
- Points Within
- Points Within
- zoj1081 Points Within
- ZOJ1081 Points Within
- ZOJ1081 Points Within
- [学习][ZOJ1081]点、直线关系 Points Within
- zoj 2554 Brownie Points
- LightOJ 1030 Discovering Gold 概率
- iOS通过UIAlertView实现Android Toast效果
- hdu 2452 Navy maneuvers-记忆化搜索
- css中的优先级
- Storyboard的简单使用
- zoj 1081 Points Within
- hdu 2389 Rain on your Parade【最大匹配】
- python的jieba分词词性标注
- iOS开发 ----- UITablBarController_NSUserDefault
- 14.如何给分类添加数据成员
- POJ 3349 Snowflake Snow Snowflakes ( HASH+最小表示判同构 )
- iOS开发 ----- UIGestureRecognizer
- SpringMVC设置缺省的返回数据格式
- linux c 字符判断函数