现在我有一堆多边形,知道每个多边形的坐标点。
然后我要找出哪几个多边形相互之间嵌套,也就是说组成了一个有孔洞的图形。有谁能提供一个好的算法么?谢谢了。。
然后我要找出哪几个多边形相互之间嵌套,也就是说组成了一个有孔洞的图形。有谁能提供一个好的算法么?谢谢了。。
解决方案 »
- vs2012编译报错“exception”: 不是“std”的成员
- WideCharToMultiByte宽字符转多字符的问题
- VC对INI文件操作
- 如何实现让窗口的一部分镂空
- 请教一个关于loadlibrary的用法
- 这个错误怎么解决?
- 如何使Edit或者RichEdit控件中的某些内容改变字体和颜色
- 我如何在CSOCK的服务端通过一个函数得到当前连接是否已经断开了??不用ONCLOSE.谢谢大家
- 有人知道吗?线程问题:UP有分!!!!
- 我想学vxd编程,请推荐几本参考书,和vtools和SOFTICE的最新版本下载网址!
- vc中静态成员函数中调用非静态成员变量?
- CListCtr如何通过CListCtr::SetItem改变关联的图像索引
看这张图吧。这里边有三个多边形。
但是在数据结构中,这三个多边形是随机顺序储存在一个vector里的,也就是他们相互之间并没有建立拓扑关系,然后现在我要找出哪些多边形是相互嵌套的。
比如说这个最外边的black多边形便是内嵌了red多边形。red多边形内嵌了blue多边形。
多层嵌套是不允许的,比如说blue多边形虽然也在black多边形内部,但是他们之间隔着red多边形,所以在考虑black多边形的内嵌的时候,要将blue排除在外。在整个vector里找出所有类似black与red这样相互嵌套的多边形(有可能会有一个多边形内部嵌套多个小多边形的情况,就是一个图形里有多个洞)。这些多边形没有边界相互交叉的情况。
不知道我说明白没。现在我所采用的算法是是多层迭代,比如读取vector里边的第一个多边形A,然后迭代vector中的其他多边形B,C,D,E....,检查这些多边形有没有在A内部的,如果在A内部就和A绑定。当找出所有在A内部的多边形后,再迭代A中所有的多边形,检查有没有相互嵌套的情况出现,如果有,就把被嵌套的多边形删除。用这样的方法迭代整个vector来确定相互之间的嵌套关系。
但现在的问题是我这个算法效率好像很低。
这种东西应该有比较成熟的公开算法吧。所以想在这里讨教一下。多谢了!
如果不排斥,VC+matlab结合的话倒是有可能解决,不过效率肯定不如纯VC的。
看看这篇文章。
这个应该可以优化吧?如果A嵌入在B内,B又嵌入在C内,那么A与C就不用比较了,必然是A嵌入在C内。
当两个多边形的这个矩形范围内嵌时,才检查是否内嵌;矩形是否内嵌的检查就容易了,直接比较X Y的大小就行;