2011-01-10 67 views
5

Greetings,检测任意形状

我们有一组点代表3D物体与水平面的交点。我们希望检测代表身体横截面的2D形状。可以有一个或多个这样的形状。我们发现,讨论如何利用Hough变换图像进行操作的文章,但我们可能有成千上万这样的点,所以转换成图像是非常浪费的。有没有更简单的方法来做到这一点?

谢谢

+0

你说的是任何类型的三维形状,还是有一些应用或特定领域的限制? – 2011-01-10 12:32:24

回答

5

在您的3D模型转换为一组点,你已经扔掉找到交集的形状所需的信息。步行3D模型的边缘连通图,按顺序查找边缘平面交点。

假设你有,或可以构建,3D模型地形(一些数目的顶点的,由边缘结合的顶点,面之间的边缘):

  1. 迭代通过边缘列表,直到找到一个相交的测试平面,将其添加到列表
  2. 接共享此边缘
  3. 迭代通过该面的另一边缘,以寻找下一个交叉点的面中的一个,将它添加到列表
  4. 重复用于另一面那个边缘分享,直到你回来了t时的起始边缘

你已经建立了交叉的平面边缘的有序列表 - 这是微不足道的线性插值每个边找到交叉点,从而,形成了路口形状。请注意,这个过程假定脸部多边形是凸面的,这是你的情况。 如果卷是凹的,你将有多个分立路口形状,所以你需要,直至所有边缘都被检查,重复这个过程。

有做这个here一些Java代码,以及一个相当漂亮的测试应用here

控制:

  • 1-5改变测试体积
  • q和w以改变查询飞机
  • A,S,和d的数量来改变所述查询的扫描速度飞机
  • 左键单击拖动旋转视图
  • 右键单击并拖动旋转查询飞机
0

从接受答案的算法/代码不复杂的特殊情况下工作,当平面相交的凹面的一些顶点。在这种情况下“走”边面的连接图贪婪可能时间之前关闭一些多边形。

会发生什么情况是,因为平面与顶点相交,所以在走图的一个点上,下一个边有两种可能性,并且选择哪一个是重要的。

一种可能的解决方案是实现一个图的遍历算法(例如深度优先搜索),并选择其中包含起始边缘的最长循环。