给定一个平面(等矩形全景)图像,例如 6000 像素 x 3000 像素(展开 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