1. 程式人生 > >【轉】Unity四元數和向量相乘作用及其運算規則

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

https tor img 復合 順序 unity debug csdn 了解

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

比如:向量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
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

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