Ich habe momentan keine bestimmte Kamera im Sinn, ich bin nur neugierig, wie dies programmatisch / mathematisch gemacht wird.
Ich habe einen 3D-Raum, ein Rechteck, mit einer Kamera in einer Ecke nach innen.
Ich habe ein sich bewegendes Objekt in diesem Rechteck, das (x, y, z) Koordinaten seiner aktuellen Position überträgt.
Ich möchte diese Koordinaten nehmen und sie in Anweisungen übersetzen, die der Kamera sagen, dass sie auf diese Position zeigen soll.
Wie erfolgt diese Übersetzung normalerweise?
Antworten:
Trigonometrie!
Meine Kamera ist eine DLink 5020-L und verfügt über Schwenk- / Neigebefehle , die über eine API gegeben werden können . Es muss auch vordefinierte Positionen festlegen und kann auch über die API ausgelöst werden
Pre-Init
Position 1
Drin
Position 1
Objekt anschauen
Je nachdem, wie Ihre Kamera platziert ist, können Sie die vorherigen Ergebnisse negieren
(Ich werde einige Schaltpläne hinzufügen, wenn ich Zeit habe)
quelle
Schon gute Antworten, ich möchte nur ein paar andere Dinge hinzufügen, die Sie berücksichtigen sollten. Wie Hardlib und Goufalite bereits erwähnt haben, ist der Weg dazu trigonometrisch. Ich habe eine 2-D-Darstellung der Kamera und des IoT-Objekts erstellt:
Wie Sie sehen können, ist das Sichtfeld der Kamera größer als das Objekt - wenn nicht im Nahbereich, wenn sich das Objekt weiter entfernt.
Jetzt möchten Sie vielleicht, dass die Kamera immer auf dem Objekt zentriert ist. In diesem Fall können Sie einfach die Berechnungen verwenden, auf die sich hardlib bezieht:
... der gemäß Konvention der Winkel gegen den Uhrzeigersinn von der x-Achse ist. Sie benötigen auch den Winkel von der Ebene weg:
Natürlich müssen Sie anhand der Kameraposition berechnen, die in allen drei Achsen am Ursprung liegt.
Auf der anderen Seite möchten Sie möglicherweise die Kamera nicht mehr als nötig bewegen, dh die Kamera erst dann bewegen, wenn sich das Objekt scheinbar aus dem Rahmen herausbewegt. In diesem Fall möchten Sie wahrscheinlich eine "Druck" -Variable, mit der die Wahrscheinlichkeit erhöht wird, dass die Kamera ihren Winkel ändert, je nachdem, wie nahe das Objekt am Rand des Rahmens liegt.
Wenn Sie diesen Weg gehen, müssen Sie den Winkel des Sichtfelds der Kamera in beiden Sichtfeldern kennen, damit Sie bestimmen können, wo das Objekt mit dem Sichtfeld der Kamera verglichen wird.
quelle
Dies erfolgt normalerweise mit grundlegender Trigonometrie .
Beginnen Sie mit der Arbeit an einer einzelnen 2D-Ebene mit der Kamera am Ursprung (0,0) und dem Objekt am (x, y).
Vorausgesetzt, der x-Abstand ist die benachbarte Seite des Dreiecks und der y-Abstand ist das Gegenteil, das Sie erhalten:
so kann der Schwenkwinkel mit gefunden werden
Sie können auch den geraden Abstand (die Hypotenusen) zwischen der Kamera und dem Objekt berechnen mit:
Geben:
Jetzt können Sie den h-Abstand mit der z-Höhe verwenden, um den Neigungswinkel auf die gleiche Weise zu berechnen.
Sobald Sie die Winkel haben, können Sie diese demjenigen zuführen, der das Schwenken / Neigen der Kamera steuert.
quelle