自己琢磨了一下,写了一个点云旋转至XOY平面的的小程序,附带一个和XOZ平面平行的,另外一个平面我不需要,就没写,不过有两个参照很容易可以写出来。上图。
旋转效果
代码在下面:
function [ptcloud,T]=ptRotateZ (Ptcloud,cor_vector) %z轴
n=[0,0,1]
ca = dot(cor_vector, n)
%暂无方向判断。旋转矩阵正确性,未验证。%已验证
a1=cor_vector(1);
a2=cor_vector(2);
a3=cor_vector(3);
b1=a1/sqrt(a1^2+a2^2+a3^2);
b2=a2/sqrt(a1^2+a2^2+a3^2);
b3=a3/sqrt(a1^2+a2^2+a3^2);
if ca>0
o1 = -atan(b2/b3);
else
o1 = pi-atan(b2/b3);
end
o2 = -atan(-b1/sqrt(b2^2+b3^2));
T=rotx(o1)*roty(o2);
ptcloud=pointCloud(Ptcloud.Location*T);
end
Main
clc;clear;
numpt = 10000;
points = zeros(numpt, 3); % 创建一个 10000x3 的零矩阵来存储点
for i = 1:nu