4 つのコーナー (c1、c2、c3、c4) がある部屋があり、それぞれに座標があります。
ユーザーは、この部屋で光球 (360 度の画像) を撮影します。(光球の位置の座標はわかりません。) 次に、画像をクリックして部屋の角を特定します。これにより、4 つの角度 (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
私が間違っているとわかる明らかなことはありますか?ありがとうございました!