Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk menentukan sama ada titik terletak dalam poligon dalam C#?

Bagaimana untuk menentukan sama ada titik terletak dalam poligon dalam C#?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-04 09:56:39698semak imbas

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

Titik C# dalam Poligon: Menentukan sama ada Titik Terletak dalam Poligon

Pertimbangkan senario di mana anda ingin menentukan sama ada titik wujud dalam sempadan poligon. Untuk menyelesaikan tugas ini dalam C# menggunakan WinForms, ikuti langkah berikut:

  1. Kira Sempadan Poligon: Wujudkan kotak sempadan untuk poligon dengan mengenal pasti koordinat X dan Y minimum dan maksimum antara bucunya.
  2. Tentukan sama ada Titik Dalam Had: Sahkan sama ada titik yang diberikan terletak dalam kotak sempadan poligon. Jika tidak, titik itu pasti berada di luar poligon.
  3. Kemasukan Titik Semak dalam Poligon: Untuk menentukan sama ada titik itu sebenarnya dalam bentuk poligon, gunakan Titik-dalam- Poligon teknik algoritma.

Salah satu algoritma tersebut ialah Ray Kaedah silang, yang melibatkan langkah-langkah berikut:

a. Bayangkan melukis sinar mendatar dari titik yang diberikan kepada infiniti.

b. Kira bilangan kali sinar bersilang dengan tepi poligon.

c. Jika kiraan adalah ganjil, titik berada di dalam poligon; jika genap, ia berada di luar poligon.

Berikut ialah contoh pelaksanaan algoritma Ray Crossing dalam 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;
    }
}

Pelaksanaan ini memastikan ketepatan dan kecekapan semasa menentukan sama ada titik berada dalam lingkungan poligon.

Atas ialah kandungan terperinci Bagaimana untuk menentukan sama ada titik terletak dalam poligon dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn