matlab練習程序(羅德里格斯變換)


給出空間中一個點,將該點繞向量(k1 k2 k3)旋轉一定角度theta,從而得到新點,這種操作能夠利用羅德里格斯變換來處理。

變換公式如下:

其中theta為旋轉度數。

K為由點所繞的單位向量構成的矩陣。

比如所繞向量為(k1 k2 k3),則矩陣K表示如下:

公式中R即為進行這種變換的旋轉矩陣。

同樣,用四元數也能夠完成這種旋轉操作。

下面給出了用四元數和羅德里格斯變換對同一個點做旋轉的例子,互相驗證一下。

matlab代碼如下:

clear all;
close all;
clc;

p=rand(1,3);        %待旋轉點

quat = eul2quat([0.6,0.4,0.5]);     %利用歐拉角構造四元數
q_quat = quaternion(quat);
p_quat = quaternion([0 p]);
re_quat= q_quat*p_quat*q_quat';     %利用四元數旋轉
[w,a,b,c] = parts(re_quat);         %得到四元數中四個數

theta = acos(quat(1))*2;            %得到旋轉弧度和所環繞的向量
kx = quat(2)/sin(theta/2);
ky = quat(3)/sin(theta/2);
kz = quat(4)/sin(theta/2);

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

dr = HelperDrawRotation;
figure;
dr.draw3DOrientation(gca,[quat(2:4)],theta*180/pi);

hold on;
plot3(p(1),p(2),p(3),'bo')
plot3(p1(1),p1(2),p1(3),'r*')
plot3(a,b,c,'go');
axis equal;

其中的HelperDrawRotation是matlab幫助中的例子,我就不貼了,可以點擊這里下載

變換效果如下:

利用四元數和羅德里格斯變換將藍圈變換到綠圈(紅星)上,結果是一致的。

注:這里matlab版本為2019a,2018a之前版本可能沒有quaternion這個函數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM