Math 寻找拍摄光球的位置

Math 寻找拍摄光球的位置,math,geometry,polar-coordinates,360-degrees,360-panorama,Math,Geometry,Polar Coordinates,360 Degrees,360 Panorama,我有一个有四个角(c1,c2,c3,c4)的房间,每个角都有坐标 一个用户在这个房间里拍摄了一张360度的光球图像。(我们没有光球位置的坐标。)然后他们通过点击图像来识别房间的角落。这给了我们四个角度(a1,a2,a3,a4) 从这些数据中,我想找到光球最可能的位置,如xy坐标。最好的方法是什么 (免责声明:我是一个有一半能力的程序员,但不是一个伟大的数学家,所以如果我需要跟进任何特定的理解点,请原谅。谢谢!) 编辑1:我一直在努力让@meowgoesthedog真正有用的解决方案发挥作用。下

我有一个有四个角(c1,c2,c3,c4)的房间,每个角都有坐标

一个用户在这个房间里拍摄了一张360度的光球图像。(我们没有光球位置的坐标。)然后他们通过点击图像来识别房间的角落。这给了我们四个角度(a1,a2,a3,a4)

从这些数据中,我想找到光球最可能的位置,如xy坐标。最好的方法是什么

(免责声明:我是一个有一半能力的程序员,但不是一个伟大的数学家,所以如果我需要跟进任何特定的理解点,请原谅。谢谢!)


编辑1:我一直在努力让@meowgoesthedog真正有用的解决方案发挥作用。下面是一些示例数据(在Ruby中,但在任何其他语言中都几乎相同):

c1 = [70.38017162671083, 573.9210230366474]
c2 = [62.14926043346433, 573.9210230601221]
c3 = [62.170859502652874, 566.273256963365]
c4 = [70.41870117287603, 566.2827951694268]

a1 = 0.7162475014121918
a2 = 3.076344266497204
a3 = 4.964159781307695
a4 = 5.859686474799228

a = Math.sin(a1) +Math.sin(a2)
b =-Math.cos(a1) -Math.cos(a2)
c = Math.sin(a3) +Math.sin(a4)
d =-Math.cos(a3) -Math.cos(a4)

e = Math.sin(a1)*c1[0] + Math.sin(a2)*c2[0] - Math.cos(a1)*c1[1] - Math.cos(a2)*c2[1]
f = Math.sin(a3)*c3[0] + Math.sin(a4)*c4[0] - Math.cos(a3)*c3[1] - Math.cos(a4)*c4[1]

x = (d*e - b*f) / (a*d - b*c)
y = (a*f - c*e) / (a*d - b*c)
然而,结果并不是我所期望的:在本例中,x是77.29614012577807,y是551.2264007863547。这两个都位于放置相机的房间的边界框之外(大约x 62-70,y 566-574)

计算从x,y到角c1,c2,c3,c4的角度,应该得到(大致)a1,a2,a3,a4,得到非常不同的结果:

puts Math.atan2(c1[1]-y, c1[0]-x)
> 1.8665964276063274

你能看出我做错了什么吗?再次感谢你

添加更多相关标记,如
图像处理
opencv
,可能会有所帮助。这4个角度代表什么?这些角度基本上是极坐标的角度,其中光球位置是原点,坐标代表一个角。(感谢您的提示-将搜索一些更相关的标记!)只是为了澄清-这些是XY平面中的角度?如果没有,那么您可能还需要高度信息。还有,哪些角度对应于哪些边?是的,只是在XY平面上(我想是极性的,而不是球形的)。a1是从光球到房间角c1、a2到c2的角度,依此类推。@SparrowhawkDisaster:你在哪里测量这些角度?