軸角、四元數轉換


軸角:

軸角表示方式:(x,y,z,thead)
從一個坐標(x,y,z)經旋轉a角度后得到(x1,y1,z1)

設兩個坐標點a(x1,y1,z1) b(x2,y2,z2)

軸角計算方法:
1、叉乘-->點乘--->反正切求角度

二維向量叉乘公式:a(x1,y1),b(x2,y2),則a×b=(x1y2-x2y1)
三維向量叉乘公式:

Snipaste_2021-08-31_16-45-46.png

點乘公式: a.b = x1x1+y2y2+z3z3

2.Math.atn2(y,x) 返回的是一個弧度 y:y2-y1 x:x2-x1

四元數:

四元數都是由實數加上三個虛數單位 i、j和k 組成,而且它們有如下的關系:
i² = j² = k² = -1, iº = jº = kº = 1
每個四元數都是 1、i、j 和 k 的線性組合,即是四元數一般可表示為a + bi+ cj + dk,其中a、b、c 、d是實數。

四元數的基本數學方程為 :

q = cos (a/2) + i(x * sin(a/2)) + j(y * sin(a/2)) + k(z * sin(a/2))
//其中a表示旋轉角度,(x,y,z)表示旋轉軸

軸角---> 四元數

四元數與軸角轉換公式:q=((x,y,x)sin(a/2),cos(a/2))

//舉例:點(0,0,23.455)繞z軸旋轉u度 u=45 即單位向量為[0,0,1] 非0即為1
//     角度寫法 :vAngle = 45/2*Matn.PI/180
//     弧度寫法 :vAngle = (這里是Math.atn2(y,x)返回的弧度)/2
                                結果如下:
    q={
        x:0*Math.sin(vAngle),  //0
        y:0*Math.sin(vAngle),  //0
        z:1*Math.sin(vAngle),  //0.3826834323650898
        w:Math.cos(vAngle)     //0.9238795325112867
    }

四元數--->軸角

  let angle = 0;
  let siny_cosp = 2 * (q.w * q.z + q.x * q.y);
  let cosy_cosp = 1 -2 * (q.y * q.y + q.z * q.z);
  let radian = Math.atan2(siny_cosp, cosy_cosp); //求出弧度
  angle = (180 / Math.PI) * radian; //轉化角度
  //結果:angle=45


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM