• Quaternion简记


    q=(x,y,z,w)=(u,w)
    u是虚部向量,w是实部,当然,也可以标记为(a+bi+cj+dk),这时a是实部,b,c,d是虚部向量
    以下是在quaternion上的相等加减乘除的定义
    (u,a)=(v,b) 紧当u=v a=b时成立
    (u,a)±(v,b)=(u±v,a±b)
    (u,a)(v,b)=(av+bu+u×v,ab-u·v)

    乘法略显怪异,但之后你会发现这样定义的乘法是很有用的
    令p=(u,p4)=(p1,p2,p3,p4) q=(v,q4)=(q1,q2,q3,q4),乘法展开,其中
    u×v = (p2q3-p3q2,p3q1-p1q3,p1q2-p2q1)
    u·v = p1q1+p2q2+p3q3

    r=pq

    r1=p4q1 + q4p1 + p2q3 - p3q2 = q1p4 - q2p3 + q3p2 + q4p1
    r2=p4q2 + q4p2 + p3q1 - p1q3 = q1p3 + q2p4 - q3p1 + q4p2
    r3=p4q3 + q4p3 + p1q2 - p2q1 =-q1p2 + q2p1 + q3p4 + q4p3
    r4=p4q4 - p1q1 - p2q2 - p3q3 =-q1p1 - q2p2 - q3p3 + q4p4
    于是乘法就可以写成矩阵形式(column major,pre multiply)
    [ p4 -p3  p2  p1][q1]
    [ p3  p4 -p1  p2][q2]
    [-p2  p1  p4  p3][q3]
    [-p1 -p2 -p3 p4][q4]

    乘法的特殊性质

    i=(1,0,0,0),j=(0,1,0,0),k=(0,0,1,0)

    ii = jj = kk = ijk = -1
    ij = k = -ji
    jk = i = -kj
    ki = j = -ik
    这些性质可用乘法矩阵形式轻松验证

    identity quaternion
    e=(0,0,0,1),可用乘法矩阵验证pe=ep

    分配率
    p(q+r)=pq+pr (q+r)p=qp+rp

    实部为零quaternion称为pure quaternion

    scalar mulitplication
    s(p1,p2,p3,p4)=(0,0,0,s)(p1,p2,p3,p4)=(sp1,sp2,sp3,sp4)=(p1,p2,p3,p4)s

    conjugate and norm(共轭,模)
    conjugate is denoted by q*
    q* = -q1-q2-q3+q4 = (-u,q4)
    性质
    (pq)* = q*p*
    (p+q)* = p* + q*
    (q*)* = q
    (sq*) = sq* s是real number
    q+q* = (u,q4) + (-u,q4) = (0,2q4)
    qq* = q*q = q1q1 + q2q2 + q3q3 + q4q4 = (‖u‖)^2 + q4q4

    norm (模,长度)
    ‖q‖ = square root(qq*)
    当‖q‖ = 1时,称q为unit quaternion
    norm有一下性质
    ‖q*‖ = ‖q‖
    (‖pq‖)^2 = (‖p‖)^2(‖q‖)^2)
    所以,unit quaternion相乘结果也是unit quaternion;‖p‖ = 1时 ‖pq‖ = ‖q‖

    inverse(逆)quaternion
    由于quaternion的乘法不可交换,所以不能定义除法运算
    inverse is denoted by q^-1= q* / (‖q‖)^2
    如果q是unite quaternion,可得q^-1 = q*,即conjugate就是inverse,inverse就是conjugate
    inverse特性
    (q^-1)^-1 = q
    pq^-1 = q^-1p^-1

    polar(极坐标)形式
    q=(q1,q2,q3,q4)=(u,q4)如果是unit quaternion
    可得
    (‖q‖)^2=(‖u‖)^2 + (q4)^2 = 1
    同样根据三角函数关系
    (sin(θ))^2 + (cos(θ))^2 = 1
    得到
    θ∈[0,π]
    sin(θ) = ‖u‖
    cos(θ) = q4
    假设n是u的同向unit vector,得到
    n = u/‖u‖ = u/sin(θ)
    所以
    u = sin(θ)n
    所以
    q = (sin(θ)n,cos(θ))
    观察可得,只需要取-θ,就可得到q的conjugate q*

    旋转
    假设如下
    q=(u,w)是unit quaternion
    v是3d vector,v可以想象为pure quaternion p=(v,0)
    考虑以下
    qpq^-1 = qpq* (因为unit quaternion q^-1=q*)
    =(u,w)(v,0)(-u,w)
    =(u,w)(wv-v×u,v·u)
    为简化书写,令
    a=w
    b=v·u
    m=u
    n=wv-v×u
    得到
    =(m,a)(n,b)
    =(an+bm+m×n,ab-m·n)
    观察real part实部
    ab-m·n
    = w(v·u)-u·(wv-v×u)
    = w(v·u)-u·wv+u·(v×u)
    = w(v·u)-w(v·u)+0
    = 0
    u·(v×u) = 0是因为v×u得到的肯定会与u正交,正交dot就等于0
    观察vector part虚部
    an+bm+m×n
    = w(wv-v×u)+(v·u)u+u×(wv-v×u)
    = wwv-wv×u+(v·u)u+u×wv+u×(u×v)
    = wwv+u×wv+(v·u)u+u×wv+u×(u×v)
    = wwv+2(u×wv)+(v·u)u+u×(u×v)
    = wwv+2(u×wv)+(v·u)u+(u·v)u-(u·u)v
    = (ww-u·u)v+2w(u×v)+2(u·v)u
    = (ww-u·u)v+2(u·v)u+2w(u×v)
    所以
    qpq* = ((ww-u·u)v+2(u·v)u+2w(u×v),0)
    观察可知,qpq*的结果是一个vector,pure quaternion
    由于q是unit quaternion,把q写成极坐标形式
    q=(sin(θ)n,cos(θ)) ‖n‖=1 θ∈[0,π]
    代入可得
    qpq* = ((cos(θ))^2-(sin(θ))^2)v+2(sin(θ)n·v)sin(θ)n+2cos(θ)(sin(θ)n×v)
    = ((cos(θ))^2-(sin(θ))^2)v+2(sin(θ))^2(n·v)n+2cos(θ)sin(θ)(n×v)
    通过倍角公式
    (cos(θ))^2-(sin(θ))^2 = cos(2θ)
    2cos(θ)sin(θ) = sin(2θ)
    cos(2θ) = 1-2sin^2(θ)
    所以
    qpq* = cos(2θ)v+(1-cos(2θ))(n·v)n+sin(2θ)(n×v)
    所以,qpq^-1就是v绕n旋转2θ的结果,即Rq(v) = qvq^-1
    可以这样应用,假如你要绕n转θ,那么q=(sin(θ/2)n,cos(θ/2))

    写成矩阵形式,或旋转矩阵转换成quaternion
    都是一些简单推导,略

    多个旋转quaternion的复合
    unit quaternion前提
    Rq(Rp(v))=(qp)v(qp)^-1

    至此,可知quaternion可表示一个旋转,使用quaternion可以解决euler angles的gimbal lock问题
    gimbal lock的产生和quaternion的解决可参考
    http://en.wikipedia.org/wiki/Gimbal_lock#Gimbal_lock_in_applied_mathematics

  • 相关阅读:
    sharepoint 2013 configure my site
    格式化xml
    斗罗大陆
    spring的beans.xml的配置
    jdom学习:读取xml文件
    java中加载xml文件方法
    struts2中IOC控制反转应用
    struts2.xml的配置与技巧
    struts2中的路径问题
    struts.xml详细配置
  • 原文地址:https://www.cnblogs.com/rickerliang/p/2803915.html
Copyright © 2020-2023  润新知