给定一张平面(正方形或矩形全景)图片,例如6000像素x 3000像素(横向360度,纵向180度)。如果我想将x = -10,y = -10转换为球面坐标(pan / tilt或垂直/水平偏移量),其中图像中心表示水平/垂直偏移量为0,应该怎么办?
是否可能计算这个问题?或者您需要其他变量,例如半径,距离或z坐标?
编辑:目前为止我所拥有的:
如果我在第一个方法中输入0,0,得到的结果是-180,90,这是正确的。但如果我设置3000,0,我期望得到的是0,90,但实际上得到的是7,90。对于另一种公式(xy转换为球面坐标),情况也是如此。当我输入0,0时,我期望得到的是3000,1500,但实际上得到的是2880x1440像素。可能有一些小偏差,因为我是直线计算。
更新:答案
我已经更新了下面的答案,以考虑度数可能大于360度的情况。我使用模运算来解决这个问题。
是否可能计算这个问题?或者您需要其他变量,例如半径,距离或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,但实际上得到的是2880x1440像素。可能有一些小偏差,因为我是直线计算。
更新:答案
我已经更新了下面的答案,以考虑度数可能大于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