坐标系统:
像素坐标系统(UOV) :前端界面的控件坐标,鼠标事件中的Point,屏幕的分辨率
视图坐标系统(VCS) :图像的居中点,渲染的视图
世界坐标系统(WCS):基准坐标,可以理解为绝对坐标系
对象坐标系统(OCS):参照块(父对象)下的坐标,也可以理解为相对坐标,
用户坐标系统(UCS):CAD制图时,用户指定的坐标系
这些坐标的转化就需要通过矩阵来实现
矩阵(Matrix):
(1)矩阵的成员
(2)Transform 坐标的矩阵变换
由于加入了平移矩阵,矩阵由三维变为四维
那么已知坐标gPoint(x,y,z),可转化为A= [x y z 1],A’为A的转置矩阵,设变换矩阵为M,那么转化后的坐标为M * A‘ ,代码的实现:
调用方式 M.Transform(gPoint)
(3)矩阵的逆
对角线上的全为1,其余全为0的方阵称之为单位矩阵,任何矩阵乘以单位矩阵都为原矩阵,可以将单位矩阵理解为自然数1
设单位矩阵I,已知矩阵A,A的逆A-1,那么A * A-1 = I,求矩阵的逆代码实现:
调用方式:
1.A.Invert() 矩阵A变为矩阵A的逆
2.A.GetInvertion() 矩阵A不变,返回A的逆
通过矩阵的逆求坐标:
如果已知世界坐标系到对象坐标系的变化矩阵为WcsToOcsMatrix,
1.给定世界坐标wcsP,可以得到对象坐标ocsP = WcsToOcsMatrix.Transfrom(wcsP)
2.那么给定对象坐标ocsP,世界坐标wcsP= WcsToOcsMatrix.GetInvertion().Transfrom(ocsP)
(4)矩阵的乘法
已知坐标系CS1到坐标系CS2的变换矩阵A,坐标系CS2到坐标系CS3的变换矩阵B,那么坐标系CS1到坐标系CS3的变换矩阵C = A * B
同理如果已知UOVToVCSMatrix, VCSToWCSMatrix, WCSToOCSMatrix, OCSToUCSMatrix,那么UOVToUCS = UOVToVCSMatrix * VCSToWCSMatrix * WCSToOCSMatrix * OCSToUCSMatrix
代码实现:
调用方式 A.Multiply(B) 矩阵A变为A*B
注意矩阵的乘法不满足交换律A*B和B*A不一样,其一代表的意义不同,其二由于矩阵的阶不一致,交换后可能不能相乘,其三行列交换相乘得到的数也基本不会相同
(5)矩阵的变换
坐标系的变换矩阵分为平移变换矩阵,旋转变换矩阵,缩放变换矩阵,理论详情见(3条消息) 详解坐标变换矩阵_Akinaze的博客-CSDN博客_坐标变换矩阵
1.矩阵的平移变换:
dx,dy,dz分别为X,Y,Z方向平移的距离,new Matrix()得到的是单位矩阵
2.矩阵的旋转变换:
注意旋转角是坐标系动而点不动 : 顺时针旋转rads为 A12 = 0.0 - num2,A21 = num2,而逆时针旋转rads为A12 = num2,A21 = 0.0 - num2
绕着矢量axis旋转ratation, 矢量在表现形式上和坐标一致,可以理解为两点之差:gPoint - (0,0,0)由原点到该矢量转换成点连成的具有方向线
3.矩阵的缩放变换:
a,b,c分别为X,Y,Z方向的缩放比例
4.矩阵的综合变换
设平移矩阵T,缩放矩阵S,旋转矩阵R,坐标点P的转置矩阵A,对于P,如果按照“旋转-缩放-平移”的顺序变换坐标系后的坐标点Pm = T * S * R * A
(6)bim-solution和vdf的矩阵库调用缺陷
首先我们先看看bim-solution几何库和vdf对矩阵乘法的实现
bim-solution:
vdf:
可以看到设矩阵M1和M2,对于代码M1.Multiply(M2)或者*运算符重载M1*M2所代表的数学意义是M2*M1,而矩阵的乘法一般不满足交换律,也就是说im-solution几何库或者vdf的矩阵乘法实现和数学意义完全相反,下面给出这种情况下的矩阵计算方式:
1.多级引用块的最终矩阵计算
对于dwg图纸中的多级引用块B1,B2,B3...Bn假设其对象坐标系到相对世界坐标系(上一级引用块的坐标系)的转换矩阵为M1,M2,M3...Mn,对于Bn下的点Pn(假设Pn为坐标的转置矩阵),可知其在Bn-1下的坐标Pn-1 = Mn * Pn,
由此可知Pn所在的世界坐标P0 = M1*(M2*(M3*...*(Mn*Pn))),矩阵的乘法是满足结合律的,可知P0 = M1*M2*M3*...*Mn*Pn,可以知道Pn到P0的转换矩阵M = M1*M2*M3*...*Mn,但是由于bim-solution和vdf中的矩阵乘法库和数学上是相反的,
所以在求M的时候用M = Mn*...M3*M2*M1
2.矩阵经过缩放平移旋转后的总矩阵计算
同样对于(5)4.矩阵的综合变换公式Pm = T * S * R * A,由于矩阵乘法满足结合律相当于Pm = T * (S * (R * A))也就是先旋转后缩放再平移,顺序是不能颠倒的,比如先平移后缩放的话,平移的坐标会乘上缩放比例,导致错误,这里按照bim-solution或者vdf来调用也需要改成:
Pm = R*S*T*A
(7)扩展
1.矩阵的投影:向平面投影,如果是向坐标轴平面投影去掉一维即可
2.矩阵的镜像:镜像(也叫做反射)是一种变换,其作用是将物体沿直线(2D中)或平面(3D中)“翻折”
3.矩阵的切变:切变是图像非均匀拉伸,但是图像的面积和体积都没变