CGL_3_C 点の多角形の内包判定
目次
# 問題
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=CGL_3_C
点が多角形に内包されるか、されないかまたは多角形の辺上にあるかを判定する問題.
# 解説
詳しいアルゴリズムは以下を参照.
# 解答
#define MAX_N 101
#define MAX_Q 1001
Int N, Q;
Vector2 polygon[MAX_N];
Vector2 point;
Int contains(Vector2 &point) {
bool in = false;
loop(n,0,N) {
Vector2 a = polygon[n] - point;
Vector2 b = polygon[(n+1) % N] - point;
if (fabs(a.cross(b)) < EPS && a.dot(b) < EPS) return 1;
if (a.y > b.y) swap(a, b);
if (a.y < EPS && b.y > EPS && a.cross(b) > EPS) in = !in;
}
return in ? 2 : 0;
}
void input() {
cin >> N;
loop(n,0,N) cin >> polygon[n];
cin >> Q;
while (cin >> point) {
cout << contains(point) << endl;
}
}
int main() {
cout.precision(15);
input();
}