一个闭合的栅栏是平面上的一些不相交的首尾相连的线段形成的多边形,有 $N$ 个角(顶点)$(3 < N < 200)$。 顶点不重合,它以逆时针方式以数组 $\{x_i, y_i\}$ 给出 $(i=1,2,...,N)$。
每一对相邻的顶点都是一条栅栏。因此共有 $N$ 条栅栏(定义 $x_{N+1}=x_1, y_{N+1}=y_1$)。
这里有一个栅栏的例子和一个点 $x,y$:
* x3,y3
x5,y5 / \
x,y * * / \
/ \ / \
/ * \
x6,y6* x4,y4 \
| \
| \
x1,y1*----------------* x2,y2
请编写一个程序实现下面的任务:
- 检查输入的顶点列表 $\{x_i,y_i\}, i=1,2,...,N$,判断它是否为一个合法的闭合栅栏。 (其实不必考虑)
- 找出所有可以被站在点 $(x,y)$ 处的人所能看到的栅栏(忽略人的高度),因为有的栅栏会被另外的栅栏所挡住。
只有当存在从 $(x,y)$ 发射的一条射线第一个穿过栅栏 $i$ 时,栅栏 $i$ 是可以被看见的。如果栅栏是平行于目光的,它并不认为是可以看见的。在上面的例子里,线段 $[x_3,y_3]-[x_4,y_4], [x_5,y_5]-[x_6,y_6], [x_6-y_6]-[x_1,y_1]$ 是可以被 $(x,y)$ 看见的。