たとえば、6000px x 3000px (幅 360 度、高さ 180 度に広がる) のフラット (正距円筒パノラマ) 画像があるとします。たとえば、x = -10、y=-10 を、画像の中心が水平/垂直オフセット 0 を意味する球座標 (パン/チルトまたは垂直/水平オフセット) に変換するにはどうすればよいでしょうか?
これを計算することは可能ですか、それとも半径、距離、Z 座標などの他の変数が必要ですか?
編集:これまでに持っているもの:
def self.translate_xy_to_spherical(x, y)
h = (x / (6000 / 360)) - 180
v = ((y / (3000 / 180)) - 90) / - 1
[h, v]
end
def self.translate_spherical_to_xy(h, v)
x = ((h + 180) * (6000 / 360))
y = ((v * -1) + 90) * (3000/ 180)
[x, y]
end
最初の方法で 0,0 を入力すると、正しい -180,90 が得られます。しかし、3000.0 を設定すると、0.90 になると予想していましたが、7.90 になりました。他の式 (xy から球面) についても同様です。0,0 を入力すると、3000,1500 が期待されますが、2880x1440px になります。直線で計算しているためか、若干のズレがあります。
更新: 答え
度が360度よりも大きくなる可能性があることを考慮して、以下の回答を更新しました。これを修正するためにモジュロを使用します。
IMAGE_WIDTH = 6000
IMAGE_HEIGHT = 3000
def self.translate_xy_to_spherical(x, y)
h = (x / (IMAGE_WIDTH / 360.0)) - 180
v = ((y / (IMAGE_HEIGHT / 180.0)) - 90) / -1
[h, v]
end
def self.translate_spherical_to_xy(h, v)
x = (((h % 360) + 180) * (IMAGE_WIDTH / 360.0))
y = (((v % 180) * -1) + 90) * (IMAGE_HEIGHT/ 180.0)
[x, y]
end