2013-03-11 2 views
1

장치를 일정량만큼 회전하면 간단한 큐브가 같은 양으로 회전해야하지만 반대 방향으로 회전해야합니다. 예를 들어 장치를 오른쪽으로 45도 회전하면 큐브가 왼쪽으로 45도 회전해야합니다. 또는 피치가 30 도인 경우 큐브는 X 축을 중심으로 -30도 회전해야합니다. 요위가 10 도인 경우 큐브는 Z 축을 기준으로 -10도 회전해야합니다. 그래서 같은 getOrientation 다음 .getRotationMatrixFromVector 사용했습니다 :짐벌 잠금 장치, 쿼터니언으로 해결할 수 없음

if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) { 

    SensorManager.getRotationMatrixFromVector(
      mRotationMatrix , event.values); 
    SensorManager.getOrientation(mRotationMatrix, orientationVals); 
    azimuthVal = (Math.round((Math.toDegrees(orientationVals[0]))*100.0)/100.0); 
    pitchVal= (Math.round((Math.toDegrees(orientationVals[1]))*100.0)/100.0); 
    rollVal = (Math.round((Math.toDegrees(orientationVals[2]))*100.0)/100.0);} 

을하지만 그것으로 문제는 피치의 변화 롤과 그 반대의 경우도 마찬가지 영향을 미치는 장치는 X 축을 중심으로 회전 결과, 핀치 값 변경 사항 -> 롤 변화 -> 큐브는 X를 중심으로 회전 할뿐만 아니라 Y가 필요할 때도 회전합니다.

저는 인터넷을 둘러 보았고 많은 사람들이 쿼터니언을 해결책으로 언급했습니다.하지만 축에 따라 장치가 회전하는 각도를 알아야하기 때문에 쿼터니언을 특정 응용 프로그램에 어떻게 적용 할 수 있습니까?

+0

당신은 장치의 위치를 ​​반영하기 위해 큐브를 원하십니까 하지만 반대 방향으로? –

+0

예, 제가 올바르게 이해했다면, 그래야 할 일이 있습니다 – Nazerke

+0

그런 다음 마이너스 회전 행렬을 그리기 메소드에 전달하십시오. –

답변

0

짐벌 잠금은 회전 행렬에서 회전 각도를 추출 할 때 발생합니다. 기본적으로 회전 행렬 구성 요소와 회전 각도 사이의 등식에서 자유도가 느슨해지며 실제 회전 각도는 아닙니다. 복구 가능,

따라서 코드에서 발생 할 수 있습니다. SensorManager.getOrientation (mRotationMatrix, orientationVals);

당신은 어떻게 든 회전 각도를 추출하기 전에 문제를 해결해야

, 이 여기에 설명으로 사원 수의 구성 요소를 수정하여 수행 할 수 있습니다 :

http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToEuler/