题目大意:
给定一个点数为 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>