轴角法进行旋转 (Matlab)

             

贡献者: 待更新

  • 本词条处于草稿阶段.

  

未完成:给出思路

预备知识 罗德里格旋转公式、绕轴旋转矩阵

   计算点 $p$ 绕直线 $\frac{x-x_0}{k_x}=\frac{y-y_0}{k_y}=\frac{z-z_0}{k_z}$($\vec{k}$ 是法向单位矢量)按右手螺旋规则旋转 $\theta$ 角得到的新点

   以下给出 Matlab 代码.

%main.m
clc;
clear all;
close all;


p=[2,0,0]; %旋转前的点
r0=[1,0,0]; %直线上的一点r0
x0=r0(1);
y0=r0(2);
z0=r0(3);
param=[0,1,0,pi/3];%分别是kx,ky,kz,theta
p_relative=p-r0;  %旋转前的点相对r0的矢量
p_rotated=Rotation(p_relative,param)+r0 %p_rotated就是结果
% Rotaion.m
function p1=Rotation(p,param)
[row,col]=size(param);
if row==1&col==4 
    ;
else
    warndlg('请检查Rotation函数的第二个参数param的size是否是1*4');
end
if norm(param(1,end-1))-1.0<1e-8
    ;
else
    warndlg('请检查Rotation函数的第二个参数param的kx,ky,kz构成的向量是否模长1')
end   
    
[row,col]=size(p);
if row==1&col==3
    ;
else 
    warndlg('请检查Rotation函数的第一个参数p的size是否是1*3');
end

kx=param(1);
ky=param(2);
kz=param(3);
theta=param(4);

K=[0 -kz ky;
   kz 0 -kx;
   -ky kx 0];
R = eye(3) + sin(theta)*K + (1- cos(theta))*K*K;    %罗德里格斯公式
p1= R*p';                           %利用罗德里格斯公式计算的旋转后的点
p1=p1';
end

  

未完成:demo


致读者: 小时百科一直以来坚持所有内容免费,这导致我们处于严重的亏损状态。 长此以往很可能会最终导致我们不得不选择大量广告以及内容付费等。 因此,我们请求广大读者热心打赏 ,使网站得以健康发展。 如果看到这条信息的每位读者能慷慨打赏 10 元,我们一个星期内就能脱离亏损, 并保证在接下来的一整年里向所有读者继续免费提供优质内容。 但遗憾的是只有不到 1% 的读者愿意捐款, 他们的付出帮助了 99% 的读者免费获取知识, 我们在此表示感谢。

         

友情链接: 超理论坛 | ©小时科技 保留一切权利