现在时间是:
当前位置:首 页 >> Matlab>> 教学区>> 文章列表

16074306 作业六

作者:唐书娟   发布时间:2019-05-18 21:39:38   浏览次数:36

习题 1. p1=[a1;b1;c1;d1] p2=[a2;b2;c2;d2] 分别表示两个四元数 p1=a1+b1*i+c1*j+d1*k p2=a2+b2*i+c2*j+d2*k ,编写程序求 p=p1*p2

提示:(1)设 p=a+b*i+c*j+d*k 则可用 p=[a; b; c; d] 表示.

   2)令

          A=[a1 -b1 -c1 -d1

            b1 a1 -d1 c1

            c1 d1 a1 -b1

            d1 -c1 b1 a1],

p=A*p2.

分析:根据提示只需将A矩阵表示出来,利用p=A*p2即可求得p=p1*p2

代码:

function p=mult4(p1,p2) %四元数乘法

a1=p1(1);

b1=p1(2);

c1=p1(3);

d1=p1(4);

A=[a1,-b1,-c1,-d1;

    b1,a1,-d1,c1;

    c1,d1,a1,-b1;

    d1,-c1,b1,a1];

p=A*p2;

实验结果:

例如,令p1=1+1*i+1*j+1*k p2=2+2*i+2*j+2*k,则p1=[1;1;1;1] p2=[2;2;2;2]

运行代码得:

 

习题 2. p1= 2+1*i+3*j+4*k p2=0+1*i+1*j-1*k,利用习题1中编写的程序计算 p=p1*p2, 并且利用 Bj Bi Bk 画图解释四元数乘积与旋转之间的关系。

分析:由题可知:p1=[2;1;3;4] p2=[0;1;1;-1],利用上题的代码可以得到p=p1*p2结果。

由上一题的p=A*p2知,p2经过旋转矩阵A旋转到pBA的子矩阵。

代码:

function p=mult4(p1,p2) %四元数乘法
a1=p1(1);
b1=p1(2);
c1=p1(3);
d1=p1(4);
A=[a1,-b1,-c1,-d1;
    b1,a1,-d1,c1;
    c1,d1,a1,-b1;
    d1,-c1,b1,a1];
p=A*p2;
x=[0,p1(2)];
y=[0,p1(3)];
z=[0,p1(4)];
plot3(x,y,z,'b--')
text(x(2)/2,y(2)/2,z(2)/2,' leftarrow (p1)');
grid on
hold on
x1=[0,p(2)];
y1=[0,p(3)];
z1=[0,p(4)];
plot3(x1,y1,z1,'b--')
text(x1(2)/2,y1(2)/2,z1(2)/2,' leftarrow (p12)');
grid on
hold on
x2=[0,p2(2)];
y2=[0,p2(3)];
z2=[0,p2(4)];
plot3(x2,y2,z2,'b--')
text(x2(2)/2,y2(2)/2,z2(2)/2,' leftarrow (p2)');
x3=[-5,5];
y3=[0,0];
z3=[0,0];
plot3(x3,y3,z3,'r-')
x4=[0,0];
y4=[-5,5];
z4=[0,0];
plot3(x4,y4,z4,'r-')
x5=[0,0];
y5=[0,0];
z5=[-5,5];
plot3(x5,y5,z5,'r-')

 

%%

%Bj

x3=[-5,5];

y3=[0,0];

z3=[0,0];

plot3(x3,y3,z3,'r-')

text(x3(2),y3(2),z3(2),'i');

hold on

x4=[0,0];

y4=[-5,5];

z4=[0,0];

plot3(x4,y4,z4,'r-')

text(x4(2),y4(2),z4(2),'j');

x5=[0,0];

y5=[0,0];

z5=[-5,5];

plot3(x5,y5,z5,'r-')

text(x5(2),y5(2),z5(2),'k');

x1=[1,1];

y1=[0,0];

z1=[-1,0];

plot3(x1,y1,z1,'k--')

text(x1(2),y1(2),z1(2),'1');

x2=[0,1];

y2=[0,0];

z2=[-1,-1];

plot3(x2,y2,z2,'k--')

text(x2(1),y2(1),z2(1),'-1');

x6=[0,1];

y6=[0,0];

z6=[0,-1];

plot3(x6,y6,z6,'b-')

text(x6(2),y6(2),z6(2),'(p2)i,k');

 

x1=[-2,-2];

y1=[0,0];

z1=[-4,0];

plot3(x1,y1,z1,'k--')

text(x1(2),y1(2),z1(2),'-2');

x2=[0,-2];

y2=[0,0];

z2=[-4,-4];

plot3(x2,y2,z2,'k--')

text(x2(1),y2(1),z2(1),'-4');

x6=[0,-2];

y6=[0,0];

z6=[0,-4];

plot3(x6,y6,z6,'b-')

