四元数实现三维绕轴旋转

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

  前段时间要用到空间旋转,所以看了一下四元数方面的资料。顺便就做了一个三维绕轴旋转的测试小程序。
参考了一下绕任意空间轴旋转三维图形
  那篇博客里面是采用的罗德里格旋转的算法实现的。
  这里采用四元数,另外,采用了动态的显示,以及画出了一个旋转轴,方便观察。
四元数的资料可以参考下面的文章
四元数
  写的很不错,另外,秦永元的《惯性导航》里面也写的很清楚。
  需要说明的是选择旋转轴经过的点时需在区间内选择。
  下面是主程序的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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值