C#-Punkt im Polygon: Bestimmen, ob ein Punkt innerhalb eines Polygons liegt
Stellen Sie sich das Szenario vor, in dem Sie bestimmen möchten, ob ein Punkt innerhalb eines Polygons vorhanden ist die Grenzen eines Polygons. Um diese Aufgabe in C# mit WinForms auszuführen, führen Sie die folgenden Schritte aus:
Ein solcher Algorithmus ist die Ray Crossing-Methode, was die folgenden Schritte umfasst:
a. Stellen Sie sich vor, Sie zeichnen horizontale Strahlen von einem bestimmten Punkt bis ins Unendliche.
b. Zählen Sie, wie oft der Strahl die Kanten des Polygons schneidet.
c. Wenn die Anzahl ungerade ist, liegt der Punkt innerhalb des Polygons; wenn gerade, liegt es außerhalb des Polygons.
Hier ist eine Beispielimplementierung des Ray Crossing-Algorithmus in C#:
using System; using System.Collections.Generic; using System.Drawing; public class Polygon { List<PointF> vertices = new List<PointF>(); public bool Contains(PointF point) { if (IsOutsideBoundingBox(point)) return false; int intersectionCount = 0; for (int i = 0; i < vertices.Count; i++) { int j = (i + 1) % vertices.Count; PointF a = vertices[i], b = vertices[j]; if ((a.Y > point.Y && b.Y <= point.Y) || (a.Y <= point.Y && b.Y > point.Y)) { double slope = (double)(b.Y - a.Y) / (b.X - a.X); if (point.X < a.X + (point.Y - a.Y) / slope) intersectionCount++; } } return intersectionCount % 2 == 1; } private bool IsOutsideBoundingBox(PointF point) { return point.X < Xmin || point.X > Xmax || point.Y < Ymin || point.Y > Ymax; } }
Diese Implementierung gewährleistet Genauigkeit und Effizienz bei der Bestimmung, ob ein Punkt innerhalb liegt ein Polygon.
Das obige ist der detaillierte Inhalt vonWie kann in C# festgestellt werden, ob ein Punkt innerhalb eines Polygons liegt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!