오일러 각도 vs.쿼터니언 - 내부 저장소와 사용자에게 표시되는 것 사이의 긴장으로 인해 발생하는 문제입니까?

StackOverflow https://stackoverflow.com/questions/832805

문제

쿼터니언은 객체 회전을 내부적으로 표현하는 데 틀림없이 적절한 선택입니다.단일 방향을 명확하게 보간하고 표현하는 것이 간단하고 효율적입니다.

그러나 사용자 인터페이스에 쿼터니언을 표시하는 것은 일반적으로 부적절합니다. 오일러 각도는 일반적으로 사용자에게 훨씬 더 친숙하며 해당 값은 좀 더 직관적이고 예측 가능합니다.

오일러 각도는 코드 수준에서 복잡하기 때문에 회전 순서가 저장되어야 하며 이 순서와 관련 각도를 사용하여 실제 방향(행렬 또는 쿼터니언)을 구성하는 것은 아무리 말해도 번거롭습니다.

신뢰할 수 있는 보간은 쿼터니언 표현을 사용하여 가장 편리하게 수행됩니다. 그렇다면 이는 오일러 표현과 쿼터니언 표현 간에 지속적으로 변환해야 한다는 의미입니까?성능면에서 이게 가능할까요?

방향을 쿼터니언으로 저장하고 사용자에게 표시하기 위해서만 변환할 수 있습니까?특정 방향에 대해 정확히 하나의 쿼터니언 표현이 있지만 많은 오일러 표현이 있기 때문에 이는 불가능할 수 있습니다.해당 방향을 원래 정의한 오일러 표현에 해당하는 오일러 표현을 어떻게 '선택'합니까?이는 불가능한 작업처럼 보입니다. 쿼터니언으로 변환할 때 사실상 정보가 손실되었습니다.

오일러 각도로 저장한 다음 필요에 따라 쿼터니언으로 변환할 수 있습니까?이는 확장 가능하지 않을 수 있습니다. 오일러 각도에서 쿼터니언으로 변환하고 보간한 다음 다시 다시 변환하는 작업은 상대적으로 비용이 많이 드는 코드일 수 있습니다.

두 표현을 모두 저장하고 주어진 상황에 가장 적합한 표현을 사용할 수 있을까요?메모리 측면에서 큰 비용(약 60개의 뼈대가 있는 뼈대에 대한 애니메이션 곡선을 상상해 보십시오)과 이러한 값을 동기화하는 것은 비용이 많이 들거나 적어도 번거로울 수 있습니다.

이 문제에 대한 영리한 해결책을 보거나 사용했거나 생각해 본 사람이 있습니까?위의 세 가지 옵션이 유일한 옵션은 아닌가요?이와 유사한 다른 문제 도메인이 있습니까? 가지다 해결되었나요?

도움이 되었습니까?

해결책

저는 항공우주 엔지니어입니다.나는 30년 동안 우주선 자세 제어와 항법을 위해 쿼터니언을 사용해 왔습니다.귀하의 상황에 대한 몇 가지 생각은 다음과 같습니다.

  1. 오일러 각도로 방향을 변경하는 모든 종류의 프로세스를 수행하는 것은 거의 불가능합니다.오일러 각도는 특이점으로 인해 어려움을 겪습니다. 다른 각도가 특이점을 통과할 때 각도는 순간적으로 최대 180도까지 변경됩니다.오일러 각도는 순차 회전에 사용하는 것이 사실상 불가능합니다.쿼터니언에는 이러한 문제가 발생하지 않습니다.
  2. XYZ, XYX, XZY 등 12가지 오일러 각도 회전 시퀀스가 ​​가능합니다.오일러 각의 "가장 단순한" 또는 "올바른" 집합은 없습니다.일련의 오일러 각도를 도출하려면 사용 중인 회전 순서를 알고 이를 고수해야 합니다.
  3. 쿼터니언을 사용하여 모든 저장 및 회전 작업을 수행하고 출력이 필요할 때만 쿼터니언을 오일러 각도로 변환하는 것이 좋습니다.이 작업을 수행할 때 사용 중인 오일러 회전 시퀀스를 정의해야 합니다.

나는 이러한 모든 작업과 그 이상을 위한 알고리즘을 가지고 있습니다.임의의 회전 시퀀스의 오일러 각도와 회전 행렬(방향 코사인 행렬) 간의 쿼터니언, 위치, 속도 등과 일치하는 쿼터니언 보간끝 또는 중간 지점에서 쿼터니언을 사용한 강체 및 유연한 몸체 역학 및 운동학.

nhughes1ster@gmail.com으로 도와 줄 수 있으면 저에게 연락하십시오.

다른 팁

나는 Quaternions의 팬입니다. 그것들을 작동시키기 위해, 당신은 사용자에게 프레젠테이션을 재고 할 수 있습니까? 텍스트 형태의 일련의 Euler 각도로 사용자에게 회전을 제시하는 대신 간단한 3D 객체를 선택하고 Quaternion 회전을 물체에 적용하여 시각적으로 회전을 표시 할 수 있습니다.

코드에서 Quarternions를 사용하고 디스플레이에 필요할 때 Q를 각도로 변환하지 않는 이유는 무엇입니까?

회전을 Axis + 회전 각도로 표시 할 수 있습니다.이 각도는 본질적으로 Quaternion과 동일합니다 (표지판).

나는 내부적으로 오일러 각도를 사용하는 것이 합리적이지 않다고 생각합니다. 모든 계산에 쿼터니언을 사용하고 싶을 것이며 일반적으로 어디에서나 전환을 감당할 수 없습니다. UI의 Euler 각도로 다시 변환하는 것에 관해서는 사용자가 원래 입력과 동등하지만 다르게 표현되는 각도 만 얻는다면 그렇게 나쁘습니까? 변환을 올바르게 수행하면 주어진 쿼터니언에 대한 "가장 간단한"오일러 각도로 끝나야합니다.

우리가 얼마나 많은 전환에 대해 이야기하고 있습니까? 전환 당 약 2 개의 초월 작업 비용을 지불하는 것으로 보이며, 최신 하드웨어에서 초당 1 억 1 천만 분의 순서로 사용할 수 있습니다. 나는 정확도와 미학을위한 4 차를 저장하고 사용자 정보를 보존하기위한 오일러 회전을 모두 저장했습니다. 주어진 객체에 선호되는 것을 나타내는 플래그를 추가 할 수 있습니다. 게다가, 당신은 변환 회전 된 멤버 당 한 번. 변환 매트릭스를 계산 한 후에는 정점이 부족할 때까지 곱하기를집니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top