Это просто перебирает точки и использует теорему Пифагора для поиска расстояния и отслеживания наилучшего соответствия.
В основном (псевдокод - это было некоторое время, так как я работал в C#):
struct Point
{
public int x;
public int y;
};
var fixed = new Point(142,42);
const int numberOfPoints = 20; // arbitrary number
List<Point> points = new List<Point>(numberOfPoints);
var random = new Random();
for(int i = 0; i < numberOfPoints; ++i)
{
int x = random.Next(-200,200);
int y = random.Next(-200,200);
points.Add(new Point(x,y));
}
Point closestPoint = null;
float closestDistanceSquared = float.Max;
/// find closest point to fixed
foreach(var point in points)
{
var distanceSquared = Math.Pow(point.x - fixed.x,2) + Math.Pow(point.y - fixed.y,2);
if (distanceSquared < closestDistanceSquared)
{
closestDistanceSquared = distanceSquared;
closestPoint = point;
}
}
/// closestPoint is now a reference to the closest to fixedPoint
/// distance between the two is Math.Sqrt(distanceSquared)
Я использую квадрат расстояния, а не извлекая квадратный корень внутри цикла, так как это немного более эффективным и достаточным для дистанционные сравнения.
Стоит отметить, что вы можете сделать это, создавая точки, а не отдельные петли.
Вы еще что-нибудь попробовали? Вы даже запустили для этого алгоритм? –
Довольно уверен, что ваша проблема больше связана с математикой, чем с кодом, в этом случае это лучше подходит для 'maths.stackexchange', однако для вычисления расстояния между двумя точками pythagoras должно быть достаточно, вот сообщение: http: // math.stackexchange.com/q/367503/127609 – DrCopyPaste
Если это математика: http://en.wikipedia.org/wiki/Euclidean_distance#Two_dimensions – displayname