2017-11-16 16 views
0

緯度/経度のペアのリストから、長いです 。ポイント42、-72は、42、-71に最も近く、したがって出力= 42であり、これは、{42_-72,42、-75,43、-76}および所定のポイント42のリストに対して、-72、 > 42、-72。緯度/経度を指定すると、Cの緯度/経度のリストから最も近い緯度/経度のペアが見つかります。

+1

こんにちは!あなたはこれまで何のコードを持っていますか?それに何の問題がありますか? – tehDorf

+0

ネクタイの場合に緯度または経度の優先順位を設定しますか?または両方を返すのですか? –

+0

グラフ上のポイントとしてそれらを踏み、ターゲットポイントから各候補ポイントまでの距離を計算し、次に最短距離を持つポイントを返すことは論理的です。 –

答えて

0

まず、2点間の距離を取得できるメソッドを作成します。いずれの直角三角形でもa^2 + b^2 = c^2、点P1から点P2までの距離がcであるとすると、XYの座標を知っているので、この式を使用して2点間の距離を求めることができます。距離aP2.XP1.Xとの間の差であり、距離bP2.YP1.Yとの差である:

private static double GetDistance(Point a, Point b) 
{ 
    return Math.Sqrt(Math.Pow(b.X - a.X, 2) + Math.Pow(b.Y - a.Y, 2)); 
} 

その後、我々は、目標点を取り込む方法と候補点とリターンのリストを作成することができターゲットからの最短距離の候補:

private static Point GetClosestPoint(Point target, List<Point> candidates) 
{ 
    if (candidates == null) throw new ArgumentNullException(nameof(candidates)); 
    if (!candidates.Any()) throw new ArgumentException("The candidates list is empty."); 

    var minDistance = double.MaxValue; 
    var closestPoint = new Point(); 

    foreach (var candidate in candidates) 
    { 
     var distance = GetDistance(target, candidate); 
     if (distance > minDistance) continue; 
     minDistance = distance; 
     closestPoint = candidate; 
    } 

    return closestPoint; 
}