2017-08-15 16 views
0

C#beginnerここでは、Grasshopper for Rhinoを使っていますので、いくつかのオブジェクトタイプは少し奇妙です。リスト内のn個の最近傍点を見つける

現在、指定されたポイントまでリスト内で最も近いn個のポイントを検索しようとしています。私は、次の関数を使って最も近い点を見つけることができますが、複数の最も近い点を取得するためにそれを適応させることはできません。

public Vec3D ClosestPoint(Vec3D a, List<Vec3D>points){ 
    List<float> distanceList = new List<float>(); 
    for (int i = 0; i < points.Count(); i++){ 
    float distanceFloat = a.distanceTo(points[i]); 
    distanceList.Add(distanceFloat); 
    } 
    int smallestIndex = distanceList.IndexOf(distanceList.Min()); 
    return points[smallestIndex]; 
} 

このコードを以下の関数にどのように適用すればよいでしょうか?ここでnは最も近い点の数です。

public Vec3D ClosestPoints(Vec3D a, List<Vec3D>points, int n){ 

    } 
あなたはその結果を取得するためのLINQを使用することができます

答えて

0

:この場合には、他の方法になることを

public IEnumerable<Vec3D> ClosestPoints(Vec3D a, List<Vec3D>points, int n) => 

    points.Select(point => new 
    { 
    point = point, 
    distance = a.distanceTo(point) 
    }). 
    OrderBy(x = x.distance). 
    Take(n). 
    Select(x => x.point); 

注:

public Vec3D ClosestPoint(Vec3D a, List<Vec3D>points) => 
    ClosestPoints(a, points, 1).FirstOrDefault(); 
関連する問題