【问题标题】:Finding nearest element to a point STL format查找离点最近的元素 STL 格式
【发布时间】:2018-06-25 14:23:14
【问题描述】:

简短介绍: 我有一个由外表面表示的主体,以 STL 形式给出(一组三角形元素及其指向外部的法线向量)。 我正在尝试检测坐标给出的点是在身体内部还是外部。

问题: 如何找到离给定点最近的元素? 更具体地说,假设您找到了离该点最近的顶点,并且该顶点由两个(或更多)元素共享。哪个是“最近”的? 请注意,最终结果是确定该点是在身体内部还是外部。简单的法线距离(与法线的点积)不能解决问题,并且可能会导致基于哪些元素选择了共享节点而产生歧义。 使用元素的质心也是有问题的。

欢迎提出任何建议和想法(尤其是来自以前参与过此问题的人)!

编辑: 我会让这个问题稍微难一些。假设有一个开放的表面(但它覆盖了整个域,因此每个点都位于表面的两侧之一,无论是向内还是向外,都基于相对于法线的方向。 这也需要使用相同的方法来回答。

编辑2: 找到答案了!

希望这会有所帮助!

【问题讨论】:

  • 通常的方法是从查询点向任意方向射出一条射线,并计算与表面的交点。如果您的表面很小,您可以测试所有三角形的交点。或者您可以使用加速数据结构(网格、kd-tree、包围体层次结构...)
  • 我以前见过这种方法——但是它是有问题的。 1. 查看我的编辑评论 2. 我正在使用的复杂体在几个处理器之间拆分以节省运行时间。这对我没有用。
  • STL 不支持开放曲面。对于命中测试,您根本不需要最近的三角形或顶点,只需从 bbox 外的任何位置开始,指向与该方向不平行的任何三角形的中心(所以|dot(direction,triangle_normal)|>0.0

标签: math stl geometry nearest-neighbor cad


【解决方案1】:

该问题已通过射线相交法的变体得到解决。 1. 使用 L2 范数(平方)找到最近的顶点。 2. 考虑共享顶点的元素。建议有一个连接列表,而不是每次都映射它们。 3. 投射光线从兴趣点投射到第一个元素的质心。 4. 检查 中与射线相交的元素,选择相交距离最短的元素 5. 使用相交向量与元素法线的点积(负号 = 外部,否则在内部)

(这已添加到问题帖子本身)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多