Heim > Backend-Entwicklung > C++ > Wie kann in C# festgestellt werden, ob ein Punkt innerhalb eines Polygons liegt?

Wie kann in C# festgestellt werden, ob ein Punkt innerhalb eines Polygons liegt?

Mary-Kate Olsen
Freigeben: 2025-01-04 09:56:39
Original
690 Leute haben es durchsucht

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

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:

  1. Polygongrenzen berechnen: Legen Sie den Begrenzungsrahmen für das Polygon fest, indem Sie die minimalen und maximalen X- und Y-Koordinaten ermitteln seine Eckpunkte.
  2. Bestimmen Sie, ob der Punkt innerhalb der Grenzen liegt: Überprüfen Sie, ob der angegebene Punkt liegt innerhalb des Begrenzungsrahmens des Polygons. Wenn nicht, liegt der Punkt definitiv außerhalb des Polygons.
  3. Punkteinbeziehung in Polygon prüfen: Um festzustellen, ob der Punkt tatsächlich innerhalb der Form des Polygons liegt, verwenden Sie die Funktion Punkt-in- Polygon-Algorithmustechnik.

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;
    }
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage