Нахождение n количества ближайших точек в списке
Здесь C# новичок, работающий с Grasshopper для Rhino, поэтому некоторые типы объектов немного странные.
В настоящее время я пытаюсь найти количество ближайших точек в списке к данной точке. Я могу найти ближайшую точку, используя следующую функцию, но не могу адаптировать ее для получения нескольких ближайших точек.
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){
}
1 ответ
Вы можете использовать Linq, чтобы получить такой результат:
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();