2016-08-11 5 views
-3

I 좌표 (같은 600-1000) 많은 개체가 예를 들어 :X 및 Y - 알고리즘

coordX - 16.88799654 
coordY - 53.452535636 

coordX - 16.78799652 
coordY - 53.1436346423 

coordX - 17.06546333 
coordY - 52.96543332 

..... 

예를 들어 사용자가 자신의 좌표 X와 Y를 추가

userX = 12.4669945 
userY = 52.234534536 

알고리즘을 작성하는 방법, 모든 객체의 목록에 가장 가까운 직선 객체를 얻는 방법, 아이디어가 있습니까?

+0

무엇을하려하십니까? – learner0000

+0

나는 버스 정류장의지도를 가지고 있으며, 사용자는 좌표를주고, 알고리즘은 가장 가까운 바스트 스톱을 찾는다. –

+1

원점에서 모든 점까지의 거리를 계산하고 가장 가까운 점을 선택하십시오. * 점 사이의 거리를 계산하는 방법을 묻지 마십시오. – Andreas

답변

0

좌표가 측지 (위도/경도)라고 가정하므로 유클리드 거리가 정확하지 않습니다. 다음은 C#에서, 당신이 자바로 변환 할 수 있기를 바랍니다. 원하는 경우 단일 기능으로 단순화 할 수도 있습니다.

private const double EARTH_RADIUS_MI = 3959; //In statute miles 

    public static float Radians(double degrees) 
    { 
     return (float)(degrees * (Math.PI/180)); 
    } 

    public static double CalculateDistance(Coordinates fromPoint, Coordinates toPoint) 
    { 
     double dLat = Radians(toPoint.Latitude - fromPoint.Latitude); 
     double dLon = Radians(toPoint.Longitude - fromPoint.Longitude); 

     double a = Math.Sin(dLat/2) * Math.Sin(dLat/2) + 
      Math.Cos(Radians(fromPoint.Latitude)) * Math.Cos(Radians(toPoint.Latitude)) * 
      Math.Sin(dLon/2) * Math.Sin(dLon/2); 

     double c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a)); 

     return EARTH_RADIUS_MI * c; 
    } 
관련 문제