2013-10-07 6 views
1

나는 안드로이드에서 만보계를 연구 중이다. 그것을 개선하기 위해, 나는 다른 모든 세력으로부터 수직력을 증발시키는 것을 좋아할 것이다.중력을 사용하여 세계 참조 프레임을 결정 하시겠습니까?

설명서에 부정확하여 방향 센서가 더 이상 사용되지 않아야하므로 다른 것을 찾고있었습니다.

내 생각은 : 'TYPE_GRAVITY'센서를 사용하여 실제 수직 축이 (지구 중심에서 하늘까지) 무엇인지 확인한 다음 해당 정보를 사용하여 TYPE_LINEAR_ACCELERATION 데이터를 회전 한 다음 원하는 축만 사용하십시오.

궁금한데, 이것이 가능합니까? 또는 단일 [x, y, z] 중력 벡터에서 필요한 회전을 계산하는 것이 불가능합니까?

답변

4

차라리 안드로이드/프로그래밍 관점보다는 물리학의 관점에서이 문제를 접근하려고합니다 :

이의이 TYPE_GRAVITY 센서 벡터 G를 반환한다고 가정 해 봅시다 = [X G, Y G, z G].

TYPE_LINEAR_ACCELERATION 센서 다른 벡터를 반환 = [X , Y , Z ].

은 당신이 찾고있는 의 방향 G의 단위 벡터 위에 의 돌출부의 크기입니다. 즉, A의 양은 G입니까?

먼저 우리는 우리가 G 단위 전화 할게 의 방향 G에서 단위 벡터를 얻을 필요가 (내가 거기에 무슨 짓을했는지?를 참조하십시오). 이를 얻으려면 G의 각 구성 요소를 해당 크기로 나눕니다. || G ||, 여기서 || G ||은 각 구성 요소의 제곱의 합 (거리 공식)의 제곱근입니다.따라서

G = [X G/G || ||, y G/|| G ||, z G/|| G ||

· G = (X A :]

G 방향 의 성분의 크기는 다음, 내적을 계산함으로써 주어진다 * (X G/G || ||)) + (Y * (Y G 0,123,/|| G ||) + (z A * (z G/|| G ||)).

결과는 스칼라 (벡터가 아님)이며 찾고있는 수량입니다.

여기 참조를 위해 좋은 위키 피 디아 기사입니다 : http://en.wikipedia.org/wiki/Vector_projection

+0

와우, 놀라운 대답은 ...! 여기에 늦었습니다. 정말 이해하기 전에 공부해야합니다. 와우! 그것을 시도하고보고 할 것입니다! – Peterdk

+0

놀랍습니다. 그것은 위대한 작품! 필자는 전체 가속도계 데이터로이를 테스트했으며 가능한 모든 방향으로 장치를 회전시키면서 중력 출력을 Z 축에서 1G로 유지했습니다. 내 코드에서 이미'|| G ||'를 사용하고 있었기 때문에 더 복잡해 보입니다. 그것은 단순히 실제로 '규모'입니다. 나는이 질문에 당신이 그것을 줄 수있는 현상금을 추가하려고 노력한다. 왜냐하면이 대답은 정말 탁월한 것이기 때문이다. – Peterdk

+0

중력 데이터와 관련된 미리 계산 된 크기가있을 것이라고 생각합니다. 내가 도울 수있어서 기뻐! 내 배경은 물리학 분야이고 아직 Android 프로그래밍에 익숙하지 않으므로 내 물리 배경이 예상치 못한 방식으로 나를 도와줍니다. 이제이 센서에 대해 좀 더 자세히 살펴볼 수있을 것 같습니다. –