geometry - 检测任意形状

标签 geometry computational-geometry

你好,

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

谢谢

最佳答案

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

假设您拥有或可以构建 3d 模型地形(一定数量的顶点、顶点之间的边、边所包围的面):

  • 遍历边列表直到找到与测试平面相交的边列表,将其添加到列表
  • 选择共享这条边的面之一
  • 遍历该面的其他边以找到下一个交点,将其添加到列表
  • 对共享该边的另一个面重复此操作,直到您回到起始边

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

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

    控制:
  • 1-5更改测试音量
  • q 和 w 改变查询平面的数量
  • a、s 和 d 改变查询平面的扫描速度
  • 左键单击并拖动以旋转 View
  • 右键单击并拖动以旋转查询平面
  • 关于geometry - 检测任意形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4646738/

    相关文章:

    algorithm - 计算圆和三角形的相交面积?

    c++ - 矩形交点(垂直线)

    c++ - 在给定的 MxN 板中找到仅由 2 种字母组成的最大矩形区域

    c# - 简单的 3D AABB-Line Segment 碰撞检测(交叉点)

    检查多边形是否是多面体投影的算法

    opencv - 使用 Kinect 检测地板上的物体

    algorithm - 如何从现有的多边形中高效提取新的多边形

    geometry - 放大/缩放/膨胀/放大三角形的算法

    c - C 中的光线追踪 - 圆柱体、法向 vector 和旋转

    python - 找到数组元素的所有可能组合。不是产品