左乘

齐次变换可以是相对于共同的参考坐标系的变换,也可以相对于变换过程中不同的当前坐标系来实现变换。不同的变换矩阵相乘的顺序(左乘与右乘),可以得到不 同(相反)的结果。由于OpenGL使用的是左乘(向量左乘变换矩阵),这里用左乘来举例。

    对于变换矩阵R = Rz * Ry * Rx

1) 相对于参考坐标系O(固定)的变换

    V’ = R * V = Rz * Ry * Rx  * V,对于左乘变换矩阵(从右向左进行),其变换为V向量对于参考坐标系(固定)先绕x轴旋转,再绕y轴旋转,最后绕z轴旋转,得到的新向量V’,在整个变换过程中均是相对于同一坐标系O的x,y,z轴进行的,得到的V’也是同一参考坐标系O中的矢量。

2) 相对于当前坐标系的变换

则每个平移、旋转变换始终相对于当前坐标系(坐标系随着平移、旋转)。变换顺序为从左往右(即右乘矩阵)。对于V’ = R * V = Rz * Ry * Rx * V,相当于最初的参考坐标系O,绕z轴旋转(变成O1),再绕y轴旋转(变成O2),最后绕x轴旋转(变成O3)。得到的V’是O3坐标轴中的V在原始坐 标轴O下的矢量。


所以对于同一的变化矩阵R,可以理解为两种不同的变换方法。
OpenGL对模型进行旋转、平移和缩放。用到三个子函数:

glTranslate*(x, y, z) 、 glRotate*(x, y, z) 、 glScale*(x, y, z) 。

每个函数都会产生一个矩阵,并右乘当前矩阵。

对与变换:

glRotatef(45.0, 0.0, 0.0, 1.0);
glTranslatef(3.0, 0.0, 0.0);

这 两个变换,可以看成:

glMultMatrixf(R);
glMultMatrixf(T);

R,T 都是右乘到CTM(当前变换矩阵):CTM = CTM * R * T

对模型变换的理解有两种:

1) 在固定坐标系下,对物体进行变换。这时候,要以相反的顺序来考虑代码中的变换函数了,它的实际过程是这样 P = CTM *( R*(T* P’))。

首先,对物体进行平移,平移到坐标(3.0, 0.0, 0.0)。

然后,把物体相对原点绕z轴旋转45度。

2) 物体捆绑在局部坐标系下,所有的变换都是在当前坐标系进行的。这时,变换可以看成:

glRotatef(45.0, 0.0, 0.0, 1.0) 产生一个齐次矩阵 R(代表一个局部坐标系),即局部坐标系R 相对刚才开始的坐标系I(单位矩阵)作了旋转变换,绕z轴旋转了45度。
glTranslatef(3.0, 0.0, 0.0) 产生一个齐次矩阵 T (也是代表了一个局部坐标系),相对 R 坐标系沿x轴(R系)平移了3个单位,得到了自己的局部坐标系T,最后在T下进行绘制。

