向二维多边形添加点
Adding a point to a 2D polygon
我有一个基于双链表的Polygon2D
类,需要搜索和修改,它将在游戏引擎中用于各种实用程序,如碰撞检测,以及定义图形形状和可能的纹理坐标等。多边形应该可以是凹形或凸形,但不能与自身相交。
我很难想出一个方法来插入一个点,这样它就不会与多边形相交。我一直在做的是通过两个指向节点的指针来搜索离要插入的点最近的边,这两个指针都从头部开始,并在不同的方向上迭代。当其中一个的"下一个"节点是另一个指针时,搜索就完成了,该点被插入到两者之间。否则,向前迭代的节点会一直进行到目前为止最接近的点(如果下一个节点是另一个指针,则停止),然后"向后"迭代的节点也会这样做。
不幸的是,在前向迭代指针之前的边或后向迭代指针"之后"的边与插入新点时创建的新边相交的情况下,这仍然会导致相交。在那之后,越来越多的十字路口可以很容易地驶入
这是insert方法的代码。
我可以改进这个算法并保持它为O(n)吗?或者有一种完全不同的方法可以更好地工作吗?
顺便说一句,"findClosest[Edge](vec2pt)"搜索使用了稍微修改过的算法版本,但我觉得必须有一种更有效的方法来进行这些搜索,而不需要使用更多的内存或时间。
对于计算从给定点到顶点的距离,从点到多边形的距离可能会有所帮助。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 如何在C++中从两个单独的for循环中添加两个数组
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 如何仅为一个函数添加延迟
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 如何将更多文件夹添加到c++include路径
- 如何将元素添加到数组的线程安全函数?
- QT通过C++添加映射QML项目
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 只能向C++添加一定数量的字符
- 计算缩放多边形的比例,得到给定的多边形面积
- Qt和C++:将QLineEdit添加到QTabWidget中
- 将QIcon添加到QTableView单元格
- 添加带有提升的多边形::p奥利贡不编译?
- 向二维多边形添加点
- 增强::几何体如何将多边形添加到多重多边形中