【问题标题】:How can I detect a intersection between a pointcloud and a triangle mesh?如何检测点云和三角形网格之间的交集?
【发布时间】:2019-05-19 19:29:11
【问题描述】:

我有一个带有一些反对意见的点云,我生成了一个长方体,并希望检测长方体与点云中的对象之间的交集/碰撞。

目前我正在使用 Open3D 并从立体视觉相机读取点云(xyzrgb,.ply)并生成 3D 几何(闭合三角形网格)。

如何检测三角形网格与点云中的任何点之间的交点? 我认为最简单的方法是检查点云的每个点是否位于网格内,但我该怎么做呢?

from open3d import *

pcd = read_point_cloud("out.ply")
draw_geometries([pcd])

# print("Let\'s draw some primitives")
mesh_box = create_mesh_box(width=1.0, height=1.0, depth=1.0)
mesh_box.paint_uniform_color([0.9, 0.4, 0.1])
mesh_frame = create_mesh_coordinate_frame(size=0.6, origin=[0, 0, 0])
draw_geometries([pcd, mesh_box, mesh_frame])

TM = np.eye(4, dtype=int)
TM[0, 3] = 10
TM[1, 3] = 10
TM[2, 3] = 10

open3d.geometry.Geometry3D.transform(mesh_box, TM)
draw_geometries([pcd, mesh_box, mesh_frame])

【问题讨论】:

  • 请参阅How to Ask。就目前而言,您的问题过于宽泛且超出主题。

标签: python collision-detection intersection point-clouds


【解决方案1】:

我可以看到三种不同的场景可能适用于这里:

1.点网格 epsilon-intersection 这里我们检查点是否位于网格的表面上。

对于所有点,对网格的所有三角形执行点到三角形的距离检查,并检查距离是否小于某个选定的 epsilon。

2。点网格碰撞检测 在这里,我们检查点是否与网格碰撞。这假设点已经移动,因此我们有一条从最后一个位置到当前位置的线段。

对于所有点移动,对网格的所有三角形执行线三角形相交。

3.点网格遏制 在这里,我们检查点是否在网格内。这假设网格是封闭的且可定向的。如果不是,那你的问题就完全不同了。

对于所有点,选择一条延伸到无穷远(或足够远)的随机射线,并计算该射线与网格的交点数。如果它是零或偶数,则该点位于网格的外部。否则它在里面。请注意,此算法在某些极端情况下可能会失败,例如,如果点直接位于网格的表面上,或者光线恰好在一条线上而不是一个点与网格相交。

基本上所有场景都归结为执行点-三角形距离检查和线-三角形相交检查。我可以针对这两个问题发布一些解决方案,但我只是复制搜索查询的结果,所以...

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2019-06-06
  • 2017-12-15
  • 1970-01-01
  • 1970-01-01
  • 2011-05-20
  • 1970-01-01
  • 2013-09-27
  • 1970-01-01
相关资源
最近更新 更多