半平面,指的就是一条直线把一个平面分成了两个半平面…… 如果有好几条这样的直线,就会有很多个半平面,我们有的时候会求他们的交。
半平面交一个很有用的用处是求多边形的核。所谓多边形的核,就是指多边形中的一块区域,在这个区域里面放一个灯泡,这个灯泡转一周,能照亮这个多边形里所有的地方。稍微想想就会知道,凸多边形一定是有核的,而且就是它本身,但是凹多边形就未必有核了。比如这个多边形
蓝色的区域就是它的核,但是如果你站在淡黄色点的话,叉子的那一部分你就看不到了。
怎么求一个多边形的核呢?有这样一个算法:
1. 将所有点逆时针/顺时针排序,到底是逆时针还是顺时针很关键,影响到后面符号的判断。
2. 维护一个点集合kernel,这个点集合所包含的点就是这个多边形的核;
3. 对于原多边形的每条边构成的直线line,扫一下所有的点,如果点i就在对于这条线而言的多边形内部,那么点i直接就加入kernel集合;