网站大量收购闲置独家精品文档,联系QQ:2885784924

空间三维点绕任意空间直线旋转.pdf

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
空间三维点绕任意空间直线旋转 绕任意轴旋转的情况⽐较复杂,主要分为两种情况,⼀种是平⾏ 坐标轴的,⼀种是不平⾏ 坐标轴的,对 平⾏ 坐标轴的,我们⾸先将 旋转轴平移⾄与坐标轴重合,然后进⾏旋转,最后再平移回去。 将旋转轴平移⾄与坐标轴重合,对应平移操作 旋转,对应操作 步骤1的逆过程,对应操作 整个过程就是 对 不平⾏ 坐标轴的,可按如下⽅法处理。 (该⽅法实际上涵盖了上⾯的情况) 1. 将旋转轴平移⾄原点 2. 将旋转轴旋转⾄YOZ平⾯ 3. 将旋转轴旋转⾄ Z轴重合 4. 绕Z轴旋转θ度 5. 执⾏步骤3的逆过程 6. 执⾏步骤2的逆过程 7. 执⾏步骤1的逆过程 假设⽤v 1(a1, b2, c2)和v2(a2, b2, c2)来表⽰旋转轴,θ表⽰旋转⾓度。为了⽅便推导,暂时使⽤右⼿系并使⽤列向量,待得出矩阵后转置⼀ 下即可,上⾯步骤对应的流程图如下。 步骤1是⼀个平移操作,将v 1v2平移⾄原点,对应的矩阵为 步骤2是⼀个旋转操作,将p(p = v2 -v 1)旋转⾄XOZ平⾯,步骤3也是⼀个旋转操作,将p旋转⾄与Z轴重合,这两个操作对应的图如下。 做点p在平⾯YOZ上的投影点q。再过q做Z轴垂线,则r是p绕X轴旋转所得,且旋转⾓度为α,且 , 是旋转矩阵为 现在将r绕Y轴旋转⾄与Z轴重合,旋转的⾓度为-beta (⽅向为顺时针),且 , 是得到旋转矩阵为 最后是绕Z轴旋转,对应的矩阵如下 如果旋转轴是过原点的,那么第⼀步和最后⼀步的平移操作可以省略,也就是把中间五个矩阵连乘起来,再转置⼀下,得到下⾯的绕任意轴 旋转的矩阵 即 对应的函数代码如下。 void Rotate rbitrary xis(D3DXM TRIX* pOut, D3DXVECTOR3* axis, float theta) { D3DXVec3Normalize(axis, axis); float u = axis-x ; float v = axis-y ; float w = axis-z; pOut-m[0][0] = cosf(theta) + (u * u) * (1 - cosf(theta)); pOut-m[0][1] = u * v * (1 - cosf(theta)) + w * sinf(theta); pOut-m[0][2] = u * w * (1 - cosf(theta)) - v * sinf(theta); pOut-m[0][3] = 0 ; pOut-m[1][0] = u * v * (1 - cosf(theta)) - w * sinf(theta); pOut-m[1][1] = cosf(theta) + v * v * (1 - cosf(theta)); pOut-m[1][2] = w * v * (1 - cosf(theta)) + u * sinf(theta); pOut-m[1][3] = 0 ; pOut-m[2][0] = u * w * (1 - cosf(theta)) + v * sinf(theta); pOut-m[2][1] = v * w * (1 - cosf(theta)) - u * sinf(theta); pOut-m[2][2] = cosf(theta) + w * w * (1 - cosf(theta)); pOut-m[2][3] = 0 ; pOut-m[3][0] = 0 ; pOut-m[3][1] = 0 ; pOut-m[3][2] = 0 ; pOut-m[3][3] = 1; 如果旋转轴是不过

文档评论(0)

189****4123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档