坐标系统与矩阵变换

坐标系统:

像素坐标系统(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.矩阵的切变:切变是图像非均匀拉伸,但是图像的面积和体积都没变

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值