쿼터니언이란 무엇이며 어떻게 작동합니까? 또한 2D 평면에서 세 점을 사용하면 어떤 이점이 있습니까? 마지막으로 쿼터니언을 사용하는 것이 좋은 습관으로 간주되는 시점은 언제입니까?
쿼터니언이란 무엇이며 어떻게 작동합니까? 또한 2D 평면에서 세 점을 사용하면 어떤 이점이 있습니까? 마지막으로 쿼터니언을 사용하는 것이 좋은 습관으로 간주되는 시점은 언제입니까?
답변:
수학적으로 쿼터니언은 4 차원의 복소수입니다. 그러나 게임 개발에서 Quaternions는 종종 인코딩을 통해 3D 공간에서의 회전을 설명하는 데 사용됩니다.
이 정보는 쿼터니언 내부의 사인과 코사인으로 인코딩되므로 일반적으로 쿼터니언의 내부 구성 요소 (xyzw)를 개별적으로 명시 적으로 설정하거나 읽지 않아야합니다. 그런 식으로 실수를 저지르면 의미없는 결과를 얻을 수 있습니다. 쿼터니언 수학 라이브러리는 일반적으로 쿼터니언 (예 : 오일러 각도 또는 축 각도로 변환)을 수행하는 함수를 제공하여 수학이 정확하고 코드를 더 쉽게 읽고 이해할 수 있도록하는 부작용이 있습니다.
회전을 설명하는 다른 방법은 3 대신 고정 된 x, y 및 z (일명 오일러 각) 주위를 얼마나 멀리 회전시키는지를 설명하는 것입니다. 여기에는 4 대신 3 개의 숫자 만 필요하며 일반적으로 사용하기가 더 직관적입니다. 그러나 오일러 각도에는 짐벌 잠금 이라는 문제가 있습니다. 한 축을 중심으로 90 ° 회전하면 다른 두 축이 동일 해집니다. 쿼터니언에서는이 문제가 발생하지 않습니다.
3D 공간에서 회전을 표현하는 또 다른 방법은 4x4 변환 행렬을 사용하는 것 입니다. 그러나 변환 행렬을 사용하면 회전뿐만 아니라 크기 조절, 변환 및 기울이기도 할 수 있습니다. 회전 만 원할 경우 행렬은 과도하고 쿼터니언은 훨씬 빠르고 간단한 솔루션입니다.
이 문제는 3D 공간에서만 관련이 있습니다. 2D 공간에는 하나의 회전 축만 있습니다. 하나의 부동 소수점 숫자 또는 하나의 복소수로 회전을 표현할 수 있으므로이 문제가 발생하지 않습니다. 축이 평면을 향하거나 그 바깥을 향하는 쿼터니언으로 2d 평면에서 회전을 이론적으로 표현할 수 있지만 일반적으로 과잉입니다.
이것은 @Philipp의 답변에 추가하는 것입니다.
또한 2D 평면에서 세 점을 사용하면 어떤 이점이 있습니까?
당신이 관심있는 모든 회전에 있다면 당신은 정말 쿼터니언이 필요하지 않습니다 에 즉, 비행기 에 대한 z 축. 이 경우 요 각도 만 있으면되고 z 축을 중심으로 연속적인 회전이 출퇴근한다는 사실을 활용할 수 있습니다. 따라서 원하는 순서대로 회전을 적용 할 수 있습니다.
XY 평면이 아닌 평면에서 회전하는 경우 상황이 다릅니다. 이 회전은 임의의 3D 축을 중심으로 회전하는 것과 같습니다. 이제 두 가지 선택이 있습니다.
XY 평면과 일치하도록 평면을 3D로 회전 한 다음 요 (yaw)하고 다시 변환 하거나
회전은 3D로 시작한다고 생각하십시오.
두 번째 선택은 코딩하기가 더 쉽습니다. @Philipp이 말했듯이 쿼터니언은 짐벌 잠금을 피합니다 (중간 RPY 또는 축 / 각도 변환을 피하는 경우).
마지막으로 쿼터니언을 사용하는 것이 좋은 습관으로 간주되는 시점은 언제입니까?
3D 회전이있을 때마다 쿼터니언을 사용하는 것이 좋습니다.
예 :