ホームページ > バックエンド開発 > 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. ポイントが範囲内にあるかどうかを判断しますBounds: 指定された点がポリゴンの境界ボックス内にあるかどうかを確認します。そうでない場合、そのポイントは間違いなくポリゴンの外側にあります。
  3. ポリゴン内のポイントの包含をチェック: ポイントが実際にポリゴンの形状内にあるかどうかを判断するには、ポイントインPolygon アルゴリズム技術。

そのようなアルゴリズムの 1 つが Ray です。 Crossing メソッド。これには次の手順が含まれます。

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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート