我试图绕过只能在 SFML C++ 库中形成凸形状的规则。
为此,我计划测试给定的顶点,如果是凹的,
将顶点分成组,测试每个组的凹性,
并重复直到得到看起来像的全套凹形形状
就像组合在一起时的原始形状一样
我想知道的是...
Thanks!
您可以通过绕过所有边缘并检查下一条边缘始终沿相同方向移动(左手/右手)来测试形状是否为凸包。这是一种快速且廉价的算法。这里有一个实现:en.wikipedia.org/wiki/Graham_scan http://en.wikipedia.org/wiki/Graham_scan
如果您没有凸包,请执行包包装算法以获得包含所有点的凸包(同样非常快)。en.wikipedia.org/wiki/Gift_wrapping_algorithm http://en.wikipedia.org/wiki/Gift_wrapping_algorithm
现在,寻找位于形状上但不在凸包上的点。对于这些点的每次运行,从这些点(加上凸包两侧的 2 个点)创建一个新形状。
递归现在是你的朋友:对你刚刚制作的每个子形状执行完全相同的过程。
我已经使用这种技术来测试任意形状内包含的点:即该点必须位于凸包内部(易于测试),但不是任何子形状,或其子形状,或其子形状-形状....
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)