> 백엔드 개발 > C++ > C#에서 점이 다각형 내에 있는지 확인하는 방법은 무엇입니까?

C#에서 점이 다각형 내에 있는지 확인하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2025-01-04 09:56:39
원래의
685명이 탐색했습니다.

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

다각형의 C# 점: 점이 다각형 내에 있는지 확인

점이 다각형 내에 있는지 확인하려는 시나리오를 고려합니다. 다각형의 경계. WinForms를 사용하여 C#에서 이 작업을 수행하려면 다음 단계를 따르세요.

  1. 다각형 경계 계산: 다각형 사이의 최소 및 최대 X 및 Y 좌표를 식별하여 다각형의 경계 상자를 설정합니다. 정점.
  2. 점이 경계 내에 있는지 확인: 확인 주어진 점이 다각형의 경계 상자 내에 있는 경우. 그렇지 않다면 점이 확실히 다각형 외부에 있는 것입니다.
  3. 다각형의 점 포함 확인: 점이 실제로 다각형 모양 내에 있는지 확인하려면 Point-in- 다각형 알고리즘 기법.

그러한 알고리즘 중 하나가 Ray입니다. 다음 단계를 포함하는 교차 방법:

a. 주어진 점에서 무한대로 수평 광선을 그린다고 상상해 보세요.

b. 광선이 다각형의 가장자리와 교차하는 횟수를 셉니다.

c. 개수가 홀수이면 점이 다각형 내부에 있는 것입니다. 짝수인 경우에도 폴리곤 외부에 있습니다.

다음은 C#에서 Ray Crossing 알고리즘을 구현한 예입니다.

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으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