Euler vs Quaternion

혀니앤·2022년 11월 3일
0

컴퓨터 지식 공부

목록 보기
10/10

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/

https://hillier.tistory.com/15

profile
일단 시작하기

0개의 댓글