Je veux mon application pour être en mesure de détecter une rotation de l'appareil lorsque l'appareil est tenu horizontalement. Je pourrais utiliser des lectures d'une boussole mais je crois que les valeurs de lacet du gyroscope seraient plus précises. Compte tenu des lectures de lacet, quel serait le meilleur algorithme pour déterminer une rotation de 360 ° (dans le sens des aiguilles d'une montre ou dans le sens inverse des aiguilles d'une montre). Et il doit être un 360 ° complet, pas seulement tourner le téléphone de 180 ° dans une direction et de 180 ° dans la direction opposée.Détecter 360 ° de rotation de l'appareil en utilisant iOS gyroscope
Répondre
Voici une idée en supposant que vous pouvez obtenir l'affichage à des intervalles courts, et que le lacet peut être remis à zéro à un point de départ spécifique. Ceci est différent de l'autre réponse, qui détecte les cercles pleins à partir d'un point de départ continuellement adapté.
Dans cette approche, nous continuons à comparer le lacet actuel au lacet précédent, en demandant si un point de contrôle à 180 degrés ou PI
a été passé. Initialement, l'indicateur de point de contrôle cp_pi
est NO
et le fait passer dans l'une ou l'autre direction fait basculer son état. Notez que lacet change son signe en deux endroits, au point zéro et de nouveau à PI
à -PI
.
En supposant que votre objet a deux propriétés qui sont persistantes entre tick
s du détecteur, BOOL cp_pi;
et float prev_yaw;
, nous considérons que d_yaw
est inférieur à PI
pour traverser 0 et plus grand que PI
pour traverser à l'extrémité opposée de votre cercle. Lorsque vous traversez la fin opposée, nous basculons cp_pi
. Lorsque cp_pi
est YES
en traversant 0, nous sommes assurés d'avoir passé un cercle complet - sinon, cp_pi
aurait été décommuter à NO
:
-(void)tick
{
float yaw = [self zeroedYaw];
if ((fabs(yaw) == PI) || (yaw == 0.0f)) return;
if (yaw * prev_yaw < 0)
{
float d_yaw = fabs(yaw - prev_yaw);
if (d_yaw > PI)
{
cp_pi = ! cp_pi;
}
else if (cp_pi)
{
// fire detection event
}
}
prev_yaw = yaw;
}
Notez que pour rendre notre vie plus facile, nous sautons la fonction de détecteur entièrement si yaw
est assis directement sur l'un des points de contrôle.
Vous utiliseriez CoreMotion pour obtenir la rotation autour de l'axe vertical. Vous devez ajouter le delta des événements de rotation. Chaque fois qu'une valeur minimale est dans une direction différente de la précédente, vous réinitialisez votre point de départ. Ensuite, lorsque vous arrivez à plus ou moins 360 degrés à partir de ce point de départ, vous avez la rotation.
Oui, CoreMotion utilise une combinaison du gyroscope et une boussole pour donner une lecture plus précise et exacte de l'orientation de l'appareil. – Fogmeister
- 1. en utilisant Gyroscope pour détecter si l'objet est droit
- 2. iOS - échantillon de gyroscope
- 3. 360 rotation de joystick virtuel
- 4. iOS 5/6 Gyroscope référence nord
- 5. Rotation sur 360 degrés
- 6. iOS Gyroscope API
- 7. iOS Reconnaissance gestuelle utilisant un accéléromètre (et un gyroscope)
- 8. Rotation de deux UIImageViews 360 degrés
- 9. IOS Accéléromètre/Gyroscope Question
- 10. rotation de 360 degrés en flash actionscript 3
- 11. java script 360 image rotation code ralentir la rotation
- 12. 360 sur iOS en utilisant une séquence d'images
- 13. AIR pour iOS: visionneuse de panorama 360 °
- 14. Détecter la rotation de l'iPhone?
- 15. Comment implémenter 360 'cas sur ios?
- 16. Détermination de l'axe de rotation du gyroscope lorsque l'orientation initiale est variable
- 17. Avoir un problème avec la rotation du gyroscope Core Motion
- 18. Rotation UIView en utilisant CGAffineTransform
- 19. Dropbox détecter le changement de fichier en utilisant delta IOS
- 20. Rotation d'un 360 degrés complet dans WPF 3D
- 21. Comment détecter un tour complet (360 degrés) du téléphone?
- 22. Utilisez des capteurs comme gyroscope et accéléromètre pour regarder autour d'une image virtuelle 360?
- 23. Get POINT CLOUD à 360 degrés de rotation et de l'image
- 24. Pourquoi utiliser (360 * 16) au lieu de seulement 360 degrés?
- 25. ios de rotation du dispositif de force
- 26. Gyroscope Android
- 27. Gyroscope vs accéléromètre?
- 28. Récupère des valeurs de Gyroscope ou d'Accéléromètre
- 29. IOS Universal App Rotation
- 30. Fonction de rotation à 360 ° dans les opérateurs de décalage de bits F #
Que se passe-t-il si je franchis 180 ° dans un sens, puis que je reviens à 180 ° dans le sens inverse en direction de 0? Est-ce que cela comptera toujours comme une rotation? – thisiscrazy4
Ce serait bien, car 'cp_pi =! cp_pi' retournera à 'NON 'au deuxième passage, donc il ne sera pas détecté comme une rotation. –
Si vous tournez ensuite une autre fois pour compléter le cercle complet, 'cp_pi' retournera' YES' à +/- 'PI', et l'événement finira par se déclencher à 0. Ainsi, seuls les cercles complets seront pris en compte. –