2015-03-13 34 views
2

我有在三維空間中的物體2,A & B和對象B父對象A.基於具有四元數的父項定位對象?

這兩個對象具有三維位置,以及表示它們的具體取向四元數。

我有翻譯工作正常,所以無論何時A移動,B移動。

但是,我似乎無法從父母的方向得到正確應用於其子女。

可以說A的方向代表圍繞X軸旋轉90度。通過我的代碼,對象B似乎出於某種原因旋轉180度左右。

下面是關於發生了什麼的圖片。

A is on the left, B is on the right

以下是我正在試圖產生針對任何特定頂點的向量,給孩子和家長的位置和方向:

vec4 finalVertex = rotVertexByQuat(parentOrientation, vec4(parentPos,1) + vec4(objPos,1) + rotVertexByQuat(objOrientation, vertex)); 

我轉動由四元這樣的頂點:

vec4 rotVertexByQuat(Quaternion quat, vec4 vert) 
{ 
    Quaternion p1 = Quaternion(1, vec3(vert.x,vert.y,vert.z)); 
    Quaternion p2 = multiplyQuaternion(quat,p1); 
    Quaternion p3 = multiplyQuaternion(p2, inverseQuaternion(quat)); 
    return vec4(round(p3.v.x), round(p3.v.y), round(p3.v.z),1); 
} 

我的操作順序有問題嗎?

回答

1

查看this question的回答。

我有一種感覺,你試圖實現的是四元數向量旋轉操作。 Quaternion公約有許多不同的,晦澀的組合可能毀了你的一天(見this paper)。 如果你的旋轉動作不靈嘗試:

V_inertial = q (x) V_body (x) q* 

其中(X)是四元數乘法運算符和q *是q的共軛四元。

除了你的「堆疊」四元數可以是:

q_C = q_A (x) q_B 
or 
q_C = q_B (x) q_A 

取決於所使用的約定。

相關問題