检测任意形状

Oja*_*ala 7 geometry computational-geometry

问候,

我们有一组点代表3d体和水平面的交点.我们想要检测代表身体横截面的2D形状.可以有一个或多个这样的形状.我们找到了讨论如何使用Hough变换对图像进行操作的文章,但是我们可能有数千个这样的点,因此转换为图像非常浪费.有更简单的方法吗?

谢谢

rya*_*anm 6

在将3D模型转换为一组点时,您已丢弃了查找交点形状所需的信息.走一下3D模型的边 - 面连通图,按顺序找到边平面交点.

假设您拥有或可以构建三维模型地形(一些顶点,顶点之间的边,边缘边界):

  1. 遍历边列表,直到找到与测试平面相交的边列表,将其添加到列表中
  2. 选择一个共享此边缘的面
  3. 迭代该面的其他边缘以找到下一个交叉点,将其添加到列表中
  4. 重复共享该边缘的另一面,直到您回到起始边缘

您已经构建了一个与平面相交的有序边缘列表 - 按顺序线性插值每个边以找到交叉点,这将形成交叉点形状.请注意,此过程假定面多边形是凸的,在您的情况下它们是凸的.如果您的体积是凹的,则会有多个离散的交叉形状,因此您需要重复此过程,直到检查完所有边.

有一些Java代码,这是否在这里,和一个相当漂亮的测试应用在这里.

控制:

  • 1-5改变测试音量
  • q和w来改变查询平面的数量
  • a,s和d来改变查询平面的扫描速度
  • 左键单击并拖动以旋转视图
  • 右键单击并拖动以旋转查询平面