■ Point 클래스를 사용해 다각형 내부 위치 여부를 구하는 방법을 보여준다.
▶ Point 클래스 : 다각형 내부 위치 여부 구하기 예제 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
#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 |