/// <summary> /// Определение самопересечения многоугольника /// </summary> /// <returns></returns> public bool IsSelfIntersection() { if (pnts.Count < 3) throw new Exception("Точек в полигоне должно быть минимум 3"); if (pnts.Count == 3) return false; Vector v1 = new Vector(), v2 = new Vector(); for (var i = 0; i < pnts.Count - 2; i++) { v1.Begin = pnts[i]; v2.End = pnts[i + 1]; for (var j = i + 2; j < pnts.Count; j++) { if (i == 0 && j == pnts.Count - 1) continue;// исключение пересечения первого вектора с последним v2.Begin = pnts[j]; v2.End = pnts[(j + 1) % pnts.Count]; if (v1.IsCross(v2)) return true; } } return false; }