첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
728x90
반응형
728x170

▶ Point 클래스 : 다각형 내부 위치 여부 구하기 예제

Point[] polygonPointArray = new Point[]
{
    new Point(100, 100),
    new Point(150, 130),
    new Point(120, 170),
    new Point(90 , 150),
    new Point(100, 100)
};

Point point = new Point(100, 150);

bool result = IsPointInPolygon(polygonPointArray, point);

 

300x250

 

▶ Point 클래스 : 다각형 내부 위치 여부 구하기

#region 다각형 내부 위치 여부 구하기 - IsPointInPolygon(polygonPointArray, point)

/// <summary>
/// 다각형 내부 위치 여부 구하기
/// </summary>
/// <param name="polygonPointArray">다각형 포인트 배열</param>
/// <param name="point">포인트</param>
/// <returns>다각형 내부 위치 여부</returns>
public bool IsPointInPolygon(Point[] polygonPointArray, Point point)
{
    Point point1;
    Point point2;
    bool  inside = false;

    if(polygonPointArray.Length < 3)
    {
        return inside;
    }

    Point oldPoint = new Point
    (
        polygonPointArray[polygonPointArray.Length - 1].X,
        polygonPointArray[polygonPointArray.Length - 1].Y
    );

    for(int i = 0; i < polygonPointArray.Length; i++)
    {
        Point newPoint = new Point(polygonPointArray[i].X, polygonPointArray[i].Y);

        if(newPoint.X > oldPoint.X)
        {
            point1 = oldPoint;
            point2 = newPoint;
        }
        else
        {
            point1 = newPoint;
            point2 = oldPoint;
        }

        if((newPoint.X < point.X) == (point.X <= oldPoint.X) && (point.Y - (long) point1.Y)*(point2.X - point1.X) < (point2.Y - (long) point1.Y)*(point.X - point1.X))
        {
            inside = !inside;
        }

        oldPoint = newPoint;
    }

    return inside;
}

#endregion
728x90
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요