Geometry 检测任意形状

Geometry 检测任意形状,geometry,computational-geometry,Geometry,Computational Geometry,您好 我们有一组点,它们表示三维实体和水平面的交点。我们希望检测代表身体横截面的2D形状。可以有一个或多个这样的形状。我们找到了讨论如何使用Hough变换对图像进行操作的文章,但我们可能有数千个这样的点,因此转换为图像是非常浪费的。有没有更简单的方法 感谢您在将三维模型转换为一组点时,您已经放弃了查找交点形状所需的信息。遍历三维模型的边面连接图,按顺序查找边平面交点 假设您拥有或可以构建三维模型地形(一定数量的顶点、顶点之间的边、边绑定的面): 迭代边列表,直到找到与测试平面相交的边,然后将其添

您好

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


感谢您

在将三维模型转换为一组点时,您已经放弃了查找交点形状所需的信息。遍历三维模型的边面连接图,按顺序查找边平面交点

假设您拥有或可以构建三维模型地形(一定数量的顶点、顶点之间的边、边绑定的面):

  • 迭代边列表,直到找到与测试平面相交的边,然后将其添加到列表中
  • 拾取共享此边的一个面
  • 迭代该面的其他边以找到下一个交点,并将其添加到列表中
  • 对共享该边的另一个面重复此操作,直到回到起始边
  • 您已经建立了一个与平面相交的边的有序列表-对每条边进行线性插值以按顺序找到形成相交形状的交点是很简单的。请注意,此过程假定面多边形是凸的,在您的情况下,它们是凸的。 如果体积为凹面,则会有多个离散的相交形状,因此需要重复此过程,直到检查完所有边

    有一些java代码可以做到这一点,还有一个相当漂亮的测试应用程序

    控制:

    • 1-5更改试验体积
    • q和w来更改查询平面的数量
    • a、 s和d来改变查询平面的扫描速度
    • 单击鼠标左键并拖动以旋转视图
    • 单击鼠标右键并拖动以旋转查询平面

    当平面与凹面的某些顶点相交时,接受答案的算法/代码不适用于复杂的特殊情况。在这种情况下,贪婪地“行走”边面连通图可以在时间到来之前关闭一些多边形

    发生的情况是,因为平面与顶点相交,在遍历图形时,在一个点上有两种可能出现下一条边,选择哪条边并不重要


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

    您是在谈论任何类型的3D形状,还是存在一些特定于应用程序或领域的约束?因此您想对2D多边形进行模式识别?@Andre,您好,我说的是任何二维形状。由于三维实体的形状类似于树枝,因此它可能会接近一个平面ellipse@Itjax,您好,我需要将一组点(都在同一平面上)划分为组。每组表示一个二维形状(通常不是多边形),因此属于该组的点定义了该二维形状的周长。@Ojala。所以你知道3D身体的确切形状。。。平面的方向也是固定的吗?在这种情况下,它可能更接近于一个注册问题:找到在3d树状体上放置最多“椭球”的变换(平移)。