前段时间要用到空间旋转,所以看了一下四元数方面的资料。顺便就做了一个三维绕轴旋转的测试小程序。
参考了一下绕任意空间轴旋转三维图形
那篇博客里面是采用的罗德里格旋转的算法实现的。
这里采用四元数,另外,采用了动态的显示,以及画出了一个旋转轴,方便观察。
四元数的资料可以参考下面的文章
四元数
写的很不错,另外,秦永元的《惯性导航》里面也写的很清楚。
需要说明的是选择旋转轴经过的点时需在区间内选择。
下面是主程序的matlab代码:
clear all;
close all;
% 随机生成转轴通过的点(需确保在xyz所包围的立方体内部)
origin=rand(1,3)*5;
% origin=[5 5 0];
% 随机生成转轴方向
direct=rand(1,3);
% direct=[0 0 1];
% 随机生成旋转角度
theta=rand*5;
[x,y,z]=peaks;
% 图像显示的立方体边界
xmin=-10;xmax=20;ymin=-10;ymax=20;zmin=-10;zmax=20;
xyz=[xmin xmax;ymin ymax;zmin zmax];
directZero=find(~abs(direct)); %找出等于零的元素索引
directNum=length(directZero);
dotCros=NaN(6,3);
% 运用直线的两点式方程确定旋转轴与显示六面体的六个面的六个交点
if(directNum==3)
error('Not valid vector.');
else
for k=1:3
tCrossMin=(xyz(k,1)-origin(k))/direct(k);
dotCros((k-1)*2

本文分享了如何使用MATLAB通过四元数进行三维图形绕任意轴旋转的实践,重点讲解了计算旋转轴的方法、罗德里格旋转算法的应用,并展示了如何处理计算精度问题。附带了一个优化过的四元数旋转函数和实际效果图。
最低0.47元/天 解锁文章
2725

被折叠的 条评论
为什么被折叠?



