Pregunta

El lanzamiento de la guiñada y el rollo obtenemos de la sensormanager.getorientación () de Android () son todos para el eje Y del teléfono.Por esto me refiero, la guiñada y el paso dicen dónde los puntos del eje y y el rollo se trata del eje Y.(Y la orientación de mi pantalla se fija a Landsape, por lo que el eje Y no cambia).Pero lo que quiero es el paso de la guiñada y el rollo del eje Z negativo (puntos en el teléfono), más como si mi pantalla telefónica es una ventana de paisaje en una cabina de un avión, ¿qué guiaría la guiñadatono y roll ser?

¿Fue útil?

Solución

Si entiendo lo que está diciendo, está viendo que el paso de la guiñada actual y el rollo se devuelven como si el eje + Y fuera el vector predeterminado 'frontal' y el eje + z fuera el vector predeterminado 'arriba'. Le gustaría realizar una transformación de coordenadas de manera que su guiñada, tono y rollo se calculen con el eje -z como el vector predeterminado 'frontal' y el vector + x como el vector predeterminado 'arriba'.

Primero, deberá calcular los vectores delanteros y ups actuales de su YAW, Pitch and Roll en la configuración actual. Esto se puede hacer utilizando las matrices de rotación 3D: http://en.wikipedia.org/wiki/rotation_matrix#Rotations_in_Three_Dimensions

Use el ángulo de la guiñada para girar alrededor de Z, tono como una rotación sobre x, y rodar como una rotación sobre y. Multiplique estas matrices juntas, luego multiplica el vector delantero (0, 1, 0) y el vector (0, 0, 1) por el resultado de obtener sus nuevos vectores delanteros y de arriba.

A continuación, necesitará calcular el nuevo YAW, PITCH y Roll Angles. La guía es el ángulo entre el vector delantero proyectado en el plano de yz (set x valor en 0) y el -z vector (0, 0, -1), el tono es el ángulo entre el vector frontal proyectado en el plano xz y el - El vector Z, y el rollo es el ángulo entre el vector de arriba proyectado en el plano xy y el vector + x (1, 0, 0). Si dejamos que FX= el componente X del vector frontal, el componente Y, así que, así, obtendremos:

yaw   = acos ( -z dot (0,  Fy, Fz) ) / sqrt(Fy*Fy + Fz*Fz)
pitch = acos ( -z dot (Fx, 0,  Fz) ) / sqrt(Fx*Fx + Fz*Fz)
roll  = acos ( +x dot (Ux, Uy, 0 ) ) / sqrt(Ux*Ux + Uy*Uy)

Debe poder hacer esto para otros vectores si he elegido los incorrectos.

Otros consejos

Las convenciones de los ejes del cuerpo utilizados en Android no son lo mismo que se usan en aeroespacial (por buenas razones).El eje X de un "plano" es equivalente al eje "Y" de y el dispositivo Android (y también el eje X está relacionado con el eje Y, positivo o negativo, dependiendo de las condevniciones de Enu Ro Ned).Aquí se puede encontrar un buen artículo sobre las convenciones de rollo de Pitch ANS ANS, y puede ser un comienzo para responder a su pregunta: http://www.sensorplatforms.com/unders-orientation-conventions-mobile-platforms/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top