Wednesday, October 7, 2015

平移不是线性的, 不能表示为与 2×2矩阵相乘的 形式。例如要从 点(2, 1)开始, 将其旋转 90度, 在x方向将其平 移3个单位,在y 方向将其平移4 个单位。可通过 先使用矩阵乘法 再使用矩阵加法 来完成此操作

 平移不是线性的, 不能表示为与 2×2矩阵相乘的 形式。例如要从 点(2, 1)开始, 将其旋转 90度, 在x方向将其平 移3个单位,在y 方向将其平移4 个单位。可通过 先使用矩阵乘法 再使用矩阵加法 来完成此操作




這是 Google 對 http://wenku.baidu.com/view/5975501e680203d8cf2f242c.html 的快取。 這是該網頁於 2015年9月22日 15:13:04 GMT 顯示時的快照。
在此期間,目前網頁可能已經變更。 瞭解更多資訊
完整版純文字版檢視原始碼提示:如要在這個網頁上快速尋找您所搜尋的字詞,請按下 Ctrl+F 鍵或 ⌘-F 鍵 (Mac),然後使用尋找列進行搜尋。
2011秋矢量旋转变换_图文_百度文库

2011秋矢量旋转变换_工学_高等教育_教育专区

暂无评价|0人阅读|0次下载|举报文档
2011秋矢量旋转变换_工学_高等教育_教育专区。描述刚体位置变换 的方法 向量的旋转变换 西南交通大学 基础的2-D绕原点旋转 在2-D的迪卡尔坐标系中,一个位置向量的旋转公式可以 由三角函数的几何意义推出。比如上图所示是位置向 量R逆时针

