Estoy desarrollando una aplicación de realidad aumentada que (de momento) quiere mostrar un cubo simple en la parte superior de una superficie, y poder moverse en el espacio (tanto rotando como desplazándose) para mira el cubo en todos los diferentes ángulos. El problema de la calibración de la cámara no se aplica aquí, ya que le pido al usuario que coloque el iPhone en la superficie en la que desea colocar el cubo y luego presione un botón para restablecer la actitud. Para saber la rotación de la cámara es muy simple con el giroscopio y Core Motion. Lo hago de esta manera:Obteniendo desplazamiento de los datos del acelerómetro con Core Motion
if (referenceAttitude != nil) {
[attitude multiplyByInverseOfAttitude:referenceAttitude];
}
CMRotationMatrix mat = attitude.rotationMatrix;
GLfloat rotMat[] = {
mat.m11, mat.m21, mat.m31, 0,
mat.m12, mat.m22, mat.m32, 0,
mat.m13, mat.m23, mat.m33, 0,
0, 0, 0, 1
};
glMultMatrixf(rotMat);
Esto funciona muy bien. Más problemas surgen de todos modos cuando trato de encontrar el desplazamiento en el espacio durante una aceleración. El ejemplo de Apple Teapot con Core Motion simplemente agrega los valores x, y y z del vector de aceleración al vector de posición. Esto (aparte de no tener mucho sentido) tiene el resultado de devolver el objeto a la posición original después de una aceleración. (Dado que la aceleración va de positiva a negativa o viceversa). Lo hicieron así:
translation.x += userAcceleration.x;
translation.y += userAcceleration.y;
translation.z += userAcceleration.z;
¿Qué debo hacer para averiguar el desplazamiento de la aceleración de alguna istant? (con diferencia horaria conocida). Al ver algunas otras respuestas, parece que tengo que integrar dos veces para obtener la velocidad de la aceleración y luego la posición de la velocidad. Pero no hay ningún ejemplo en el código en absoluto, y no creo que eso sea realmente necesario. Además, existe el problema de que cuando el iPhone todavía está en un avión, los valores del acelerómetro no son nulos (creo que hay algo de ruido). ¿Cuánto debo filtrar esos valores? ¿Debo filtrarlos?
El problema con d = 0,5 * a * t^2, en general, es decir, que requiere una aceleración constante como se describe en http://en.wikipedia.org/wiki/ Aceleración. – Kay
Bueno, suponiendo que v (0) == 0 es crítico, pero necesitamos un punto para comenzar y deberíamos vivir con eso. OMI la parte más crítica aparece después de unos segundos cuando tienes a == 0 y v! = 0 (como se explica en mi respuesta). – Kay