我有一个基于Polygon2D
类的双向链表需要搜索和修改,并且可以在游戏引擎中用于各种实用程序,如碰撞检测和定义图形形状和可能的纹理坐标,除其他事项外。多边形应该是凹的或凸的,但它不能自相交。
我无法想出一种插入点的方法,这样就不会导致与多边形的交叉。我一直在做的是通过两个指向节点的指针来搜索插入点的最近边缘,这两个指针都从头部开始并在不同的方向上迭代。当"下一个"任一节点是另一个指针,搜索完成,并在两者之间插入点。否则,向前迭代的节点一直进行到目前为止它到达最近的点(如果下一个节点是另一个指针则停止),然后节点迭代"向后"做同样的事。
不幸的是,在前向迭代指针之前的边缘或边缘仅仅是#34之后的情况下,这仍会导致交叉。向后迭代指针与插入新点时创建的新边相交。在那之后,越来越多的十字路口很容易滑入。
Here is the insert method's code
我可以改进这个算法并保持O(n)还是有一个完全不同的方法可以更好地工作吗?
作为旁注," findClosest [Edge](vec2 pt)"搜索使用稍微修改过的算法版本,但我觉得必须有一种更有效的方法来进行这些搜索,而不需要使用更多的内存或时间。