【轉】Unity四元數和向量相乘作用及其運算規則


作用:四元數和向量相乘表示這個向量按照這個四元數進行旋轉之后得到的新的向量。

比如:向量vector3(0,0,10),繞着Y軸旋轉90度,得到新的向量是vector3(10,0,0)。

在unity中表示為:

 

 

運行結果為:

 

 

復合旋轉就是四元數依次相乘,最后乘以向量

多來幾例:

 

 

 

 

 

想了解其中的運算過程的可以往下看。

 

將四元數的四個值分別計為:(w,x,y,z),unity中的四元數中的四個數字是(x,y,z,w),不影響下面的計算過程。

繞任意軸旋轉任意角度的四元數為:

 

 

那么繞着Y軸旋轉90度的四元數就是q = (√2/2 , 0 , √2/2 , 0);

 

(unity中這個Quaternion.Euler(0,90,0)打debug的話是(0,√2/2 , 0 , √2/2 ),因為排列順序是(x,y,z,w),不影響下面的計算過程)

 

四元數乘以向量的運算規則為:q * v = (q) *( v) *( q−1);

其中:

q = (√2/2 , 0 , √2/2 , 0);

v,將v向量擴充為四元數(0,v),也就是v = (0 , 0,0 , 10);

q−1是四元數q的逆,求逆過程如下:

共軛四元數:q*=(w,-x,-y,-z),也就是(√2/2 , 0 , -√2/2 , 0)
四元數的模:N(q) = √(x^2 + y^2 + z^2 +w^2),即四元數到原點的距離,計算結果為1
四元數的逆:q−1=q*/N(q),也就是q−1 = (√2/2 , 0 , -√2/2 , 0)
q * v = q * v * q−1 = (√2/2 , 0 , √2/2 , 0) * (0 , 0,0 , 10)*(√2/2 , 0 , -√2/2 , 0);

四元數乘法公式:

 

 

按照上述計算公式: q * v = q * v * q−1

 (√2/2 , 0 , √2/2 , 0) * (0 , 0,0 , 10) = (0,5√2,0,5√2)

(0,5√2,0,5√2) * (√2/2 , 0 , -√2/2 , 0)=(0,10,0,0);

 

將最后得到的四元數(0,10,0,0)變為向量(0,newV),就是newV(10,0,0)。

 

 

 


---------------------
作者:capricorn1245
來源:CSDN
原文:https://blog.csdn.net/capricorn1245/article/details/82724830
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

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



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