我试图找出最有效/快速的方法将大量凸四边形(四个给定的 x,y 点)添加到数组/列表中,然后检查这些四边形是否在边界内或边界上那些四边形。
我最初尝试使用光线投射,但认为这有点矫枉过正,因为我知道我所有的多边形都是四边形并且它们也是凸的。
目前,我将每个四边形分成两个共享一条边的三角形,然后使用它们的区域检查该点是否在这两个三角形的每一个上或之中。
例如三角形 ABC 和测试点 P。 if (areaPAB + areaPAC + areaPBC == areaABC) { return true; }
这似乎运行得有点慢,因为我需要计算 4 个不同三角形的面积来运行检查,如果四边形的第一个三角形返回 false,我必须再获得 4 个区域。(我在检查中包含了一点 epsilon 以弥补浮点错误)
我希望有一种更快的方法,它可能涉及对一个四边形的点进行单次检查,而不是将其分成两个三角形。
我试图通过将多边形放入数组 [,] 来减少检查次数。添加多边形时,它会检查最小和最大 x 和 y 值,然后使用这些值,将相同的多边形放置到正确的数组位置。根据可用多边形检查点时,它会从列表数组中检索正确的列表。
我一直在搜索类似的问题,我认为我现在使用的可能是确定一个点是否在三角形中的最快方法,但我希望有更好的方法来测试一个四边形总是凸的。我查找的每个多边形测试似乎都是针对具有许多边或不规则形状的多边形进行测试。
感谢您花时间阅读我冗长的问题,了解什么是一个简单的问题。