RVD(Restricted Voronoi Diagram)的

2017-08-19  本文已影响27人  WZFish0408

前言

小学期的项目,做之前不和我们说是工业级的保密算法,做之后,只有一篇论文,还是纸质版,没有电子版,一个月的时间还有许多bug,但是尽力了。使用了Eigen3.0.0和freeglut以及meshLib

算法概述

由于是纸质版论文,也不好发上来,大体说一下步骤。
1.获取所有三角面片,并随机产生点作为种子
2.构建k-d树,可以找到生成的点的k个最近点(KNN)
3.构造多边形数据结构,初始化数据结构为三角面片的三个点,找到距离多边形中心最近的种子(k-d树)以及这个种子最近的k个点(k-d树)。
4.对每一个多边形进行切割形成泰森多边形,切割方式是,多边形的中心种子与最近的k个点的连线的垂直平分面切割原多边形形成新多边形,并使用栈记录是哪一个最近的点
5.从栈中取出点继续对原多边形切割直到栈空

多线程加速解释

由于可以对于每一个三角面片分开切割,所以可以并行执行,但是线程太多会出现问题,所以我在每个线程切割100个面。使用GPU更快

存在的问题

上面说有bug,主要是因为切割,有时候会切掉本应该压栈的点。论文也没说明白,谁让人家保密呢。。。最后这么难的东西,就给一个月,才给我88分,气!

代码

https://github.com/WZFish/RVD-with-mutithread.git

上一篇下一篇

猜你喜欢

热点阅读