Hyun2and
Euler vs Quaternion 본문
728x90
1. Euler
1) 정의
- 물체가 놓인 방향을 3차원 공간에서 표현하기 위한 방법
- (x,y,z) 축에서의 회전 각도로 정의한다
- 각도는 일반적으로 오른손 법칙 에 따라 정의됩니다 . 즉, 축의 양의 방향에서 볼 때 시계 방향으로 나타나는 회전을 나타낼 때 양수 값을 가지며 회전이 반시계 방향으로 나타날 때 음수 값을 갖습니다.
2) 특징
- 오일러 각도는 회전한 축을 기준으로 다음 회전을 한다
3) 장점
- 3차원 상의 물체의 방향(orientation)을 3개의 파라미터만으로 간결하게 표현할 수 있다
- 대략적인 방향에 대한 직관적인 정보를 준다
4) 단점
단점 1 : Gimbal Lock
- 같은 방향으로 두 회전 축이 겹치는 경우 해당 2개의 축이 더이상 분리되지 않는 고정 상태를 말한다
- 세 개의 축을 동시에 계산하지 않고 각 축을 독립적으로 판단하기때문에 발생한다
- 3개의 자유도 중 1개의 자유도를 잃어버리게 되므로 다양한 방향 표현이 불가능하고 정확한 각도 표현이 불가능하다
단점 2 : Interpolation
- 3축에 대해 회전이 종속적이므로 2개의 오일러 각도 사이를 보간할 때에도 문제가 생긴다
2. Quaternion
1) 정의
- 사원수로, 복소수를 확장한 일종의 4차원 벡터
- 4개의 성분(x, y, z, w)으로 표현한다. (3차원 벡터 (x,y,z) 와 스칼라 w)
2) 특징
- 각 축을 한꺼번에 계산한다 → 짐벌락 문제가 발생하지 않는다.
- 방향(orientation)과 회전(rotation) 둘을 다 표현할 수 있다
3) 장점
3D에서 회전을 행렬 대신 단위 쿼터니언으로 표현하면 다음과 같은 몇 가지 이점이 있습니다.
- 회전을 연결하면 계산이 더 빠르고 수치적으로 더 안정적이다
- 각도와 회전축을 추출하는 것이 더 간단하다
- 보간은 더 간단함 (Slerp 사용)
- 쿼터니언은 오일러 각도처럼 짐벌락이 발생하지 않는다
4) 단점
- 쿼터니언 하나로 180도 보다 큰 회전을 나타낼 수 없고 직관적이지 못하다.
Unity 함수로 살펴보기
Quaternion.Euler
/**
* brief : Euler 각 (x,y,z) 를 Quaternion 으로 반환한다
* param : Euler, return Quaternion
**/
public static Quaternion Euler(float x, float y, float z);
Quaternion rotation = Quaternion.Euler(0, 30, 0);
Quaternion.Slerp
public static Quaternion Slerp(Quaternion a, Quaternion b, float t);
transform.rotation = Quaternion.Slerp(from.rotation, to.rotation, timeCount);
- 회전 from으로부터 회전 to 까지 자연스러운 구형 회전 보간을 만들어준다. t의 범위는 0~1 사이로, 보간에서의 tessellation을 의미한다.
- t 값이 작을수록 보간 간격이 넓어진다
- 유사 함수
- SlerpUnclamped : a부터 b까지의 회전 보간값을 반환하는데, 기존의 0~1 사이를 벗어난 값도 구할 수 있다?
- public static Quaternion SlerpUnclamped(Quaternion a, Quaternion b, float t);
참고
https://hub1234.tistory.com/21
https://www.sciencedirect.com/topics/engineering/euler-angle
https://en.wikipedia.org/wiki/Euler_angles
https://edward0im.github.io/engineering/2019/11/12/euler-angle/
728x90
'공부엔 끝이없다 > 이것저것' 카테고리의 다른 글
11. Animation (0) | 2023.03.20 |
---|---|
10. Tactical AI (0) | 2023.03.20 |
9. AI Part 2 (0) | 2023.03.20 |
Comments