python凹多边形分割_凹多边形拆分

公司项目上要做多边形的相交检测,检测大致方法是先对多边形所在平面做一个快速检测,检测成功后再把多边形拆分成三角形,做具体的检测。对于单纯的凸多边形三角化,是较为简单的,可以随机取多边形的一个顶点,然后每次取两个相邻顶点与其组成一个三角形。如下图,随机取一顶点后,可以依次拆分出4个三角形。

但是后来却遇到了坑爹的对凹多边形进行做相交检测的需求。如果沿用对凸边形三角化的方法对凹多边形三角化就会出现问题了,需要再做对凹多边形三角化的算法。通过分析,可以发现问题产生于凹多边形中的凹点。要对凹多边形做三角化,首先就要区分出凹多边形中的凹点和凸点,之后对凹边形的拆封就相对容易了,我们可以对凹多边形的凸点,然后取其相邻顶点组成一个三角形,将凹多边形拆分出一个新的多边形和一个三角形。如果是凹点就不进行处理。由于在不断的拆分过程中,多边形会变的越来越简单,总能找到凸点进行拆分。

因此主要问题就找出凹多边形中的凹点和凸点。不过问题来了,在网上找了一些算法后,感觉没有什么比较好的方法。想了好久都没想出一个好方法。最终觉得只能根据随机取一点,判断该点是否在剩下顶点组成的多边形内,如果是的,则说明该点是凹点,不是则是凸点。因此问题转化为判断某一点是否在一多边形内,不过感觉还是有点棘手的样子,不好判断。后来想到计算机图形学的书里应该有可行的算法,于是就去翻看我上学时那本图形学的书,一找果然有好方法。

如果我不翻看计算机图形学的书,我无论都想不到这样的好方法,觉得计算机图形学的确是graphics

rendering非常重要的基础,里面涵盖了大量的基础知识,想要理解graphics

rendering,必须具备这些东西。当初在大学学这么课的时候,同时开了directx和opengl,相对于学习枯燥的大量基础性又较难理解的计算机图形学的知识,我一下子栽进了使用图形api的世界,在学完图形api后还天真的认为已经懂那么些computer

graphics啊,real-time

rendering这些。其实那个时候连渲染流水线都没有透彻理解,不过觉得现在应该也没有吧。

扯了一些其他的话,在有了判断某一点是否在一多边形内,就可以做凹边形的拆分了。到了这里感觉经历了好多过程,做个凹多边形拆分也不是件容易的事啊,不过大神应该觉得这太简单了。不过再细细一想还有有点问题。就拿下图一个简单的凹多边形来说

取最上面的顶点和其相邻两个顶点对凹多边形做拆分,突然发现有一个凹点跑到要拆分出的三角形里面了,这拆出来还是不对啊,不过这问题挺好解决的,再判断下凹多边形的所有顶点是不是在即将要拆出来的三角形内,都不在说明可以拆分,有一个在,就说明要选取其他顶点做拆分。

以上,对凹多边形的拆分算法算是说完了,说来说去感觉还是听麻烦的,可能由于水平问题还让人看不懂,排版和组织都弄的稀烂,还有就是算法还是有bug,另外觉得算法也不是很的好,不过好在,没有那么多凹多边形要拆,拆的多边形顶点数也不会太多,可以凑合着用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值