之前工作遇到的需求,需要在UI地图上绘制任务区域的大小,顶点数,形状不固定,有凹多边形存在的可能,并且进一步提出需要描边效果;
凹多变形Mask
判断是否在多边形内部,通过一点任意方向穿过多边形边的次数的奇偶做判断,如果是奇数次,是内部,偶数次,是外部
判断一点沿一方向是否和一线端相交的代码如下,通过把是否相交记录为1 或 -1,最终所有的结果相乘即可获得奇偶结果
1 | |
此实现最多提供了8个顶点,当需要顶点数不必要8个时,没用到的那些顶点设置为Point1一样的位置即可,像下图用了五个顶点的边有交错的五角星也是可以实现的,虽然除了好看,对于区域ui来说没什么意义就是了…
如果想要实心的五角星,需要10个顶点;
项目里用作地图区域,8个顶点足够了,而且8个顶点的计算,指令数也用到最后多了,不能在复杂了。
描边Mask
描边需要计算点到每条边的距离·,所有边的结果取最小值
1 | |
混合