查找立方体内的所有3D点(3D框)

时间:2018-12-20 06:24:39

标签: c++11 vtk point-cloud-library point-clouds qvtkwidget

我正在尝试找出3D盒子内部的点云的3D点。仅当3d框与轴对齐时,我才能通过以下逻辑获得3D框内的点,但是在旋转3d框时,逻辑会失败。

(仅在框的边缘与坐标轴对齐时适用。)

如果顶点是(x1,y1,z1),(x2,y1,z1),(x1,y2,z1),⋯,(x2,y2,z2),则任意点(x,y,z )仅在以下情况下位于框内

x1<x<x2
and
y1<y<y2
and
z1<z<z2

换句话说,点的坐标在顶点的坐标之间。

现在我从https://math.stackexchange.com/questions/2909812/points-inside-a-3d-rectangle?noredirect=1&lq=1得到了算法,但无法弄清楚如何获取“位置向量”。

任何建议!

另一个问题:有没有一种快速的方法来找出3D框内的所有点,而不是遍历整个点云。

任何建议都值得赞赏!

2 个答案:

答案 0 :(得分:1)

由于您在问题的标记中列出了point-cloud-library,因此 pcl::CropBox 可能正是您要寻找的。您基本上提供了两个角点,一个平移和一个旋转,然后,您可以提取框中的所有点。

答案 1 :(得分:0)

I'll use the notation $\vec{OA}=\vec A-\vec O$ for a difference of position vectors. $O$ is one vertex, and $A,B,C$ are its three adjacent vertices.

O,A,B,C有长方体的顶点。作为parallelepiped,立方体可以由三个相邻的面定义,总共四个点。