向二维多边形添加点

Adding a point to a 2D polygon

本文关键字:多边形 添加 二维      更新时间:2023-10-16

我有一个基于双链表的Polygon2D类,需要搜索和修改,它将在游戏引擎中用于各种实用程序,如碰撞检测,以及定义图形形状和可能的纹理坐标等。多边形应该可以是凹形或凸形,但不能与自身相交。

我很难想出一个方法来插入一个点,这样它就不会与多边形相交。我一直在做的是通过两个指向节点的指针来搜索离要插入的点最近的边,这两个指针都从头部开始,并在不同的方向上迭代。当其中一个的"下一个"节点是另一个指针时,搜索就完成了,该点被插入到两者之间。否则,向前迭代的节点会一直进行到目前为止最接近的点(如果下一个节点是另一个指针,则停止),然后"向后"迭代的节点也会这样做。

不幸的是,在前向迭代指针之前的边或后向迭代指针"之后"的边与插入新点时创建的新边相交的情况下,这仍然会导致相交。在那之后,越来越多的十字路口可以很容易地驶入

这是insert方法的代码。

我可以改进这个算法并保持它为O(n)吗?或者有一种完全不同的方法可以更好地工作吗?

顺便说一句,"findClosest[Edge](vec2pt)"搜索使用了稍微修改过的算法版本,但我觉得必须有一种更有效的方法来进行这些搜索,而不需要使用更多的内存或时间。

对于计算从给定点到顶点的距离,从点到多边形的距离可能会有所帮助。