Post Lists

2018년 9월 24일 월요일

Quaternions and Rotations(쿼터니언과 회전)

http://graphics.stanford.edu/courses/cs348a-17-winter/Papers/quaternion.pdf

Quaternions and Rotations

1 Introduction
쿼터니언의 개발은 1843년에 W. R. Hamilton의 공으로 돌려진다. Hamilton이 Royal Irish에서 그의 아내 Helen과 함께 걷고 있을 때 전설이 일어났다. 그 때, 그가 갑자기 세 개의 것을 곱하기 위해 4 번째 차원을 더하는 아이디어를 떠올렸었다. 이 해결책에 흥분한 그는, 그 부부가 Royal Canal의 Broome Bridge를 지날 때, 그는 새롭게 발견된 쿼터니언 방정식을 다리의 돌에 새겨넣었다



이 사건은 오늘날 정확한 위치에 명판에 의해 표시되어 있다. Hamilton은 그의 삶의 나머지를 쿼터니언을 작업하는데 보냈고, 그것은 연구되는 첫 번째 비-교환법칙 대수가 되었다.

이제까지 우리는 원점을 통한 한 축에 대해 R^3에서의 한 회전이 행렬식이 1인 3x3 orthogonal matrix로 표현되어질 수 있다고 알았었다. 그러나, 그 행렬 표기는 반복되는 것처럼 보인다. 왜냐하면 그것의 9개 요소 중에 오직 4개만이 independent하기 때문이다. 또한 그러한 한 행렬의 기하학적 해석은 우리가 회전축과 각을 추출하기 위해 몇 가지 계산 단계를 수행할 때 까지 명백하지 않다. 게다가, 두 회전을 구성하기 위해, 우리는 두 개의 대응되는 행렬의 곱을 연산할 필요가 있고, 그것은 27개의 곱과 18개의 합을 요구한다.

쿼터니언은 R^3에서의 회전이 연관된 상황을 분석하는데 매우 효율적이다.쿼터니언은 4-tuple이고, 회전 행렬보다 더 간결한 표기법이다. 그것의 기하학적 의미는 또한 회전 축과 각이 자명하게 찾아지기 때문에 더 명백하다. 그 소개될 쿼터니언 대수는 우리가 쉽게 회전을 구성하도록 허용할 것이다. 이것은 왜냐하면 쿼터니언 구성이 단순히 16개의 곱과 12개의 합을 필요하기 때문이다.

2 Quaternion Algebra
덧셈과 곱셈이라는 두 개의 연산과 함께 쿼터니언의 집합은 non-commutative ring을 형성한다. (이 코스의 목적을 위해서, 너는 정말 링이 무엇인지 알 필요가 없다. 비록 그것이 Hungeford or Jacobson에 의한 책과 같은 기본 대수 교과서에서 발견될 수 있을지라도) R^3에 대한 standard orthonormal basis는 세 개의 단위 벡터들 i = (1, 0, 0), j = (0, 1, 0), k = (0, 0, 1)에 의해 주어진다. 한 quaternion q는 스칼라 q_0과 q = (q_1, q_2, q_3)의 합으로 정의된다; 이름 그대로,



2.1 Addition and Multiplication
두 쿼터니언의 곱은 컴포넌트 별로 작동한다. 좀 더 특정하게, 위의 쿼터니언 q와 다른 쿼터니언을 고려해보자

 p = p_0 + p_1i + p_2j + p_3k

그러고나서 우리는 다음을 갖는다

p + q = (p_0 + q_0) + (p_1 + q_1)i + (p_2 + q_2)j + (p_3 + q_3)k

모든 쿼터니언 q는 컴포넌트들 i = 0,1,2,3의 -q_i인 음의 -q를 갖는다.

두 쿼터니언의 곱은 Hamilton에 의해 소개된이러한 기본적인 규칙을 만족한다:






이제 우리는 두 쿼터니언 p와 q의 곱을 줄 수 있다.

휴! 무엇이 발생하는지 기억하기도 또는 심지어 이해하기에도 너무 길다. 운좋게도, 우리는 위의 쿼터니언 곱을 좀 더 간결한 형태로 쓰기위해 R^3에서의 두 벡터의 내적과 외적을 활용할 수 있다:

(1)

위에서, p = (p1, p2, p3), q = (q1, q2, q3)는 p와 q의 벡터 부분이다 개별적으로.

....

우리는 두 쿼터니언의 곱이 여전히 scalar part p0q0 - pq와 벡터파트 p0q + q0p + p X q가 있는 한 쿼터니언이라는 것을 안다. 쿼터니언의 집합은 곱셈과 덧셈에 대해 닫혀있다. 쿼터니언의 곱이 덧셈에 대해 분배가능하다는 것을 입증하는 것은 어렵지 않다. identity quaternion (항등 쿼터니언)은 실수부가 1이고, 벡터부가 0이다.

2.2 Complex Conjugate, Norm, and Inverse
q가 = q0 + q = q0 + q1i + q2j + q3k 한 쿼터니언이라고 해보자. q의 complex conjugate는 q*로 표시되고, 다음으로 정의된다.



정의로 부터 우리는 즉시 다음을 갖는다





두 쿼터니언 p와 q가주어진다면, 우리는 다음을 쉽게 증명할 수 있다.

 (2)

