2017-06-29 5 views
-1

J'utilise l'appareil photo pour tracer un marqueur noir sur la bille bleue comme indiqué sur l'image ci-dessous.Calculer l'angle de rotation de la bille en fonction de la position du marqueur

Blue ball with black marker

Je peux détecter la position de marqueur sur le dessus de manière fiable image, mais la balle aurait besoin de savoir comment calculer les angles de rotation de la balle en fonction de l'emplacement du marqueur.

Lorsque le marqueur est au milieu comme indiqué, les deux angles doivent être de 0 degré. Lorsque le marqueur n'est visible qu'à moitié sur le bord gauche, l'angle horizontal doit être de -90 degrés. Je comprends que calculer des angles à partir d'une image 2D est non linéaire, près du bord, un mouvement similaire en pixels signifie un plus grand changement de rotation qu'au milieu, mais je n'arrive pas à trouver la formule.

Répondre

0

rotation autour de l'axe vertical:

Phi = ArcSin((Marker.X - Center.X)/Radius) 

En général, si vous saisir point initial avec des coordonnées 2D (x0, y0) à la surface avant du manipulateur à bille de rayon 1, et le faire glisser le point final ti (x1 , y1), alors vous tourner vecteur de direction

d0 = (x0, y0, Sqrt(1 - x0^2 - y0^2)) 
to 
d1 = (x1, y1, Sqrt(1 - x1^2 - y1^2)) 

Que faire avec ces vecteurs? Je dépend de quelle approche allez-vous utiliser pour la rotation

+0

Je comprends maintenant la rotation autour de l'axe vertical, merci. Je suppose que même peut être appliqué pour l'axe horizontal aussi bien. Pas sûr de la deuxième partie, quelle est la gamme pour x0, y0, x0 et x1? Je suppose que 1-x0^2-y0^2 doit toujours être positif pour que ça fonctionne? – superg

+0

Oui, il suffit de changer X en Y – MBo

+0

Pour 'Radius = 1', les plages sont' -1..1' pour x et y, la somme des carrés ne dépasse pas 1 et le positif '0..1' pour la coordonnée z (on ne peut voir que l'hémisphère avant) – MBo