vtk 最小包围盒vtkOBBTree参数解析

        最近遇到一个计算点云最小包围盒的应用,查询资料后,发现vtk有现成的API,vtkOBBTree提供了非常方便的便捷的方法 ComputeOBB,其API的描述如下。

  /**
   * Compute an OBB from the list of points given. Return the corner point
   * and the three axes defining the orientation of the OBB. Also return
   * a sorted list of relative "sizes" of axes for comparison purposes.
   */
  static void ComputeOBB(
    vtkPoints* pts, double corner[3], double max[3], double mid[3], double min[3], double size[3]);
输入参数说明
pts待计算的输入点云数据

输出参数说明
cornerobb的某一个顶点
maxobb最长边的方向向量
midobb次长边的方向向量
minobb最短边的方向向量
sizes按照距离降序排列的方向因子(暂未清楚用处)

这里要注意 max,mid,min并非是单位向量,而是带各方向的偏移量的向量。因此根据corner的坐标加上各个方向的偏移量即可计算出包围盒的8个顶点。

具体代码实现,获取到包围盒8个顶点的方法仅需要按如下向量计算即可:

class Point3D
{
public:
    double x;
    double y;
    double z;
    Point3D operator+(const Point3D& p) const {
        return Point3D(x + p.x, y + p.y, z + p.z);
    }
};

Point3D corner, max, mid, min, sizes

//假设输入点云是 cloud
vtkOBBTree::ComputeOBB(cloud, &corner.x, &max.x, &mid.x, &min.x, &sizes.x);

Point3D p0 = corner;
Point3D p1 = corner + max;
Point3D p2 = p1 + mid;
Point3D p3 = corner + mid;
Point3D p4 = p3 + min;
Point3D p5 = p4 + max;
Point3D p6 = p1 + min;
Point3D p7 = corner + min;                           

原始点云效果图

最小包围盒(OBB)效果图

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值