09장. 방향, 크기, 회전
9.1 벡터 수학
9.1.1 벡터의 정의
- 위치와 운동 상태 중 하나를 가르킴.
9.1.2 절대 위치와 상대 위치
9.1.3 벡터의 크기
9.1.4 벡터의 스칼라 곱
9.1.5 방향벡터
9.1.6 벡터의 덧셈
9.1.7 벡터의 뺄셈
9.1.8 벡터의 내적
9.1.9 벡터의 외적
9.2 유니티 C# 벡터
9.2.1 Vector 타입
- Vector2, Vector3, Vector4
9.2.2 Vector3 연산
- 스칼라 곱 : 벡터와 스칼라 값을 곱함
- 벡터의 덧셈과 뺄셈
- 정규화된 벡터(방향벡터로 만들기) : {vector_name}.normalized;
- 벡터의 크기 : {vector_name}.magnitude;
- 벡터의 내적 : VectorN.Dot({vector_name0}, {vector_name1});
- 벡터의 외적 : VectorN.Cross({vector_name0}, {vector_name1});
9.2.3 Vector3 활용
- 두 지점 사이의 거리 = 차이 벡터의 크기
- 현재 위치에서 목적지로 향하는 방향 : 차이 벡터를 정규화 한 것
9.3 쿼터니언
9.3.1 짐벌락 ( *참고: 책 '방향코사인행렬, 오일러각, 그리고 쿼터니언' (공)저: 박성수 )
- 오일러각(3번에 나눠서 회전) 하면서 우선 회전하는 축이 후순으로 회전하는 축에 영향을 끼치면서 각기 다른 축이 겹치는 현상.
- 일반적인 경우 물체는 3가지 종류의 축으로 회전할 수 있는 자유가 있음(회전 모습이 3가지). 짐벌락 상태가 되면. 물체는 2가지 종류의 축 방향으로만 회전 가능(회전 모습이 2가지). lock된 상태.
- 오일러각으로 물체의 자세를 나타낼 때는 짐벌락 상태는 문제가 되지 않음. 반대로 물체의 자세로 오일러각을 나타낼 때, 짐벌락 상태가 되면 물체 자세의 오일럭 각 그래프가 불연속적으로 됨(특이점).
=> 만약 어떠한 자세로 있고, 이 자세를 90, 90, 90으로 나타낸다면, 가운데 축을 1만큼 회전시켰을 때, 90, 89, 90가 된다면, 반대로방향으로 1만큼 회전시키면 -90, 89, -90가됨. 불연속적. 애초에 90, 89, 90와 -90, 89, -90는 중간이 불연속적으로 될 수 밖에 없음.
- 짐벌락 상태가되면 무수히 많은 오일러각으로 나타낼 수 있음.
9.3.2 쿼터니언
- x,y,z,w. 사원수
- 오일러각과 달리 한 번에 회전하는 방식이므로, 짐벌락 현상이 없음.
- 유니티에서 내부 계산은 쿼터니언이지만 인스펙터 창에서는 Vector3로 표시.
- 직접적으로 쿼터니언 생성 불가. 다른 값에서 변환하여 사용.
Quaternion.Euler({vector3_name});
Quaternion rotation = Quaternion.Euler(new Vector3(0, 60, 0));
Vector3 eulerRotation = rotation.eulerAngles;
- 추가 회전. (30, 0, 0)에서 (0, 60, 0)만큼 더 추가 회전. => 근사적으로 (14.4, 63.4, 26.5)
Quaternion a = Quaternion.Euler(30, 0, 0);
Quaternion b = Quaternion.Euler(0, 60, 0);
Quaternion rotation = a*b; // 행렬곱