Я не имею в виду конкретную камеру прямо сейчас, мне просто любопытно, как это делается программно / математически.
У меня есть трехмерное пространство, прямоугольник с камерой в углу, смотрящей внутрь.
У меня есть движущийся объект в этом прямоугольнике, который передает (x, y, z) координаты его текущей позиции.
Я хочу взять эти координаты и перевести их в инструкции, указывающие камере указывать на это положение.
Как обычно выполняется этот перевод?
Ответы:
Тригонометрия!
Моя камера - DLink 5020-L и имеет команды панорамирования / наклона, которые могут быть переданы через API . Он также имеет предопределенные позиции для установки и может быть запущен через API
Pre-INIT
Position 1
В этом
Position 1
Посмотрите на объект
Вы можете отрицать предыдущие результаты в зависимости от расположения вашей камеры
(Я добавлю некоторые схемы, когда у меня будет время)
источник
Хорошие ответы уже, я просто хотел бы добавить несколько других вещей, которые вы должны принять во внимание. Как уже упоминали hardlib и Goufalite, способ сделать это - тригонометрически. Я нарисовал 2-е изображение камеры и объекта IoT:
Как вы можете видеть, поле зрения камеры будет больше, чем объект - если не на близком расстоянии, когда объект удаляется дальше.
Теперь вы можете захотеть, чтобы камера всегда была в центре объекта. В этом случае вы можете просто взять вычисления, на которые ссылается hardlib:
... который будет углом против часовой стрелки от оси x, в соответствии с соглашением. Вам также понадобится угол вдали от уровня:
Очевидно, вам придется рассчитывать, исходя из положения камеры в исходной точке по всем трем осям.
С другой стороны, вы можете предпочесть не заставлять камеру двигаться больше, чем необходимо, то есть заставлять камеру двигаться только после того, как объект, по-видимому, собирается выйти из кадра. В этом случае вам, вероятно, понадобится переменная «давление», которая увеличит вероятность изменения угла камеры в зависимости от того, насколько близко объект находится к краю кадра.
Если вы идете по этому маршруту, вам нужно знать угол поля зрения камеры в обоих полях обзора, чтобы вы могли определить, где объект сравнивается с полем зрения камеры.
источник
Обычно это делается с помощью базовой тригонометрии .
Начните с работы на одной плоской плоскости 2d с камерой в начале координат (0,0) и объектом в точке (x, y)
Учитывая, что расстояние x будет смежной стороной треугольника, а расстояние y будет противоположным, вы получите:
так что угол панорамирования можно найти с
Вы также можете определить расстояние по прямой линии (гипотенузы) между камерой и объектом с помощью:
Предоставление:
Теперь вы можете использовать расстояние h с высотой z, чтобы таким же образом рассчитать угол наклона.
Когда у вас есть углы, вы можете подать их на то, что когда-либо контролирует панорамирование / наклон камеры.
источник