zoj1081(点与多边形的位置关系)

博客介绍了如何判断一个点是否在多边形内部,提出了使用射线法,通过检查点与多边形边界交点的奇偶性来确定。文章包含样例数据和代码解释,特别关注了特殊情况的处理,如点在边上的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目大意:
给定一个点数为 n 的多边形,点按照顺序给出,再给出 m 个点,询问每个点是否在多边形内。 n <= 100。
样例数据
Sample Input
3 1
0 0
0 5
5 0
10 2
3 2
4 4
3 1
1 2
1 3
2 2
0
Sample Output
Problem 1:
Outside
Problem 2:
Outside
Within

分析
在网上看到了两种方法:射线法和改进的弧长算法,本来觉得后者的算法简单好写一些,但后来发现有一种射线法写的比较简单。
求一个点P 是否在多边形Q内部:过P做一条平行于x 轴的射线L,若与多边形有奇数个交点,则点在多边形内部,反之,在外部这可以转化为求L与Q的每一条边是否有交点。但要注意一些特殊情况:1、交点时多边形的顶点,这时我们需要规定交在边的下端点统计进答案或是交在边的上端点统计进答案 (也就是保证一个点要么都被统计要么都不被统计)。2、P点与Q的一条边共线,判断是否在这条边上。即在这条线段上,算在内;反之算在外。
附代码及详解

#include<iostream>
#include<cstring>
#include<string>
#include<cstdlib>
#include<cstdio>
#include<ctime>
#include<queue>
#include<iomanip>
#include<set>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值