Python 如何检测点云和三角形网格之间的交点?

Python 如何检测点云和三角形网格之间的交点?,python,collision-detection,intersection,point-clouds,Python,Collision Detection,Intersection,Point Clouds,我有一个带有一些异议的点云,我生成了一个长方体,并希望检测长方体和点云中的对象之间的相交/碰撞 目前,我正在使用Open3D,从立体视觉相机读取点云(xyzrgb,.ply),并生成3D几何体(闭合三角形网格) 如何检测三角形网格与点云中任意点之间的交点? 我认为最简单的方法是检查点云的每个点是否位于网格内,但我如何才能做到这一点 from open3d import * pcd = read_point_cloud("out.ply") draw_geometries([pcd]) # p

我有一个带有一些异议的点云,我生成了一个长方体,并希望检测长方体和点云中的对象之间的相交/碰撞

目前,我正在使用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])

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

1。点网格ε交点 这里,我们检查点是否位于网格曲面上

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

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

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

3。点网格包容 这里我们检查点是否在网格内。这假定网格是闭合的且可定向的。如果不是,你就有一个完全不同的问题

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


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

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

1。点网格ε交点 这里,我们检查点是否位于网格曲面上

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

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

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

3。点网格包容 这里我们检查点是否在网格内。这假定网格是闭合的且可定向的。如果不是,你就有一个完全不同的问题

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


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

请参阅。你的问题太宽泛,离题了。请看。你的问题太宽泛,离题了。非常感谢!我已经知道了。这帮了大忙:我想它就像你的第三点一样有效。非常感谢!我已经知道了。这帮了大忙:我想这就像你的第三点。