Game Development, 게임개발/게임 수학,물리

선형변환, Linear Transformation - 회전변환, 로드리게스 회전 공식 [게임수학]

게임이 더 좋아 2021. 3. 18. 03:42
반응형
728x170

이전 글에 이어서

이번엔 임의의 축을 기준으로 회전 변환하는 것을 알아보기로 했다.

 

축이 x,y,z가 아니고 임의로 축을 잡을 땐 어떻게 할까...?

역시 이러한 회전변환도 벡터 공간을 벗어나지 않을 것임을 직관적으로 안다.

하지만 어떻게는 감이 잘 안온다.

 


 

그래서 그림을 봐야겠다.

 

 

임의의 벡터 a가 기준이다.

임의의 벡터 va 만큼회전시키려고 한다.

++위에건 소문자 에이(벡터), 아래건 알파(각)

 

Ra는 회전 변환이다.

 

그림을 감이 잘 안 온다...

 

하지만 여기서 벡터 v를 벡터 a에 투영시킨 벡터v(proj)와 

그 v(proj)에서 v로부터v로부터 빼서 나오는 v(perp)가 있다.

???

설명 드럽다고 생각할 수 있다.

쉽게 말하자면 아니 그림을 보면

 

빨간색이 v(proj)

파란색이 v(perp)

우리가 z축에 대해 사실 회전변환한 것도 저런 식으로 진행됐어야 했다.

++하지만 z축은 이미 직교하고 있기 때문에 투영(정사영)한다고 해서 달라지는 것이 없었던 것 뿐이다.

 

왜 이렇게 나누었느냐???

**항상 그래왔듯이 차원을 줄이는 방향이 계산이 쉽다. 

 

v(proj)은 축과 방향이 같아버려서 회전을 해도 아무런 영향을 받지 않는다.

즉, v(prop)만 영향을 받는다.

 

식으로 생각하면?? 변환할 때 v(proj)는 하나 마나란 이야기다.

그래서 위와 같이 표현이 가능하다.

하나만 구하면 되는거네???

++ 계산이 더 쉬워졌겠구나 생각하자.

 

그래도 v(perp)를 변환해야 한다... 어렵구나

 

그래서 다른 벡터를 이용하기로 하였다.

w라는 벡터를 끌고 온다

** w 벡터는 아래와 같은 식에서 얻어졌다.

 

외적의 결과는 v와 수직이면서 v(perp)랑도 수직이다.

++ 당연히 그 평면 상에 있는 모든벡터와 수직이다.

 

이렇게 w와 v(perp)가 수직이니 이를 두 축으로 좌표계를 만들 수 있다.

또한 그 좌표계에서 변환할 수도 있는 것이다.

 

약간 상상이 안가나..? 계산을 편하게 하기 위해서 새로운 좌표계를 설정한 것이다.

 

그렇게  각 축에 이 아래 벡터만 투영하면 된다.

 

이전에 z축 회전도 x,y좌표계에서 보았듯이 이것도 마찬가지다.

 

두 축에 대해 투영해보았다.

 

삼각함수를 이용해보았다.

 

r1은 또한 v(perp)와 방향이 같아서 표현도 바꿀 수 있다.

 

r2 또한 비슷하게 적용할 수 있다.

 

 

팁을 주자면 그림을 보고 이 식을 만들 수 있는가를 생각하면 이해가 된다.

 

결국 우리가 구하고자하는 

R(v(perp))는 어떻게 표현되느냐??

 

 

?? 뭐야 그러면 우리가 어떻게 계산해?

v(perp), w모르는데???

 

그래서 바꿔줘야한다.

 

 

이를 로드리게스 회전 공식, Rodrigues' rotation formula라고 한다는데... 알아주면 저 분이 좋아해주겠지?

한 번쯤은 보고가자.

 

이렇게 우리가 아는 벡터 v,a로 풀어줬으면 우리는 계산이 가능하다.

 

3차원 공간의 i,j,k에 차례로 적용 후 열벡터들로 확장 행렬을 만들면 변환행렬이 만들어진다.

 

 

 

 

다음은 행렬 곱의 변환에 대해서 알아보자

 

 

728x90
반응형
그리드형