我有一个有四个角落(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
有什么明显的你可以看出我做错了吗?再次感谢你!