Por supuesto, no puedo decir con certeza, pero puedo decir con confianza que es muy probable que estén usando la clase CMMotionManager de iOS y específicamente el método startDeviceMotionUpdates para obtener notificaciones CMDeviceMotion. Esto les permitiría obtener una medición más precisa del movimiento más allá del simple uso del giroscopio solo porque esto también tiene en cuenta el efecto del acelerómetro.
Aquí hay un código de muestra de WWCD 2011 si desea un ejemplo de cómo usar DeviceMotion. Echa un vistazo a la muestra CoreMotionTeapot.
http://connect.apple.com/cgi-bin…
Después de esto, se vuelve un poco borroso, pero podemos suponer que están haciendo algunos cálculos trigonométricos básicos para determinar la distancia relativa de una esquina a otra. Una pista es que te dicen que te pares en una sola posición y sostengas la cámara a la misma altura mientras disparas en cada esquina. Esto significa que están haciendo algunas suposiciones que incluyen:
- El piso es plano (esto nos permitirá realizar cálculos en triángulos rectángulos relativos al piso y donde está sosteniendo la cámara).
- La altura de la cámara es quizás un pie más baja que la altura humana promedio (lo que dependerá de su ubicación hasta cierto punto, es decir, tal vez los asiáticos sean más bajos y la gente de los Países Bajos sea más alta, pero puede aproximarla a 5 pies).
- La distancia de la persona desde el primer punto de esquina. Este es el que menos estoy seguro, pero para empezar, puede elegir un valor promedio arbitrario y quizás más adelante pueda encontrar una mejor manera de aproximarse. Tenga en cuenta que esto siempre se puede ajustar más adelante en MagicPlan ajustando algunas longitudes de pared en sus configuraciones de calibración.
Una vez que se selecciona la primera esquina, podemos suponer que marcan esta esquina como su punto de referencia (0,0,0). En otras palabras, establecen su ‘actitudReferenciaFrame’ en CMMotionManager a la actitud de su dispositivo cuando seleccionan la primera esquina.
- Trigonometría (matemática): ¿Es posible encontrar [matemáticas] \ sin (\ theta / 3) [/ matemáticas] cuando se le da [matemáticas] \ sin (\ theta) [/ matemáticas]?
- Óptica: si tuviera dos cámaras posicionadas en coordenadas XYZ específicas y supiera sus ubicaciones precisas, ¿cómo podría determinar la posición XYZ de una esfera que está en el campo de visión de ambas cámaras?
- ¿Cómo se resuelve [matemáticas] 2 \ cos (\ theta- \ frac {\ pi} {3}) = \ cos (\ theta + \ frac {\ pi} {2}) [/ matemáticas]?
- ¿Cuál es la mejor manera de memorizar el círculo unitario?
- ¿Por qué se considera que la onda cosenoidal es una “función par”?
Todos los cálculos futuros utilizan los supuestos de arriba, trigonométrico simple y propiedades de triángulos rectángulos para calcular la distancia de una esquina a la siguiente. Tenga en cuenta que cuando el usuario gira y mantiene la cámara en la misma posición (cambios de guiñada) y elige otra esquina, se puede suponer que esa esquina está en el mismo plano (pared) que la esquina anterior. Sin embargo, si el usuario gira la cámara hacia ellos (cambia el tono), entonces está eligiendo una esquina que está más lejos. Del mismo modo, si giran la cámara lejos de ellos (también cabeceo), entonces están eligiendo una esquina que esté más cerca de ellos (más cerca de sus pies en el piso).
Creo que ese es el funcionamiento básico y los detalles matemáticos deberían ser bastante fáciles de entender desde aquí.