我希望执行多边形点检查,但首先需要从多边形中删除多余的线,以便随后执行射线投射算法。多边形以2D二进制数组表示(1表示填充,0表示空白)。冗余线被认为在任一端都没有至少两个相邻的像元(即北,东,南和/或西,但不是对角线)填充的点。
具有连接点(白色=空,蓝色=实心)的线的示例:
以不连续点(白色=空,蓝色=填充,绿色=填充但不连接)结尾的线的示例:
多边形的例子(白色=空,蓝色=填充,绿色=去除):
移除多余点后的多边形示例(白色=空,蓝色=填充):
一种简单但效率极低的算法将是检测具有少于2个相邻填充点的点,并将其删除并循环,直到未进行任何更改为止。一种更有效的解决方法?
侧面说明:我知道一个2x2(或更大)的填充点区域将被视为彼此连接,因此不会被删除-这是有意的。我也知道,当我达到光线投射算法时,光线投射测试将需要考虑水平和垂直线。