Nie mam teraz na myśli konkretnego aparatu, jestem tylko ciekawy, jak to się robi, programowo / matematycznie.
Mam przestrzeń 3D, prostokąt, z kamerą skierowaną do góry w jednym rogu.
Mam ruchomy obiekt w tym prostokącie, który przesyła współrzędne (x, y, z) swojej aktualnej pozycji.
Chcę wziąć te współrzędne i przetłumaczyć je na instrukcje mówiące kamerze, aby wskazywała to położenie.
Jak zazwyczaj wykonuje się to tłumaczenie?
Odpowiedzi:
Trygonometria!
Mój aparat to DLink 5020-L i ma polecenia panoramowania / pochylania, które można wydawać za pośrednictwem interfejsu API . Ma również predefiniowane pozycje do ustawienia, a także może być wyzwalane przez API
Przedinicjalizacja
Position 1
W tym
Position 1
Spójrz na obiekt
Możesz zanegować poprzednie wyniki w zależności od ustawienia aparatu
(Dodam trochę schematów, kiedy będę miał czas)
źródło
Świetne odpowiedzi, chciałbym tylko dodać kilka innych rzeczy, które powinieneś wziąć pod uwagę. Jak wspomniano już o Hardlib i Goufalite, sposób na zrobienie tego jest trygonometryczny. Narysowałem dwuwymiarowy obraz kamery i obiektu IoT:
Jak widać, pole widzenia kamery będzie większe niż obiekt - jeśli nie będzie z bliskiej odległości, gdy obiekt poruszy się dalej.
Teraz może chcą aparat zawsze na środku obiektu. W takim przypadku możesz po prostu wykonać obliczenia, do których odnosi się hardlib:
... który będzie kątem w kierunku przeciwnym do ruchu wskazówek zegara od osi x, zgodnie z konwencją. Będziesz także potrzebował kąta od poziomu:
Oczywiście musisz obliczyć na podstawie położenia kamery znajdującego się na początku we wszystkich trzech osiach.
Z drugiej strony, możesz nie chcieć, aby kamera poruszała się bardziej niż to konieczne, to znaczy, aby kamera poruszała się tylko wtedy, gdy obiekt wydaje się być bliski wyjścia z ramki. W takim przypadku prawdopodobnie będziesz potrzebować zmiennej „ciśnienia”, która zwiększy prawdopodobieństwo, że kamera zmieni kąt w zależności od odległości obiektu od krawędzi ramki.
Jeśli wybierzesz tę trasę, musisz znać kąt pola widzenia kamery w obu polach widzenia, abyś mógł określić, gdzie obiekt jest porównywany z polem widzenia kamery.
źródło
Zwykle odbywa się to za pomocą podstawowej trygonometrii .
Zacznij od pracy nad pojedynczą płaską płaszczyzną 2D z kamerą na początku (0,0) i obiektem na (x, y)
Biorąc pod uwagę, że odległość x będzie sąsiadującym bokiem trójkąta, a odległość y będzie przeciwna do otrzymanej:
dzięki czemu można znaleźć kąt obrotu
Możesz także obliczyć odległość w linii prostej (przeciwprostokątne) między kamerą a obiektem za pomocą:
Dający:
Teraz możesz użyć odległości h z wysokością z, aby obliczyć kąt pochylenia w ten sam sposób.
Po ustawieniu kątów możesz je karmić tym, co kiedykolwiek kontroluje panoramowanie / pochylanie w kamerze.
źródło