No tengo una cámara en particular en este momento, solo tengo curiosidad por saber cómo se hace esto, programáticamente / matemáticamente.
Tengo un espacio 3D, un rectángulo, con una cámara en una esquina mirando hacia adentro.
Tengo un objeto en movimiento en ese rectángulo que transmite coordenadas (x, y, z) de su posición actual.
Quiero tomar esas coordenadas y traducirlas en instrucciones para que la cámara apunte a esa posición.
¿Cómo se hace esta traducción típicamente?
Respuestas:
Trigonometría!
Mi cámara es una DLink 5020-L y tiene comandos de movimiento horizontal / vertical que se pueden dar a través de una API . También tiene posiciones predefinidas para establecer y también se puede activar a través de API
Pre-inicio
Position 1
En eso
Position 1
Mira el objeto
Puede negar los resultados anteriores dependiendo de cómo se coloque su cámara
(Agregaré algunos esquemas cuando tenga tiempo)
fuente
Grandes respuestas ya, solo me gustaría agregar algunas otras cosas que debe tener en cuenta. Como hardlib y Goufalite ya han mencionado, la forma de hacerlo es trigonométricamente. He dibujado una representación en 2-d de la cámara y el objeto IoT:
Como puede ver, el campo de visión de la cámara será más grande que el objeto, si no está cerca, cuando el objeto se aleje más.
Ahora, es posible que desee que la cámara esté siempre centrada en el objeto. En ese caso, simplemente puede tomar los cálculos a los que hace referencia hardlib:
... que será el ángulo en sentido antihorario desde el eje x, por convención. También necesitará el ángulo alejado del nivel:
Obviamente, tendrá que calcular en función de la posición de la cámara en el origen en los tres ejes.
Por otro lado, es posible que prefiera no hacer que la cámara se mueva más de lo necesario, es decir, hacer que la cámara solo se mueva una vez que el objeto parece estar a punto de salir del marco. En ese caso, es probable que desee una variable de "presión" que hará que la cámara tenga más probabilidades de cambiar su ángulo en función de lo cerca que esté el objeto del borde del encuadre.
Si sigue esa ruta, necesitará saber el ángulo del campo de visión de la cámara en ambos campos de visión, para poder determinar dónde se compara el objeto con el campo de visión de la cámara.
fuente
Esto normalmente se hace con trigonometría básica .
Comience trabajando en un solo plano plano 2D con la cámara en el origen (0,0) y el objeto en (x, y)
Dado que la distancia x será el lado adyacente del triángulo y la distancia y será el opuesto que obtienes:
por lo que el ángulo de desplazamiento se puede encontrar con
También puede calcular la distancia en línea recta (las hipotenusas) entre la cámara y el objeto con:
Dando:
Ahora puede usar la distancia h con la altura z para calcular el ángulo de inclinación de la misma manera.
Una vez que tenga los ángulos, puede alimentarlos a lo que sea que esté controlando la panorámica / inclinación de la cámara.
fuente