이전 글에 이어서
이번엔 임의의 축을 기준으로 회전 변환하는 것을 알아보기로 했다.
축이 x,y,z가 아니고 임의로 축을 잡을 땐 어떻게 할까...?
역시 이러한 회전변환도 벡터 공간을 벗어나지 않을 것임을 직관적으로 안다.
하지만 어떻게는 감이 잘 안온다.
그래서 그림을 봐야겠다.
임의의 벡터 a가 기준이다.
임의의 벡터 v를 a 만큼회전시키려고 한다.
++위에건 소문자 에이(벡터), 아래건 알파(각)
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에 차례로 적용 후 열벡터들로 확장 행렬을 만들면 변환행렬이 만들어진다.
다음은 행렬 곱의 변환에 대해서 알아보자
'Game Development, 게임개발 > 게임 수학,물리' 카테고리의 다른 글
쿼터니언(사원수), Quaternions (4) | 2021.03.31 |
---|---|
Linear Transformation, 선형변환들의 조합, 행렬곱 [게임수학] (0) | 2021.03.18 |
선형 변환- 크기변환(Scaling), 회전변환(Rotation) [게임수학] (0) | 2021.03.18 |
선형변환, Linear Transformation [게임수학] (0) | 2021.03.17 |
행렬, Matrix - 3 행렬과 벡터 관계 [게임수학] (0) | 2021.03.17 |