Maison > développement back-end > C++ > Comment déterminer si un point se trouve dans un polygone en C# ?

Comment déterminer si un point se trouve dans un polygone en C# ?

Mary-Kate Olsen
Libérer: 2025-01-04 09:56:39
original
690 Les gens l'ont consulté

How to Determine if a Point Lies Within a Polygon in C#?

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 :

  1. Calculer les limites du polygone : établissez le cadre de délimitation du polygone en identifiant les coordonnées X et Y minimales et maximales parmi ses sommets.
  2. Déterminer si le point est dans les limites : Vérifiez si le point donné se trouve dans le cadre de délimitation du polygone. Sinon, le point est définitivement à l'extérieur du polygone.
  3. Vérifiez l'inclusion du point dans le polygone : Pour déterminer si le point est réellement dans la forme du polygone, utilisez le Point-in- Technique d'algorithme Polygon.

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;
    }
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal