1.基础知识
1.1矩阵乘法
行*列
C=[A1*b11+a2*b21+a3*b31,a1*b12+a2*b22+a3*b32,a1*b13+a2*b23+a3*b33]
例:
1*4+2*7+3*1=21, 1*5+2*8+3*1=24,1*6+2*9+3*5=39
结果为[21, 24, 39]
1.2求逆矩阵
按定义计算逆矩阵。
例:
用MatLab求解
>> A=[4 5 6;7 8 9;1 1 5];
>> B=inv(A)
B =
-2.5833 1.5833 0.2500
2.1667 -1.1667 -0.5000
0.0833 -0.0833 0.2500
>> A*B
ans =
1.0000 -0.0000 0
-0.0000 1.0000 0
-0.0000 -0.0000 1.0000
>> B*A
ans =
1.0000 -0.0000 -0.0000
0 1.0000 -0.0000
0 0 1.0000
2.世界坐标系与用户坐标的相互转换
设世界坐标系为WCoord,用户坐标系为UCoord,设世界坐标系到用户坐标系的变换矩阵为T1,则UCoord内的点Ptu在WCoord中的坐标Ptw=Pt*T1。WCoord内的点Ptw在UCoord中的坐标为Ptu=Pt*T1^-1。
设坐标系各轴向量为VX=(x1, x2, x3), VY=(y1, y2, y3), VZ=(z1, z2, z3),坐标原点为P(p1, p2, p3),用向量表达坐标系
注意:VX,VY,VZ都为单位向量
例:用户坐标系为
VX=(0.7071067811, 0.7071067811,0)
VY=(-0.7071067811, 0.7071067811,0)
VZ=(0 ,0 ,1);
P=(1000, 1000, 1000)
用户坐标系下点P1=(500, 500, 500)
求在世界坐标系下P1的坐标点Pw
解:即相当于先在世界坐标系中画出P1点,然后经平移旋转的变换到用户坐标系。
使用Matlab 求解
//用户坐标系的矩阵表示C
>> A=[0.7071067811 0.7071067811 0 0;-0.7071067811 0.7071067811 0 0;0 0 1 0;0 0 0 1];
>> B=[1 0 0 0;0 1 0 0;0 0 1 0; 1000 1000 1000 1];
>> C=A*B
C =
1.0e+003 *
0.0007 0.0007 0 0
-0.0007 0.0007 0 0
0 0 0.0010 0
1.0000 1.0000 1.0000 0.0010
//注意:点为齐次坐标点,
>> pt=[0 0 0 1];
>> pt1=pt*C
pt1 =
1000 1000 1000 1
>> pt=[500 500 500 1];
>> pt1=pt*C
pt1 =
1.0e+003 *
1.0000 1.7071 1.5000 0.0010
>>
即Pw=(1000,1707.1,1500);
例:世界坐标系中的点转换到用户坐标系
用户坐标系同上。
世界坐标系下,pt=(-100, 200, -300)
求用户坐标系下pt的坐标Pu
解:
使用Matlab求解
>> A=[0.7071067811 0.7071067811 0 0;-0.7071067811 0.7071067811 0 0;0 0 1 0;0 0 0 1];
>> B=[1 0 0 0;0 1 0 0;0 0 1 0; 1000 1000 1000 1];
>> C=A*B;
>> D=inv(C)
D =
1.0e+003 *
0.0007 -0.0007 0.0000 0
0.0007 0.0007 0.0000 0
0 0 0.0010 0
-1.4142 0 -1.0000 0.0010
>> pt=[-100 200 -300 1];
>> pt1=pt*D
pt1 =
1.0e+003 *
-1.3435 0.2121 -1.3000 0.0010
>>
得
Pu (-1343.5029, 212.1320, -1300.00)