2010-11-18 4 views
1

(www.movable-type.co.uk/scripts/latlong.html)의 수식을 사용하여 시작 지점을 반환하는 대상 지점을 반환하려고합니다. 포인트, 거리 및 베어링. 39 ° 33'28 "의 N : 나는 D, st_lat 및 웹 사이트에서 베어링을 입력하면vincenty 수식을 사용할 때 잘못된 계산이 계속됩니다.

int radius_km = 6371; 
double d = 74.02; 
double st_lat = 39.4450; 
st_lat = Math.toRadians(st_lat); 
double bearing = 106.1607; 
bearing = Math.toRadians(bearing); 

double end_lat = Math.asin(Math.sin(st_lat)*Math.cos(d/radius_km) + 
      Math.cos(st_lat)*Math.sin(d/radius_km)*Math.cos 
      (bearing)); 

end_lat = Math.toDegrees(end_lat); 

, 나는이 얻을 :이 내 값입니다. 위의 코드 (웹 사이트에서 복사 한 코드)를 사용하면 다음과 같이 나타납니다. 39.25679699255662.

는 I은 주위보다 보면서 누군가 제산 소수 양 반환하지 않을 것을, 그래서으로 분할 대체 :

BigDecimal distance = new BigDecimal("74.02"); 
BigDecimal strradius = new BigDecimal("6371"); 
BigDecimal d2 = distance.divide(strradius, 6, RoundingMode.HALF_EVEN); 
double d = d2.doubleValue(); 

하고 화학식 변경 :

end_lat=Math.asin(Math.sin(st_lat)* 
Math.cos(d)+Math.cos(st_lat)*Math.sin(d)*Math.cos(bearing)); 

대답 I 지금은 39.25680143864117입니다. 나는 뭔가를 놓쳤다 고 확신하지만 계산의 각 단계를 거쳐서 내가 어디에 있는지 알 수 없다. 아무도이 작업을 수행하는 방법에 대한 단계별 지침이 있습니까? 나는 그것을 매우 감사 할 것이다. 감사합니다. .

+0

왜 반지름이 정수입니까? –

+1

trig 기능을 사용하면 작은 거리가 너무 정확하지 않습니다 –

+0

무엇이 좋겠습니까? – Dave

답변

0

분/초에서 십진수로 올바르게 변환하고 있습니까?

학위에는 60 분, 분당 60 초가 있습니다. 출발 위도가 39.4450; 긍정적 인 것은 적도 북쪽을 의미한다고 가정합니다. 106.1607의 방위가 북쪽에서 시계 방향으로 측정된다고 가정하면; 남동쪽으로 여행한다는 뜻입니다.

당신은 웹 사이트에서 답이 39 ° 33'28 "N이라고 말했지만 이것을 10 진수로 변환하면 39+ (33 + 28/60)/60 = 39.5578과 같습니다. 이 결과는 출발점보다 높습니다. 즉, 남동쪽으로 여행 중이지만 북쪽으로 끝나는 것입니다.

아직 코드에서 수학을 들여다 보지 않았지만 손에서 벗어나는 것은 분/초에서 십진수로의 변환에 문제가 있다고 말할 수 있습니다.

+0

원래의 포스터가 분당 초당 변환을하지 않았다는 것을 감안할 때, 그가 참고로 사용하고있는 웹 사이트가 잘못되었다는 것이 문제입니까? 나는 그 웹 사이트를 스스로로드 할 수 없기 때문에 실제로 어떤 일을하는지 확인할 수 없다. – Chris

+0

웹 사이트가 분당 초 단위로 입력하고 10 진수로 입력하는 것으로 의심된다 ... 39 ° 44'50 " N 대신 39 ° 26'42 "N – aepryus

+0

아, 무슨 뜻인지 알 겠어. 확실히 가능합니다.나는 웹 사이트가 정수 나 그와 비슷한 것을 입력 값과 잘라내는 것과 같은 것이 었는지 궁금했다. – Chris

관련 문제