728x90
반응형
728x170
■ Point 클래스를 사용해 다각형 내부 위치 여부를 구하는 방법을 보여준다.
▶ Point 클래스 : 다각형 내부 위치 여부 구하기 예제 (C#)
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);
▶ Point 클래스 : 다각형 내부 위치 여부 구하기 (C#)
#region 다각형 내부 위치 여부 구하기 - IsPointInPolygon(polygonPointEnumerable, point)
/// <summary>
/// 다각형 내부 위치 여부 구하기
/// </summary>
/// <param name="polygonPointEnumerable">다각형 포인트 열거 가능형</param>
/// <param name="point">포인트</param>
/// <returns>다각형 내부 위치 여부</returns>
public bool IsPointInPolygon(IEnumerable<Point> polygonPointEnumerable, Point point)
{
bool inside = false;
Point currentPoint = polygonPointEnumerable.Last();
foreach(Point polygonPoint in polygonPointEnumerable)
{
if((polygonPoint.X == point.X) && (polygonPoint.Y == point.Y))
{
return true;
}
if((polygonPoint.Y == currentPoint.Y) && (point.Y == currentPoint.Y))
{
if((currentPoint.X <= point.X) && (point.X <= polygonPoint.X))
{
return true;
}
if((polygonPoint.X <= point.X) && (point.X <= currentPoint.X))
{
return true;
}
}
if((polygonPoint.Y < point.Y) && (currentPoint.Y >= point.Y) || (currentPoint.Y < point.Y) && (polygonPoint.Y >= point.Y))
{
if(polygonPoint.X + (point.Y - polygonPoint.Y) / (currentPoint.Y - polygonPoint.Y) * (currentPoint.X - polygonPoint.X) <= point.X)
{
inside = !inside;
}
}
currentPoint = polygonPoint;
}
return inside;
}
#endregion
728x90
반응형
그리드형(광고전용)
'C# > WinForm' 카테고리의 다른 글
[C#/WINFORM/.NET6] DataGridView 클래스 : 단일 선택 행 삭제하기 (0) | 2022.08.30 |
---|---|
[C#/WINFORM/.NET6] DataGridView 클래스 : 셀 색상 설정하기 (0) | 2022.08.25 |
[C#/WINFORM] Control 클래스 : 컨트롤 이벤트 제거하기 (0) | 2022.08.24 |
[C#/WINFORM/.NET6] Point 클래스 : 다각형 내부 위치 여부 구하기 (0) | 2022.08.20 |
[C#/WINFORM/.NET6] Point 클래스 : 다각형 내부 위치 여부 구하기 (0) | 2022.08.20 |
[C#/WINFORM/.NET6] Point 클래스 : 다각형 내부 위치 여부 구하기 (0) | 2022.08.20 |
[C#/WINFORM] ListView 클래스 : RetrieveVirtualItem 이벤트를 사용해 대용량 데이터 조회하기 (0) | 2022.07.20 |
[C#/WINFORM] 고품질 이미지 크기 변경하기 (0) | 2022.07.05 |
[C#/WINFORM/.NET6] FontFamily 클래스 : GenericMonospace 정적 속성을 사용해 고정 폭 폰트 만들기 (0) | 2022.07.04 |
[C#/WINFORM/.NET6] Application 클래스 : ProductVersion 정적 속성을 사용해 프로그램 버전 구하기 (0) | 2022.06.21 |
댓글을 달아 주세요