【发布时间】:2017-08-20 22:20:23
【问题描述】:
编辑:我正在尝试使用三个向量来计算 3D 边界框的尺寸,这些向量包含表示我的框的 3 个坐标的元素,即 Cluster_x、Cluster_y 和 Cluster_z。我用于查找中心值的算法如下。我不知道我哪里错了。
tFloat32 x_max = *std::max_element(Cluster_x.begin(), Cluster_x.end());
tFloat32 x_min = *std::min_element(Cluster_x.begin(), Cluster_x.end());
tFloat32 y_max = *std::max_element(Cluster_y.begin(), Cluster_y.end());
tFloat32 y_min = *std::min_element(Cluster_y.begin(), Cluster_y.end());
tFloat32 z_max = *std::max_element(Cluster_z.begin(), Cluster_z.end());
tFloat32 z_min = *std::min_element(Cluster_z.begin(), Cluster_z.end());
//Center//
tFloat32 c_x = (x_max - x_min) / 2;
tFloat32 c_y = (y_max - y_min) / 2;
tFloat32 c_z = (z_max - z_min) / 2;
cetuc::BoundingBox NewBox(cetuc::Point3D(c_x,c_y,c_z), cetuc::Point3D(8, 8, 10), cetuc::Point3D(0, 0, 0));
【问题讨论】:
-
如果您使用 3 个向量来描述一个框,我只能假设其中一个已经是它的中心。
-
您使用 C 还是 C++ 工作?做好决定!向量末端的物体是否同样重?这将影响质心计算。您将需要了解轮换的含义。
-
如果只有三个向量来描述盒子,那么其中一个向量必须是对角线,并且该向量的中点是中心。
-
这三个向量包含代表一个对象的点云簇中所有点的维度。所以这三个向量具有单独向量中所有点的所有 x、y 和 z 值。我正在研究 C++,但我添加了 C,因为它可以覆盖更多人。我对计算盒子尺寸背后的基本逻辑感到困惑。我的教授也可以 0 旋转。但程度是我迷失的地方。
-
@Brandon 盒子中心的 x、y 和 z 坐标是通过找到相应向量的中心来计算的。但是,为了找到范围,我是简单地使用向量的最大和最小元素找到边缘的长度,还是应该计算从中心到角落或从中心到盒子表面中心的距离。这是我的主要困惑。
标签: c++ visual-studio vector bounding-box point-clouds