根据旋转前后的向量值求旋转矩阵_第1页
根据旋转前后的向量值求旋转矩阵_第2页
根据旋转前后的向量值求旋转矩阵_第3页
根据旋转前后的向量值求旋转矩阵_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、根据旋转前后的向量值求旋转矩阵如果已知旋转前后的一向量的变化,那么该如何求这个旋转矩阵呢?本篇结合Rodrigues' rotation formula ,介绍一下该旋转矩阵的求法。1 .旋转角度已知旋转前向量为P,旋转后变为Q。由点积定义可知:P,Q - |P| |Q|。6g可推出p, q之间的夹角为:IQ"2 .旋转轴由1中可知,旋转角所在的平面为有P和Q所构成的平面,那么旋转轴必垂直该平面。假定旋转前向量为a(a1, a2, a3),旋转后向量为b (b1, b2, b3)。由叉乘定义得:. Ia x b +值也k+ 的%( -j) 4-1瓦(-k)十 叱%。+由+ 的

2、瓦j + 潜必-i)十为九修 sb)i + (aj&)- aih)j + (。山上-的瓦)k*3 .罗德里格旋转公式(Rodrigues' rotation formula)3.1 公式已知单位向量3 =,将它旋转。角。由罗德里格旋转公式,可知对应的旋转矩阵%电:R>=/声 I + 由sin。+而'(1 -8$ fl + w; (1 -co« fl) 口二3.1 - coe 例-w士号in a4in 9 +3, 口 - wk 例3; sin & + g 3, (1 cos 即 cos + o? (I - os 一城上 sin 日 + s, u:(

3、】-c« 町 -3、sin 0 tiz(1 - cos fl) 3、sini? + 5 (1 - cos S)cos 5 + u? (1 - cos &)其中I是3x3的单位矩阵,由是叉乘中的反对称矩阵 r:0 -吗啊娟明 03.2 公式证明假设在坐标系(x, y, z)中,向量v=ax+by+cz , v绕z轴逆时针旋转。角后得到新的向量 v',根据2维(x,y)面上的旋转公式可得:= cos fl x + sill 0 y i三一 sin 0*4 coos & y *推出:- - cos3 弟t - W - sin0 6x) - e .已知:v I v -

4、 z z = v = t(x + iy .zxv=c(Zxx) + e xy)+七xz) = ay f 将上式带入的公式:V-8M(V工口十也将cz替换掉,可得:v' = v - sin8 z X V 十(cos 1 1 v 1 v - z1 z)将上式中的叉乘表示为反对称矩阵得:另外:I(v (v = 一"X byz x (fly - hx =z x (z x (jx 4- 6y + czl)=A2 v,最终可以推出:yj Jy - sinSr*Jv * (1 - cosfl) V上式即为罗德里格旋转公式。4.求旋转矩阵根据旋转前后的两个向量值,使用上面的方法,先求出旋转角

5、度和旋转轴,然后用罗德里格旋转公式即可 求出对应的旋转矩阵。C#的实现代码如下:7void Calculation( double vectorBefore, double 口 vectorAfter)double rotationAxis;double rotationAngle;double , rotationMatrix;rotationAxis = CrossProduct(vectorBefore, vectorAfter);rotationAngle = Math.Acos(DotProduct(vectorBefore, vectorAfter) / Normalize(vec

6、torBefore) / Normalize(vectorAfter);rotationMatrix = RotationMatrix(rotationAngle, rotationAxis);double CrossProduct( double a, double b)double c =c0= a1* bc1= a2* bc2= a0* breturn c;new double3;2 -a2*b10 -a0*b21 -a1*b0double DotProduct( double a, double b)double result;result = a 0 * b 0 + a 1 * b

7、1 + a 2 * b 2; return result;double Normalize( double v)double result;result = Math.Sqrt(v 0 * v 0 + v 1 * v 1 + v return result;double , RotationMatrix( double angle, double u)2 * v2);double norm = Normalize(u);double , rotatinMatrix =new double 3, 3;u0= u0 /norm;u1= u1 /norm;u2= u2 /norm;rotatinMa

8、trix rotatinMatrix rotatinMatrix rotatinMatrix rotatinMatrix rotatinMatrix rotatinMatrix rotatinMatrix rotatinMatrix0, 0 = Math.Cos(angle) + u0, 0 = u 0 * u 1 * (0, 0 = u 1 * Math.Sin(angle) + u0, 0 = u 2 * Math.Sin(angle) + u0, 0 = Math.Cos(angle) + u 1 * u0, 0 = -u0 * Math.Sin(angle) + u0, 0 = -u1 * Math.Sin(angle) + u0, 0 = u 0 * Math.Sin(angle) + u0, 0 = Math.Cos(angle) + u 2 * u0 * u 0 * ( 1 - Math.Cos(angle);1 - Math.Cos(angle) - u 2 * Math.Sin(angle);0 * u2 * ( 1 - Math.Cos(angle);0 * u1 * ( 1 - Math.Cos(angle);1 * ( 1 - Math.Cos(angle)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论