<think>好的,我现在要回答用户关于正交矩阵左乘的性质和实现的问题。首先,我需要回顾一下正交矩阵的定义和相关性质,确保自己理解正确。根据用户提供的引用,正交矩阵满足$A A^T = A^T A = E$,也就是它的转置等于它的逆矩阵,即$A^{-1} = A^T$。这一点是关键,接下来所有性质都可能基于此展开。 接下来,用户问的是左乘的性质。左乘正交矩阵通常指的是用正交矩阵乘以一个向量或者其他矩阵,这种情况下会有哪些特性呢?首先想到的是,正交矩阵对应的线性变换是保持向量长度和内积不变的,也就是保距变换。例如,旋转矩阵和反射矩阵都是正交矩阵,它们的左乘操作不会改变向量的长度,也不会改变两个向量之间的夹角。这应该是一个重要的性质,需要详细说明。 然后,正交矩阵的行列式是±1,这可能影响到左乘后的空间变换是旋转还是反射。例如,行列式为1的是旋转,为-1的是反射。这一点也应该提到,但要注意是否需要结合左乘的具体情况。 关于实现,用户可能想知道如何在编程中实现正交矩阵的左乘操作,或者如何构造正交矩阵。比如,在Python中,可以使用NumPy库来创建正交矩阵,例如通过QR分解生成,或者直接构造已知的正交矩阵如旋转矩阵。需要给出具体的代码示例,确保代码正确并符合规范。同时,需要说明左乘的实现方式,即矩阵乘法的顺序,比如矩阵A左乘向量x,就是A.dot(x)或者使用@运符。 还要考虑正交矩阵的列向量是标准正交的,因此左乘相当于在标准正交基下的坐标变换,这可能涉及到基变换的问题。这也是一个关键点,可以结合引用来解释,比如引用[3]中提到标准正交矩阵的逆等于转置,因此坐标变换会更简便。 另外,正交矩阵在数值计中的稳定性也是一个优势,因为不会放大误差,这在实现时可能需要注意,比如在迭代法中使用正交变换可以减少误差积累。 现在需要组织这些思路,分点回答性质和实现。确保每个性质都有数学表达式的支持,比如用$||A\mathbf{x}|| = ||\mathbf{x}||$来展示保长性,用$\langle A\mathbf{x}, A\mathbf{y} \rangle = \langle \mathbf{x}, \mathbf{y} \rangle$表示保内积。同时,代码部分要正确使用LaTeX格式和代码块,符合用户提供的系统指令。 最后,生成相关问题时要围绕正交矩阵的其他性质、应用场景、构造方法等,确保问题有针对性,帮助用户进一步学习。</think>### 正交矩阵左乘的性质与实现 #### 正交矩阵的定义 正交矩阵$Q$满足: $$Q Q^T = Q^T Q = I$$ 即其转置等于逆矩阵:$Q^{-1} = Q^T$[^2][^3]。 --- #### 左乘正交矩阵的性质 1. **保长性** 正交矩阵左乘向量$\mathbf{x}$,不改变其长度: $$\| Q\mathbf{x} \| = \|\mathbf{x} \|$$ 这是因为: $$\| Q\mathbf{x} \|^2 = (Q\mathbf{x})^T Q\mathbf{x} = \mathbf{x}^T Q^T Q \mathbf{x} = \mathbf{x}^T \mathbf{x} = \|\mathbf{x}\|^2$$ 2. **保内积性** 正交矩阵左乘保持向量内积不变: $$\langle Q\mathbf{x}, Q\mathbf{y} \rangle = \langle \mathbf{x}, \mathbf{y} \rangle$$ 证明类似保长性,利用$Q^T Q = I$[^1]。 3. **行列式的绝对值为1** 正交矩阵的行列式满足$|\det(Q)| = 1$,因此左乘操作对应**旋转**($\det(Q)=1$)或**镜面反射**($\det(Q)=-1$)。 4. **保持向量空间的几何结构** 左乘正交矩阵不改变向量间的夹角和正交性,适用于几何变换(如三维图形旋转)。 --- #### 实现示例(Python) 构造正交矩阵并左乘向量: 1. **通过QR分解生成随机正交矩阵**: ```python import numpy as np # 生成随机方阵并做QR分解 A = np.random.randn(3, 3) Q, R = np.linalg.qr(A) # Q是正交矩阵 # 验证正交性 print("Q @ Q.T:\n", Q @ Q.T) # 应近似于单位矩阵 # 左乘向量 x = np.array([1, 2, 3]) y = Q @ x # 正交变换后的向量 print("变换后向量模长:", np.linalg.norm(y)) # 与原向量模长相同 ``` 2. **直接构造旋转矩阵(二维)**: ```python theta = np.pi / 4 # 旋转45度 Q_rot = np.array([[np.cos(theta), -np.sin(theta)], [np.sin(theta), np.cos(theta)]]) x = np.array([1, 0]) x_rotated = Q_rot @ x # 结果应为[√2/2, √2/2] ``` --- #### 应用场景 - **数值稳定性**:正交变换不放大误差,适合迭代法(如QR分解求特征值)。 - **信号处理**:傅里叶变换矩阵是正交矩阵,用于信号频域分析。 - **计机图形学**:旋转、反射等几何变换通过正交矩阵实现。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值