我现在没有想到特定的相机,我只是好奇这是如何以编程/数学方式完成的。
我有一个 3D 空间,一个矩形,一个角落里有一个向内看的相机。
我在那个矩形中有一个移动对象,它正在传输其当前位置的 (x, y, z) 坐标。
我想获取这些坐标并将它们转换成指令,告诉相机指向那个位置。
这种翻译通常是如何完成的?
我现在没有想到特定的相机,我只是好奇这是如何以编程/数学方式完成的。
我有一个 3D 空间,一个矩形,一个角落里有一个向内看的相机。
我在那个矩形中有一个移动对象,它正在传输其当前位置的 (x, y, z) 坐标。
我想获取这些坐标并将它们转换成指令,告诉相机指向那个位置。
这种翻译通常是如何完成的?
我的相机是 DLink 5020-L 并且具有可以通过 API 给出的平移/倾斜命令。它还具有要设置的预定义位置,也可以通过 API 触发
Position 1
Position 1
根据相机的放置方式,您可能会否定之前的结果
(有时间我会加一些原理图)
已经有了很好的答案,我只想添加一些您应该考虑的其他事项。就像 hardlib 和 Goufalite 已经提到的那样,这样做的方法是三角函数。我已经绘制了相机和 IoT 对象的二维描述:
正如您所看到的,相机的视野将比物体大——如果不是近距离,当物体移得更远时。
现在,您可能希望相机始终以对象为中心。在这种情况下,您可以简单地进行 hardlib 引用的计算:
ϴ = arctan(y/x)
...根据惯例,这将是从 x 轴逆时针的角度。您还需要远离水平的角度:
α = arctan(z / ((y^2+x^2)^1/2))
显然,您必须根据位于所有三个轴上的原点的相机位置进行计算。
另一方面,您可能更喜欢不要让相机移动到不必要的位置,也就是说,让相机只在物体看起来要移出框架时才移动。在这种情况下,您可能需要一个“压力”变量,这将使相机更有可能根据对象与帧边缘的接近程度来改变其角度。
如果你走那条路,你需要知道相机在两个视野中的视野角度,这样你就可以确定物体与相机视野的比较位置。
这通常是用基本的三角学来完成的。
首先在单个 2d 平面上工作,相机位于原点 (0,0),对象位于 (x,y)
鉴于 x 距离将是三角形的相邻边,而 y 距离将与您相反:
所以可以找到平移角
您还可以计算出相机和物体之间的直线距离(斜边):
给予:
现在您可以使用 h 距离和 z 高度以相同的方式计算倾斜角。
一旦你有了角度,你就可以将这些提供给控制相机上的平移/倾斜的东西。