原包围盒
pca创建的最小包围盒
% 原包围盒
Lx= max(pt.XLimits)-min(pt.XLimits);%点云数据的长方体包围盒的边长
Ly= max(pt.YLimits)-min(pt.YLimits);
Lz= max(pt.ZLimits)-min(pt.ZLimits);
pcshow(pt)
pos = [99.255 -4.1 0.32 Lx Ly Lz 0 0 0];
showShape('cuboid',pos,'Color','green','Opacity',0.5)
% pca创建局部坐标系
P=(1/size(in,1)) * transpose(in - mean(in)) * (in - mean(in));
[V,D] = eig(P);
a1 = [1 0 0;0 1 0;0 0 1;0 0 0];
a2 = [transpose(transpose(mean(in))+V(:,1));transpose(transpose(mean(in))+V(:,2));transpose(transpose(mean(in))+V(:,3));mean(in)];
% svd变换 转换到原坐标系下
a1_centrioed = sum(a1',2)/size(a1',2);
a2_centrioed = sum(a2',2)/size(a2',2);
C1 = (a2' - repmat(a2_centrioed,1,size(a2',2))) * transpose(a1' - repmat(a1_centrioed,1,size(a1',2)));
[U,S,V] = svd(C1);
Rotation = V * U';
Translation = a2_centrioed - Rotation*a1_centrioed;
a3 = Rotation * in' + repmat(Translation,1,size(in',2));
% 新包围盒
pt2 = pointCloud(a3');
pcshow(pt2)
pos = [min(pt2.XLimits)+(max(pt2.XLimits)-min(pt2.XLimits))/2 min(pt2.YLimits)+(max(pt2.YLimits)-min(pt2.YLimits))/2 min(pt2.ZLimits)+(max(pt2.ZLimits)-min(pt2.ZLimits))/2 ...
max(pt2.XLimits)-min(pt2.XLimits) max(pt2.YLimits)-min(pt2.YLimits) max(pt2.ZLimits)-min(pt2.ZLimits) 0 0 0];
showShape('cuboid',pos,'Color','green','Opacity',0.5)