2015-04-17 62 views
1

我正在使用apache數學庫。我想應用一個旋轉(對於一個向量),它與我手邊的旋轉成比例。像如何應用一部分旋轉

Rotation rotation2 = number * rotation1; 
return rotation2.applyTo(vector); 

其中number爲旋轉角度的乘數,和數量== 1將導致rotation2等於rotation1,和數量== 0將導致到無旋轉(旋轉角== 0)

我該怎麼做?

+1

你應該從'Rotation'中得到一個四元數,然後執行一個球面線性插值(SLERP)。然後把四元數放回'Rotation'。我對apache數學庫不熟悉,但幾乎所有的數學引擎都使用四元數進行旋轉。 – rashmatash

+0

交叉參考:如果您不僅對旋轉感興趣,而且對一般的仿射變換感興趣,那麼[本文](http://math.stackexchange.com/a/614807/35416)可能會對您感興趣。 – MvG

回答

2

像rashmatash建議在他的評論,你應該

  1. 通過getQ3提取使用getQ0Rotation的四元組成。
  2. 使用getAngle獲取旋轉角度。
  3. 執行SLERP計算。
  4. 將結果轉回Rotation

像這樣(未測試):getAngle()

double angle = rotation1.getAngle(); 
double sinAngle = Math.sin(angle); 
double factor = Math.sin(number * angle)/sinAngle; 
double factor2 = Math.sin((1 - number) * angle)/sinAngle; 
double q0 = factor * rotation1.getQ0() + factor2; 
double q1 = factor * rotation1.getQ1(); 
double q2 = factor * rotation1.getQ2(); 
double q3 = factor * rotation1.getQ3(); 
Rotation rotation2 = new Rotation(q0, q1, q2, q3, false); 
2

你可以getAxis()和用於旋轉,然後生成具有相同的軸和修飾的角度另一個轉動。這比使用四元數更容易。