多边形的凸性
Convexity of a polygon C++?
本文关键字:多边形 更新时间:2023-10-16
如何通过知道一个多边形是凸还是非凸来检验用c++的坐标?
对于多边形的每条边,计算直线方程(Ax+By+C=0
)并检查(将x
和y
代入方程并求取符号),所有的点都在它的一边。
编辑:如果旅行凸多边形,您将始终在每个点上旋转到一个方向(向左或向右)。使用叉乘,你可以简单地推断,下一回合你将旋转到哪一边(负或正)。如果三个连续点的所有叉乘都是等号,那么你的多边形是凸的。
使用任意常用算法查找凸包。一个多边形是凸的当且仅当它的所有顶点都属于它的凸包。
这是O(n log n),但并不依赖于多边形边缘上的点以适当的顺序给出的假设。如果假设成立,那么仇恨引擎的答案是最优的(即线性时间)
礼品包装算法是一种计算凸的算法
伪代码来自wiki:
jarvis(S)
pointOnHull = leftmost point in S
i = 0
repeat
P[i] = pointOnHull
endpoint = S[0] // initial endpoint for a candidate edge on the hull
for j from 1 to |S|-1
if (endpoint == pointOnHull) or
(S[j] is on left of line from P[i] to endpoint)
endpoint = S[j] // found greater left turn, update endpoint
i = i+1
pointOnHull = endpoint
until endpoint == P[0] // wrapped around to first hull point
如果你的点与上述算法的检测点匹配,则多边形为凸。
相关文章:
- 计算缩放多边形的比例,得到给定的多边形面积
- 将QGraphicsItem的移动区域限制在多边形区域内
- 重新排列单线以形成闭合多边形?
- 提升几何体:C++并集多个多边形
- 在 QT C++中绘制/操作多边形
- Maya API C++:从多边形获取材质
- 添加带有提升的多边形::p奥利贡不编译?
- 使用 C++在 OpenGL 中对 3D 多边形进行纹理处理
- 使用 C++在 OpenGL 中移动自动旋转的 3D 多边形
- 如何使用增强::几何计算多边形的旋转固体体积?
- 从拉伸多边形构建多面体
- 使用提升几何缓冲区缩放多边形时的冗余折点
- cgal多边形网格中的tet网格密度分级
- 如何绘制具有随机顶点数量的多边形并旋转它们
- 多边形裁剪 - 一点点详细说明
- 使用裁剪器库在线和多边形之间相交
- 平移 CGAL 多边形,而无需循环穿过折点
- 无法正确改变窗口中多边形的形状
- 在多边形内查找增强 rtree 元素
- 将当前多边形数据单元与下一个多边形单元格 - VTK 进行比较