Point C# dans un polygone : déterminer si un point se trouve dans un polygone
Considérez le scénario dans lequel vous souhaitez déterminer si un point existe dans les limites d'un polygone. Pour accomplir cette tâche en C# à l'aide de WinForms, suivez ces étapes :
L'un de ces algorithmes est la méthode Ray Crossing, qui implique les étapes suivantes :
a. Imaginez dessiner des rayons horizontaux du point donné jusqu'à l'infini.
b. Comptez le nombre de fois que le rayon coupe les bords du polygone.
c. Si le décompte est impair, le point est à l’intérieur du polygone ; s'il est pair, il est à l'extérieur du polygone.
Voici un exemple d'implémentation de l'algorithme Ray Crossing en 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; } }
Cette implémentation garantit précision et efficacité tout en déterminant si un point est à l'intérieur un polygone.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!