如何获得"点"的位置?从墙角度来看?我知道摄像机视角的x,y,(z)坐标,我知道墙的边缘点
我想计算一下这个点是否位于墙前,并且位于墙的前方(左,右)。
我的想法是计算墙的平面方程,并测试从点到平面的垂直线是否在墙的边界上击中它。
我可以不使用z坐标以某种方式做到这一点(这是非常不准确的),墙和相机之间的角度是可变的。
答案 0 :(得分:0)
如果您知道墙中心的xc,yc位置,则可以转换新参考系中点的X,Y坐标。
首先,翻译原点。如果摄像机位于坐标(0,0)中,则3D世界中的点(X',Y',Z')的新坐标将
X' = X - xc
Y' = Y - yc
Z' = Z
(假设从您的图像中,墙壁与XY平面正交)
现在你必须围绕你知道的角度的Z轴旋转,并获得最终的坐标X'','',Z''相对于墙的中心。
如果角度为ap aplha,则得出rotational matrix around Z
cos(alpha) -sin (alpha) 0
R = [sin(alpha) cos(alpha) 0]
0 0 1
并获得(通过载体moltiplication的矩阵)
(X'', Y'', Z'') = R*(X',Y',Z')
你必须再次获得Z'' = Z
现在,您可以在墙的中间左侧或右侧定义点,检查是否X'' > 0或X'' < 0(您也可以使用Y'',它取决于您使用的alpha值)
如果这个答案假定你没有的东西(alpha,xc,yc,点的3D坐标)告诉我,我会添加一个方法或策略。
答案 1 :(得分:0)
如果z坐标不重要,您可以忘记它并仅使用x,y。
而不是飞机,你可以在墙壁的2d点上安装一条线。接下来,如您所建议的那样,计算一条线,该线穿过绿点并垂直于墙的直线,并计算墙的直线与垂直线之间的交点。
如果交叉点的x或y坐标位于墙壁限制范围内,
x_wall_min< x< x_wall_max或y_wall_min< y< y_wall_max,
比站在墙前的点。
如果墙壁和相机之间的角度可能会有所不同,那么您必须更好地定义墙壁和墙壁的左侧或右侧。因为从某些角度来看可能并不明显。