问题描述
此处为了简化问题,在2维空间中处理,按以下方式调用,AcGeMatrix2d::alignCoordSys是如何求出一个矩阵的呢,这里提供一个实现思路(但效率不保证好)
AcGeMatrix2d matTrans = AcGeMatrix2d::alignCoordSys(
AcGePoint2d(150, 125),
-AcGeVector2d::kYAxis,
AcGeVector2d::kXAxis,
AcGePoint2d(1000, 1000),
AcGeVector2d::kXAxis,
AcGeVector2d::kYAxis);
求解过程
AcGeMatrix2d::alignCoordSys函数的功能,即如何求出矩阵:
a11 a12 a13
a21 a22 a23
0 0 1
已知变量如下:
fromOriginX,fromOriginY =(150,125)
fromAxisXx, fromAxisXy = (0,-1)
fromAxisYx, fromAxisYy = (1,0)
toOriginX,toOriginY =(1000,1000)
toAxisXx, toAxisXy =(1,0)
toAxisYx, toAxisYy =(0,1)
根据对齐映射关系,得到如下等式
a11*fromOriginX + a12*fromOriginY + a13 = toOriginX
a21*fromOriginX + a22*fromOriginY + a23 = toOriginY
a11*fromAxisXx + a12*fromAxisXy + a13 = toAxisXx
a21*fromAxisXx + a22*fromAxisXy + a23 = toAxisXy
a11*fromAxisYx + a12*fromAxisYy + a13 = toAxisYx
a21*fromAxisYx + a22*fromAxisYy + a23 = toAxisYy
所以得到如下线性方程组
a11*150 + a12*125 + a13 = 1000
a21*150 + a22*125 + a23 = 1000
a11*0 + a12*-1 + a13 = 1
a21*0 + a22*-1 + a23 = 0
a11*1 + a12*0 + a13 = 0
a21*1 + a22*0 + a23 = 1
使用消元法求解即可(即用矩阵的初等变换将系数矩阵化为阶梯型矩阵)