Je n'ai pas de caméra particulière en tête en ce moment, je suis simplement curieux de savoir comment cela se fait, par programmation / mathématique.
J'ai un espace 3D, un rectangle, avec une caméra dans un coin, regardant vers l'intérieur.
J'ai un objet en mouvement dans ce rectangle qui transmet (x, y, z) les coordonnées de sa position actuelle.
Je veux prendre ces coordonnées et les traduire en instructions indiquant à la caméra de pointer sur cette position.
Comment se fait généralement cette traduction?
Réponses:
Trigonométrie!
Mon appareil photo est un DLink 5020-L et possède des commandes de panoramique / inclinaison qui peuvent être fournies via une API . Il a également des positions prédéfinies à définir et peut également être déclenché via l'API
Pré-init
Position 1
Init
Position 1
Regardez l'objet
Vous pouvez annuler les résultats précédents selon la façon dont votre appareil photo est placé
(J'ajouterai quelques schémas quand j'aurai le temps)
la source
Excellentes réponses déjà, je voudrais juste ajouter quelques autres choses que vous devriez prendre en considération. Comme hardlib et Goufalite l'ont déjà mentionné, la façon de le faire est de manière trigonométrique. J'ai dessiné une représentation 2D de la caméra et de l'objet IoT:
Comme vous pouvez le voir, le champ de vision de la caméra va être plus grand que l'objet - s'il n'est pas à courte portée, lorsque l'objet s'éloigne davantage.
Maintenant, vous voudrez peut - être que la caméra soit toujours centrée sur l'objet. Dans ce cas, vous pouvez simplement prendre les calculs référencés par hardlib:
... qui sera l'angle dans le sens antihoraire de l'axe des x, par convention. Vous aurez également besoin de l'angle par rapport au niveau:
Évidemment, vous devrez calculer en fonction de la position de la caméra à l'origine sur les trois axes.
D'un autre côté, vous préférerez peut-être ne pas faire bouger la caméra plus que nécessaire, c'est-à-dire que la caméra ne bouge que lorsque l'objet semble sur le point de sortir du cadre. Dans ce cas, vous voudrez probablement une variable de "pression" qui rendra la caméra plus susceptible de changer son angle en fonction de la distance entre l'objet et le bord du cadre.
Si vous suivez cette route, vous devrez connaître l'angle du champ de vision de la caméra dans les deux champs de vision, afin de pouvoir déterminer où l'objet est comparé au champ de vision de la caméra.
la source
Cela se fait normalement avec la trigonométrie de base .
Commencez par travailler sur un seul plan plat 2D avec la caméra à l'origine (0,0) et l'objet à (x, y)
Étant donné que la distance x sera le côté adjacent du triangle et la distance y sera l'opposé que vous obtenez:
de sorte que l'angle de panoramique peut être trouvé avec
Vous pouvez également calculer la distance en ligne droite (les hypoténuses) entre la caméra et l'objet avec:
Donnant:
Vous pouvez maintenant utiliser la distance h avec la hauteur z pour calculer l'angle d'inclinaison de la même manière.
Une fois que vous avez les angles, vous pouvez les appliquer à ce qui contrôle le panoramique / l'inclinaison de la caméra.
la source