한 쿼터니언 q의 norm은 |q|로 표기되고, 스칼라 |q| = root(q*q)이다. 한 쿼터니언은 그것의 norm이 1 이면 단위 쿼터니언으로 불려진다. 두 쿼터니언 p와 q의 곱의 norm은 개별 norms의 곱이다. 왜냐하면 우리는 다음을 갖기 때문이다.



한 쿼터니언 q의 inverse는 다음으로 정의된다




우리는 q^-1q = qq^-1 = 1이라는 것을 쉽게 증명할 수 있다. q가 단위 쿼터니언인 경우에 그 inverse는 그것의 conjugate q*이다.

3 Quaternion Rotation Operator
R^4에 있는 한 쿼터니언이 R^3에 있는 한 벡터에 어떻게 작용할 수 있는가? 첫 째로, 한
벡터 v in R^3가 실수부가 0인 pure quaternion이라는 것을 주목한다. 단위 쿼터니언 q = q_0 + q만을 고려해보자. q_0^2 + ||q||^2 = 1라는 것은 몇 가지 각도 θ가 존재하는 것을 암시하는데, 다음의 조건이 될 수 있다.




사실, cosθ = q_0이고, sinθ = ||q||가 되도록 하는 유일한 θ in [0, 𝞹]가 존재한다. 그 단위 쿼터니언은 이제 각도 θ와 단위 벡터 u = q/||q||의 관점이서 다시 쓰일 수 있다:



단위 쿼터니언 q를 사용하여, 우리는 v in R^3에 대해 한 연산자를 정의한다:

 (3)

여기에서, 우리는 두 가지 관찰을 한다. 첫 째로, 쿼터니언 연산자 (3)은 한 벡터 v의 길이를 바꾸지 않는다.



둘 째로, v의 방향은 q를 따라서, 연산자 L_q에 의해 변화되지 않고 남아 있는다. 이것을 입증하기 위해, 우리는 v = kq라고 하고 다음을 갖는다




두 가지 관찰은 우리가 연산자 L_q가 q에 대한 회전처럼 행동한다는 것을 추측하게 한다. 이것은 다음의 정리에 의해 정확하게 된다.

그 정리를 나아가기 전에, 우리는 연산자 L_q가 R^3에 대해 linear하다는 것을 주목한다. 어떤 두 개의 벡터 v_1, v_2 in R^3에 대해, 우리는 다음을 본다



Theorem 1 어떤 단위 쿼터니언

 (4)

그리고 R^3에 있는 어떤 벡터 v에 대해, v에 연산자



적용시키는 것은 회전축으로서의 u에 대해 각 θ만큼 벡터를 회전시키는 것과 같다.

Proof v in R^3가 주어진다면, 우리는 그것을 v = a + n으로 분해한다. 거기에서, a는 벡터 q와 평행한 컴포넌트이고, nq에 수직인 component이다. 그러고나서, 우리는 L_q 연산자 하에서, a가 invaraint이지만, nq에 대해 각 θ만큼 회전한다는 것을 보여준다. 그 연산자가 linear하기 때문에, 이것은 qvq*의 image가 정말로 q에 대해 각도 θ만큼의 v의 회전으로 회전된다는 것을 보여준다.

우리는 초기의 추론으로부터, a는 L_q에서 invariant이다 라는 것을 안다. 그래서, 우리가 orthogonal component n에 대한 L_q의 효과에 대해 집중해보자. 우리는 다음을 갖는다



여기에서 위의 마지막 단계에서, 우리는 u = q / ||q||를 도입했었다. n⟂ = u X n이라고 표기하자. 그래서 마지막 방정식은

(5)

n⟂와 n이 같은 길이라는 것에 주목해라:



마침내, 우리는 (5)를 다음의 형태로 쓴다



이름 그대로, 최종 벡터는 n과 n⟂에 정의되는 면에서 각 θ만큼의 회전이다. 아래의 그림을 보아라. 이 벡터는 명백히 회전 축에 orthogonal 한다.

우리는 단위 쿼터니언 형태 (4)를 (3) 대체해서 넣는다. 이것은 축 u에 대해 각 θ만큼의 회전으로부터 최종 벡터를 얻기 위해서 이다.


 (6)

Example 2. (1, 1, 1)에 의해 정의된 한 축에 대해 각 2𝞹/3 만큼의 회전을 고려해보자. 이 축에 대해, basis vector i, j, k는 2𝞹만큼 회전될 때 같은 원뿔을 생성한다. 우리는 한 단위벡터

u = 1/root(3) (1, 1, 1)

을 정의한다. 회전각 θ = 2𝞹/3이라고 하자. 그 쿼터니언 q는 그 회전이 그러고나서 다음으로서 주어진다



우리가 기저 벡터 i= (1,0,0)에서 회전의 효과를 계산해보자. 우리는 (6)을 사용하여 최종 벡터를 얻는다

v = j


operator L_q 하에서 v의 회전은 또한 벡터 v에 부착된 한 observer의 관점으로부터 해석될 수 있다. 그가 보기에 발생하는 것은, coordinate frame이 angle -θ 만큼 쿼터니언에 의해 정의된 같은 축에 대해 회전한다는 것이다.

Theorem 2 어떤 단위 쿼터니언

댓글 없음:

댓글 쓰기