2013-06-28 5 views
1

예 : 6000px x 3000px (360도 넓이 및 180도 펼쳐짐)의 평평한 (등변 각 파노라마) 이미지가 제공됩니다. 예를 들어 x = -10, y = -10을 구 좌표계 (팬/틸트 또는 수직/수평 오프셋)로 변환하려면 어떻게해야합니까? 여기서 이미지의 중심은 수평/수직 오프셋 0을 의미합니까?x/y 좌표를 구형으로 변환

이것을 계산할 수 있습니까? 아니면 반경, 거리 또는 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을 기대하지만 790을 얻습니다. 다른 수식 (구형으로 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 
+0

평면 이미지를 구형에 매핑 하시겠습니까? –

+0

예, 동등한 크기의 평면 이미지입니다. https://en.wikipedia.org/wiki/Equirectangular_projection – Jareish

+0

wikipedia의 수식을 사용할 수없는 이유는 무엇입니까? –

답변

2

귀하의 방정식은 수학적으로 정확하지만, (그리고 대부분의 언어에서) 루비의 정수를 분할 할 때, 당신은 나머지를 잃게됩니다 : 나는이 문제를 해결하기 위해 모듈을 사용할 수 있습니다. 예를 들어 6000/360 = 16.666 ... 실생활에서 루비에서는 16이됩니다. 이러한 모든 반올림 오류로 인해 최종 결과에서 오류가 발생합니다. 이 문제를 피하기위한 트릭은 산술에서 숫자의 일부를 Fixnums 대신 Float으로 만드는 것입니다. 시도해보십시오 :

def self.translate_xy_to_spherical(x, y) 
    h = (x/(6000/360.0)) - 180 
    v = ((y/(3000/180.0)) - 90)/- 1 
    [h, v] 
end 

def self.translate_spherical_to_xy(h, v) 
    x = ((h + 180) * (6000/360.0)) 
    y = ((v * -1) + 90) * (3000/ 180.0) 

    [x, y] 
end 
+0

고마워요! 그거였다! 나는 인터넷을 통해 발견 된 wiki 기사에 대해 여전히 혼란 스럽다. 여기서 그들은 지표와 모든 종류의 각도 ​​계산을 사용하고 지구의 반경까지 고려한다. 이것이 올바른 방법입니까?> 아니면 여전히 직선으로 계산합니까? – Jareish

+0

귀하의 의견에 링크 된 위키피디아의 첫 번째 기사는 실제 지구의 위도 - 경도와 지구 표면의 평평한 등각 투영법에 대한 x-y 좌표를 2 차원 평면 *지도 *로 변환합니다. geom.uiuc에 대한 링크입니다.edu 페이지는 위도 - 경도 - 실제 지구의 * 실제 지구 *에 대한 지구의 중심으로부터의 거리 *와 실제 공간 *에서의 직교 좌표 xyz 사이의 변환을 제공합니다. 원점은 지구의 중심에 있습니다. 적도에서 본 자오선을 지나는 x 축과 지구의 극을 통과하는 z 축 ... –

+0

... 그래서이 두 가지 번역은 완전히 다릅니다. 첫 번째 세트는 * 2 차원 *이며, 지구의 * 표면 *과 *지도 *의 데카르트 좌표 사이에 있고, 두 번째 세트는 * 3 차원 *이며, 점을 나타 내기 위해 두 가지 방법으로갑니다 3-d 공간에서 두 좌표계가 모두 지구 중심 좌표계를 사용합니다. –

관련 문제