2014-11-11 4 views
0

쿼터니언에 대한 나의 무지를 용서해주십시오. 3D 그래픽의 컨텍스트에서 q0에서 qn까지 일련의 쿼터니언에 의해 포인트 p2로 변환되는 포인트 p1이 있다고 가정합니다. 모든 쿼터니언이 p1에서 p2로 바뀌는 것을 안다면 p1로 되돌아 가기 위해 반전을 할 수 있습니까?^역이 하나의 변환을 QNQuaternions Series

int main(void) 
{ 
    vmath::vec4 p1(4.0f, 3.0f, 2.0f, 1.0f); 
    print_vec4(p1); 

    vmath::quaternion q1(1.0f, 0.0f, 0.0f, M_PI); 
    vmath::vec4 p2 = p1 * q1.asMatrix(); 
    print_vec4(p2); 

    vmath::quaternion q2(q1); 
    q2 = q2.conjugate(); 
    p2 = p2 * q2.asMatrix(); 
    print_vec4(p2); 

    return 0; 
} 
+1

지금 추측하고 있지만 다른 작업을하기 전에 q1을 처음 정상화하면 어떻게됩니까? 또는'q2 = q2.conjugate();'를'q2 = q2.conjugate()/(q2.length() * q2.length());로 대체하십시오. 수정 : 실수를 수정, 그것은 q2.length() 제곱해야합니다. – bialpio

+0

여기 http://math.stackexchange.com/에 게시해야합니다. 아마도 쿼터니언에 익숙해지기 위해 스크립팅 언어를 사용하고 C++로 코딩하기 전에 약간의 연습을해야합니다. (더 지루한 작업을 수행하는 방식입니다. 지금) 쿼터니언은 말하기 위해 4 가지 요소로 구성되어 있다는 것을 기억하십시오 : 1 개의 스칼라와 3 개의 허수; 그것은 당신이하고있는 것에도 가깝지 않습니다. 이것을 위해 C++을 사용하기 전에 수학 서적을 선택하십시오. – user2485710

+0

biapio에 감사드립니다! 노멀라이징은 트릭을 완료 한 것 같습니다. 더 조사 할 것입니다 ... – kbrown

답변

0

T = Q1 * Q2 * ... T입니다 :

나는이 바보 같은 뭔가를 시도했지만 내가 후에 무엇 나를 포기하지 않았다 -1 = qn^-1 .. * q2^-1 * q1^1; "^ 1"은 "inverse"를 의미하며, 단위 길이 쿼터니온의 경우 역 연산을 위해 "vector"(x, y, z) 구성 요소의 부호를 반대로 바꿀 수 있습니다.

그리고 적어도

p2 = T * p1; 및 p1 = T^-1 * p2

+0

이것을 명확히 해 주셔서 감사합니다. 감사! – kbrown