描述刚体位置变换 的方法 向量的旋转变换 西南交通大学 基础的2-D绕原点旋转 在2-D的迪卡尔坐标系中,一个位置向量的旋转公式可以 由三角函数的几何意义推出。比如上图所示是位置向 量R逆时针旋转角度B前后的情况。在左图中,我们有 关系: ? x0=|R|*cosA ? y0=|R|*sinA ? ? ? => cosA=x0/|R| sinA=y0/|R| 下图中,x1=|R|*cos(A+B) y1=|R|*sin(A+B) 其中(x1,y1)就是(x0,y0)旋转角B后得到的 点,也就是位置向量R最后指向的点。 ? ? ? ? ? ? ? ? ? ? ? x1=|R|*cos(A+B) y1=|R|*sin(A+B) 我们展开cos(A+B)和sin(A+B),得到 x1=|R|*(cosAcosB-sinAsinB) y1=|R|*(sinAcosB+cosAsinB) 现在把 cosA = x0/|R| sinA = y0/|R| 代入上面的式子,得到 x1 = |R|*(x0*cosB/|R|-y0*sinB/|R|) y1 = |R|*(y0*cosB/|R|+x0*sinB/|R|) => x1 = x0 * cosB - y0 * sinB y1 = x0 * sinB + y0 * cosB 现在我要把这个旋转公式写成矩阵的形式即:2-D旋转变换 矩阵: ?cosB ? sinB? ?sinB cosB ? ? ? ?cosB sinB? ?? sinB cos ? B? ? ?cosB ? sinB? ?sinB cosB ? ? ? ?R ?— 平面旋转矩阵 ?1i ?vx ? ?cos ? ?v ? ? ? ? y ? ? sin ? ? sin ? ? ?v1x ? ?v ? ? cos ? ? ? 1 y ? Pi Bi ? R?1i ? P 1 B1 OBi ? OPi ? R?1i ? OB1 ? OP1 ? ? y ? ?? ? 0 Bi Pi B1 P1 θ 1 θi ∴ OB ? R OB ? OP ? R OP i ?1i 1 i ?1i 1 ? ? ? ? x ? x Bi ? ?cos ?1i ? y ? ? ? sin? 1i ? Bi ? ? ? sin?1i ? ? x B1 ? ? x Pi ? ?cos ?1i ?? ??? ? ? ? cos ?1i ? ? y B1 ? ? y Pi ? ? sin?1i ? sin?1i ? ? x P 1 ? ?y ? cos ?1i ? ? ? P1 ? ? x Bi ? ? x B1 cos ?1i ? y B1 sin?1i ? x Pi ? x P 1 cos ?1i ? y P 1 sin?1i ? ? y ? ? ? x sin? ? y cos ? ? y ? x sin? ? y cos ? ? 1i B1 1i Pi P1 1i P1 1i ? ? Bi ? ? B1 ?补充部分 平移部分 ? 平移不是线性的, 不能表示为与 2×2矩阵相乘的 形式。例如要从 点(2, 1)开始, 将其旋转 90度, 在x方向将其平 移3个单位,在y 方向将其平移4 个单位。可通过 先使用矩阵乘法 再使用矩阵加法 来完成此操作。 ? 后面跟一平移(与 1×2 矩阵相加)的线性变换 (与 2×2 矩阵相乘)称为仿射变换。放射变换 (先乘后加)可以通过乘以一个3*3的矩阵来实现, 若要使其起作用,平面上的点必须存储于具有虚拟 第三坐标的 1×3 矩阵中。通常的方法是使所有的 第三坐标等于 1。例如,矩阵 [2 1 1] 代表点 (2, 1)。例如与单个 3×3 矩阵相乘的仿射变换(旋转 90 度;在 x 方向上平移 3 个单位,在 y 方向上 平移 4 个单位): ? 在前面的示例中,点(2,1)映射到了点(2, 6)。其中 3×3 矩阵的第三列包含数字0,0,1。对于仿射变 换的3×3 矩阵都是这样的。重要的数字是列 1 和 列 2 中的 6 个数字。矩阵左上角的 2×2 部分表 示变换的线性部分,第 3 行中的前两项表示平移。 ? 在使用3*3的矩阵做仿射变换时候,表示点的矩阵变 成了一个1*3矩阵,这个矩阵中的最后一个值必须设 置成1。对于3*3矩阵,其最后一列的值是多少是没 有关系的,因为他们不会影响结果中的前两列。不 过如上,经常将他们设置为0,0,1。这一列对于坐 标转换的结果并没有任何影响,但是他们是必须的, 因为矩阵相乘必须满足 “相乘的两个矩阵第一个矩 阵的列数必须与第二个矩阵的行数相同”。 ? ? 平面或空间里的每个线性变换(这里就是旋转变换) 都对应一个矩阵,叫做变换矩阵。对一个点实施线 性变换就是通过乘上该线性变换的矩阵完成的。 把顶点和矩阵相乘,就会发现矩阵的某些项,扮演 着为顶点变换(平移、旋转、缩放)提供参数的作 用。(前人总结出来,填哪些那些项能得到平移矩 阵/缩放矩阵/旋转矩阵) 比如平移矩阵,你自己拿一个顶点和它相乘,算一 遍,就会发现它化简到最后一步时的算式,和顶点 平移算式是一样的。旋转、缩放也是如此。 ? 那么为什么还要和矩阵相乘?直接用平移算式、旋转算式、 缩放算式不就行了? ? ? 不行 因为靠矩阵来计算可以减少计算量。 一个顶点要进行多次变换,比如平移后旋转再平移之后再缩 放,用简单算式得算4遍,矩阵只要算一遍。 原理就是公式:(顶点×矩阵A)×矩阵B = 顶点×(矩阵 A×矩阵B),即矩阵接合律的推广。(矩阵一般不遵守分配 律,所以顶点变换有先后顺序,一个顶点平移再旋转,和旋 转再平移,得到的位置不同)即:很容易地进行组合变换以及逆 变换。 ? ? 机器人中可能很多关节都进行同一套变换。用简单算式,n 个变换对m个顶点,就得算n×m遍。把n个变换做成矩阵,用 矩阵乘法接合到一起,那最后m个顶点,每个只要同矩阵做 一次乘运算,就可以得到变换后的位置。计算量大大降低

文档贡献者

贡献于2015-09-22


No comments:

Post a Comment