■ 다각형 시계 방향 여부 구하기

------------------------------------------------------------------------------------------------------------------------

using System.Collections.Generic;

using System.Drawing;

 

#region 부호 있는 다각형 영역 구하기 - GetSignedPolygonArea(sourcePointList)

 

/// <summary>

/// 부호 있는 다각형 영역 구하기

/// </summary>

/// <param name="sourcePointList">소스 포인트 리스트</param>

/// <returns>부호 있는 다각형 영역</returns>

public float GetSignedPolygonArea(List<PointF> sourcePointList)

{

    int pointCount = sourcePointList.Count;

 

    PointF[] pointArray = new PointF[pointCount + 1];

 

    sourcePointList.CopyTo(pointArray, 0);

 

    pointArray[pointCount] = sourcePointList[0];

 

    float area = 0;

 

    for(int i = 0; i < pointCount; i++)

    {

        area += (pointArray[i + 1].X - pointArray[i].X) * (pointArray[i + 1].Y + pointArray[i].Y) / 2;

    }

 

    return area;

}

 

#endregion

#region 다각형 시계 방향 여부 구하기 - IsPolygonClockwise(sourcePointList)

 

/// <summary>

/// 다각형 시계 방향 여부 구하기

/// </summary>

/// <param name="sourcePointList">소스 포인트 리스트</param>

/// <returns>다각형 시계 방향 여부</returns>

public bool IsPolygonClockwise(List<PointF> sourcePointList)

{

    return (GetSignedPolygonArea(sourcePointList) < 0);

}

 

#endregion

------------------------------------------------------------------------------------------------------------------------

Posted by 사용자 icodebroker

댓글을 달아 주세요