求旋转矩阵已知三维坐标系原点O,向量OA OB,A(X1,Y1,Z1)B(X2,Y2,Z2)其中OB 为 OA旋转所得,求有OA变换到OB的旋转矩阵.最终效果:另有一空间向量OP,通过OA到OB相同的变换得到OP'
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/26 11:19:14
求旋转矩阵已知三维坐标系原点O,向量OA OB,A(X1,Y1,Z1)B(X2,Y2,Z2)其中OB 为 OA旋转所得,求有OA变换到OB的旋转矩阵.最终效果:另有一空间向量OP,通过OA到OB相同的变换得到OP'
求旋转矩阵
已知三维坐标系原点O,向量OA OB,A(X1,Y1,Z1)B(X2,Y2,Z2)
其中OB 为 OA旋转所得,求有OA变换到OB的旋转矩阵.
最终效果:另有一空间向量OP,通过OA到OB相同的变换得到OP'
求旋转矩阵已知三维坐标系原点O,向量OA OB,A(X1,Y1,Z1)B(X2,Y2,Z2)其中OB 为 OA旋转所得,求有OA变换到OB的旋转矩阵.最终效果:另有一空间向量OP,通过OA到OB相同的变换得到OP'
我来回答,//作者:baihacker
//时间:1.3.2007
呵,以前写的,比较容易懂
#include<stdio.h>
#define N 10
void main()
{
int n;
int i,j,k,t;
int a[N][N];
puts("input n:");
scanf("%d",&n);
if (n<1 || n>9)
{
puts("error");
return;
}
t = 1;
for (i=1;i<=(n-1)/2+1;i++)
{
j=i-1;
for (k=j;k<n-j;k++)
a[j][k] = t++;
for (k=j+1;k<n-j;k++)
a[k][n-j-1] = t++;
for (k=n-j-2;k>=j;k--)
a[n-j-1][k] = t++;
for (k=n-j-2;k>j;k--)
a[k][j] = t++;
}
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
printf("%d\t",a[i][j]);
puts("\n");
}
}
设旋转过程可以分解为,
(1)以Z轴为中心旋转角度为a,所用的旋转矩阵为
cosa,sina,0
-sina,cosa,0
0,0,1
(2)以Y轴为中心,旋转角度为b,所用的旋转矩阵为
cosb,0,sinb
0,1,0
-sinb,0,cosb
(3)以X轴为中心,旋转角度为c,所用的旋转矩阵为
cosc,0,si...
全部展开
设旋转过程可以分解为,
(1)以Z轴为中心旋转角度为a,所用的旋转矩阵为
cosa,sina,0
-sina,cosa,0
0,0,1
(2)以Y轴为中心,旋转角度为b,所用的旋转矩阵为
cosb,0,sinb
0,1,0
-sinb,0,cosb
(3)以X轴为中心,旋转角度为c,所用的旋转矩阵为
cosc,0,sinc
0,1,0
-sinc,0,cosc
所有的旋转复合起来,就是上述三个矩阵的乘积,记为X
则有
X(x1,y1,z1)'=(x2,y2,z2)'
这样列出三个方程,可解得三个未知数.
进而得出旋转矩阵
收起