JavaScript整数点在多边形内/边上判断:上边界忽略问题修复需求
整数点在多边形内/边上的判断:上边界遗漏问题解决
问题背景
在判断整数点[X,Y]是否位于多边形(支持凸多边形、凹多边形,顶点列表可闭合为[[X,Y],[X,Y],...,[X,Y]])内部或边上时,遇到了上边界(maxX、maxY对应的边和顶点)被忽略的问题。
示例场景:
point = [10,10]
polygon = [[0,0],[10,0],[10,10],[0,10]]
该点位于多边形的右上角顶点,但现有算法均返回false,只有将多边形所有maxX、maxY对应的坐标值加1后,才能正确识别该点为在多边形内。
我们的使用场景仅涉及整数坐标,用于游戏中判断玩家是否处于特定坐标区域并标记该区域。
临时解决方案
目前采用扩大上边界坐标的临时方法解决问题,代码如下:
function increaseUpperLimit( polygon ) { let maxX = -10000000 let maxY = -10000000 polygon.forEach(coordinate => { if(coordinate[0] > maxX) maxX = coordinate[0] if(coordinate[1] > maxY) maxY = coordinate[1] }) polygon.forEach(coordinate => { if(coordinate[0] == maxX) coordinate[0] += 1 if(coordinate[1] == maxY) coordinate[1] += 1 }) return polygon }
但此方法属于临时 workaround,更理想的方式是直接修改原判断算法,使其原生支持包含上边界的X和Y坐标。
需求
寻求最优解决方案,确保所有位于多边形内部或边上的整数点都能返回true。
内容的提问来源于stack exchange,提问作者Nardwe
相关产品推荐
相关产品推荐

