Ich würde beginnen, indem Sie eine Methode erstellen, die den Abstand zwischen zwei Punkten erhalten kann. Wenn wir davon ausgehen, dass in einem beliebigen rechtwinkligen Dreieck a^2 + b^2 = c^2
und der Abstand vom Punkt P1
zum Punkt P2
c
ist, können wir diese Formel verwenden, um den Abstand zwischen zwei Punkten zu erhalten, da wir ihre Koordinaten X
und Y
kennen. Der Abstand a
ist der Unterschied zwischen P2.X
und P1.X
und der Abstand b
ist der Unterschied zwischen P2.Y
und P1.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));
}
Dann können wir eine Methode erstellen, die in einem Zielpunkt und eine Liste der Kandidatenpunkte und kehrt nimmt der Kandidat, der die kürzeste Entfernung vom Ziel ist:
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;
}
Hallo! Welchen Code hast du bisher und welche Schwierigkeiten hast du damit? – tehDorf
Möchten Sie im Falle eines Unentschiedens den Längen- oder Breitengrad priorisieren? Oder möchtest du beides zurückgeben? –
Es scheint mir logisch, dass Sie sie als Punkte auf einer Grafik verfolgen und die Entfernung von Ihrem Zielpunkt zu jedem Kandidatenpunkt berechnen und dann den Punkt zurückgeben, der die kürzeste Entfernung hat. –