【问题标题】:How do you know if you are 'inside' a set of triangles?你怎么知道你是否在一组三角形的“内部”?
【发布时间】:2014-02-12 16:21:15
【问题描述】:

如果您有一组像这样的“常规”连接三角形:

...而且您知道每个三角形的顶点/法线,有什么方法可以有效地测试另一个点是“内部”还是“包含在”三角形集合中?

谢谢!

【问题讨论】:

  • 这是 2D 还是 3D 问题?
  • 你是否总是有凸形(如本例所示)或者它们可以是任意的?
  • 唯一的限制是它们将是封闭的、不相交的物体。例如,它们可能是“芸豆”或“沙漏”的形状,但始终只有一个身体。

标签: algorithm graphics geometry computational-geometry mesh


【解决方案1】:

从给定的点,投射一条直线。测试线与每个三角形的交点并计算在该点同一侧找到的所有交点。如果这个计数是奇数,你就在里面。

为了简化计算,使用x=x0y=y0 作为直线并将所有内容投影到XY 平面上。使用How to determine if a point is in a 2D triangle?,最后检查交集的z值。

【讨论】:

  • 这是蛮力方法。一种更有效的方法(对于大型网格,并且如果有足够的位置查询来分摊初始成本)将构建分层空间数据结构(BSP 树、kd 树、八叉树),以在查询期间剔除大量三角形,并且显着减少射线/三角形相交测试的总数。由于此处的光线方向实际上是固定的,因此甚至可以使用 xy 平面中更简单的 2D 空间数据结构。
猜你喜欢
  • 1970-01-01
  • 2012-09-27
  • 2012-11-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-18
  • 2015-05-14
  • 2011-11-05
  • 1970-01-01
相关资源
最近更新 更多