2014-11-16 6 views
2

두 개의 쿼터니언을 곱하는 Unity documentation에 따르면 쿼터니언의 회전에 오프셋을 추가하려고 시도하는 것이 순차적으로 두 회전을 수행하는 것과 같습니다.쿼터니온을 오프셋으로 회전 하시겠습니까?

오프셋 사원 수 (0, 0, 0, 0) 그것에 의해 최초의 사원 수를 곱하여 어떤 영향을 안 경우 :

이것은 내가 지금 노력하고있어 있습니다. 그러나 내 테스트에서 Quaternion을 (0, 0, 0, 0)으로 곱하면 (0, 0, 0, 0)이되므로 올바르게 작동하지 않습니다. 여기

Quaternion q = new Quaternion (-0.7f, 0f, 0f, -0.7f); 
    Quaternion rotationZero = new Quaternion (0f, 0f, 0f, 0f); // offset 

    Quaternion result = q * rotationZero; 

    print (result); // (0.0, 0.0, 0.0, 0.0) 
+0

사실, (1,0,0,0)을 곱하면 효과가 없습니다. 회전을 나타내는 모든 쿼터니언은 1의 크기 (제곱의 합 = 1)를 가져야합니다. 당신의'q' 값도 약간 떨어져 있습니다 (약 0.99 정도입니다). – greggo

답변

2

문제가되지는 C 번호 또는 유니티, 당신은 원인을 출력 값을 사용하는 값은 (0.0, 0.0, 0.0, 0.0)이 될 수 있습니다. 그것은 아래와 같이 수학적으로 설명 될 수 있습니다.

사원 수는

q = q0 + iq1 + jq2 + kq3r = r0 + ir1 + jr2 + kr3

쿼터니언 제품의 형태를 가질

t= q×r = t0 + it1 + jt2 + kt3의 형태를 갖는다

t0 = (r0q0−r1q1−r2q2−r3q3) t1 = (r0q1+r1q0−r2q3+r3q2) t2 = (r0q2+r1q3+r2q0−r3q1) t3 = (r0q3−r1q2+r2q1+r3q0)