首頁 > 後端開發 > C++ > 如何在 C# 中確定點是否位於多邊形內?

如何在 C# 中確定點是否位於多邊形內?

Mary-Kate Olsen
發布: 2025-01-04 09:56:39
原創
690 人瀏覽過

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

多邊形中的C# 點:確定點是否位於多邊形內

考慮您想要確定多邊形內是否存在點的場景多邊形的邊界。若要使用WinForms 在C# 中完成此任務,請依照下列步驟操作:

  1. 計算多邊形邊界:透過辨識最小和最大X 和Y 座標來建立多邊形的邊界框它的頂點。
  2. 決定點是否在邊界內:驗證是否給定點位於多邊形的邊界框內。如果不是,則該點肯定在多邊形之外。
  3. 檢查多邊形中的點包含:要確定該點是否實際上在多邊形的形狀內,請使用Point-in- Polygon 演算法技術。

這樣的演算法之一是 Ray交叉方法,涉及以下步驟:

a.想像一下從給定點到無窮遠繪製水平射線。

b。計算射線與多邊形邊緣相交的次數。

c.如果計數為奇數,則該點在多邊形內部;如果是偶數,則位於多邊形之外。

以下是用 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;
    }
}
登入後複製

此實現在確定點是否在多邊形內的同時確保了準確性和效率一個多邊形。

以上是如何在 C# 中確定點是否位於多邊形內?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板