text(x6(2),y6(2),z6(2),'(pj)');

h =0; % 高度

r = sqrt(2);  %半径

pos = [0,0]; % 圆心位置

t=0:0.001:(2*pi);  % 圆滑性设置

t=[t,0];

plot3(pos(1)+r*sin(t), h*ones(size(t)),pos(2)+r*cos(t))

%%

%Bk

x3=[-5,5];

y3=[0,0];

z3=[0,0];

plot3(x3,y3,z3,'r-')

text(x3(2),y3(2),z3(2),'i');

hold on

x4=[0,0];

y4=[-5,5];

z4=[0,0];

plot3(x4,y4,z4,'r-')

text(x4(2),y4(2),z4(2),'j');

x5=[0,0];

y5=[0,0];

z5=[-5,5];

plot3(x5,y5,z5,'r-')

text(x5(2),y5(2),z5(2),'k');

x1=[1,1];

y1=[1,0];

z1=[0,0];

plot3(x1,y1,z1,'k--')

text(x1(2),y1(2),z1(2),'1');

x2=[0,1];

y2=[1,1];

z2=[0,0];

plot3(x2,y2,z2,'k--')

text(x2(1),y2(1),z2(1),'1');

x6=[0,1];

y6=[0,1];

z6=[0,0];

plot3(x6,y6,z6,'b-')

text(x6(2),y6(2),z6(2),'(p2)i,j');

x1=[-3,-3];

y1=[-5,0];

z1=[0,0];

plot3(x1,y1,z1,'k--')

text(x1(2),y1(2),z1(2),'-3');

x2=[0,-3];

y2=[-5,-5];

z2=[0,0];

plot3(x2,y2,z2,'k--')

text(x2(1),y2(1),z2(1),'-5');

x6=[0,-3];

y6=[0,-5];

z6=[0,0];

plot3(x6,y6,z6,'b-')

text(x6(2),y6(2),z6(2),'(pk)');

h =0; % 高度

r = sqrt(2);  %半径

pos = [0,0]; % 圆心位置

t=0:0.001:(2*pi);  % 圆滑性设置

t=[t,0];

plot3(pos(1)+r*sin(t),pos(2)+r*cos(t), h*ones(size(t)))

%%

%Bi

x3=[-5,5];

y3=[0,0];

z3=[0,0];

plot3(x3,y3,z3,'r-')

text(x3(2),y3(2),z3(2),'i');

hold on

x4=[0,0];

y4=[-5,5];

z4=[0,0];

plot3(x4,y4,z4,'r-')

text(x4(2),y4(2),z4(2),'j');

x5=[0,0];

y5=[0,0];

z5=[-5,5];

plot3(x5,y5,z5,'r-')

text(x5(2),y5(2),z5(2),'k');

x1=[0,0];

y1=[1,1];

z1=[-1,0];

plot3(x1,y1,z1,'k--')

text(x1(2),y1(2),z1(2),'1');

x2=[0,0];

y2=[1,0];

z2=[-1,-1];

plot3(x2,y2,z2,'k--')

text(x2(2),y2(2),z2(2),'-1');

x6=[0,0];

y6=[0,1];

z6=[0,-1];

plot3(x6,y6,z6,'b-')

text(x6(2),y6(2),z6(2),'(p2)j,k');

x6=[0,0];

y6=[0,2];

z6=[0,0];

plot3(x6,y6,z6,'k--')

text(x6(2),y6(2),z6(2),'2');

x6=[0,0];

y6=[0,2];

z6=[0,0];

plot3(x6,y6,z6,'b-')

text(x6(2),y6(2),z6(2),'(pk)');

h =0; % 高度

r = sqrt(2);  %半径

pos = [0,0]; % 圆心位置

t=0:0.001:(2*pi);  % 圆滑性设置

t=[t,0];

plot3(h*ones(size(t)),pos(2)+r*cos(t),pos(1)+r*sin(t))

实验结果:

p=p1*p2结果:

 


旋转投影的计算方式为:

然后, 矩阵 Bj 将旋转投影移动到矢量 (-2,0,-4)(图中“(pj)”)

如图所示:

旋转投影的计算方式为:

然后,矩阵 Bk 将旋转投影移动到矢量 (-3,5,0), 方法是将旋转乘以

因子。

如图所示:

旋转投影的计算方式为:

然后,矩阵 Bi 将旋转投影移动到矢量 (0,2,0), 方法是将旋转乘以因子。

如图所示:

 

矩阵B的分解表明, 矢量可以通过三个基本旋转的线性组合得到矢量围绕笛卡尔系统的三个轴的投影。

 







上一篇:没有了    下一篇:没有了

Copyright ©2020    计算数学达人 All Right Reserved.

技术支持:自助建站 | 领地网站建设 |短信接口 |燕窝 版权所有 © 2005-2020 lingw.net.粤ICP备16125321号 -5