2017-08-15 1 views
0

C# débutant ici, en travaillant avec Grasshopper for Rhino donc certains types d'objets sont un peu étranges.Trouver n nombre de points les plus proches dans une liste

J'essaie actuellement de trouver n nombre de points les plus proches dans une liste à un point donné. Je suis capable de trouver le point le plus proche en utilisant la fonction suivante, mais je ne peux pas l'adapter pour récupérer plusieurs points les plus proches. Comment est-ce que j'adapterais ce code pour la fonction ci-dessous, où n est le nombre de points les plus proches à trouver?

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

    } 

Répondre

0

Vous pouvez utiliser LINQ pour obtenir ce résultat:

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); 

Notez que dans ce cas, l'autre méthode devient:

public Vec3D ClosestPoint(Vec3D a, List<Vec3D>points) => 
    ClosestPoints(a, points, 1).FirstOrDefault();