У меня есть комната с четырьмя углами (с1, с2, с3, с4), для каждого из которых у меня есть координаты.
В этой комнате пользователь делает фотосферу - изображение с 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)
Однако результаты не те, что я ожидал: в этомрегистр х равен 77,29614012577807, а у 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
Есть ли что-нибудь очевидное, что вы видите, что я делаю неправильно?Еще раз спасибо!