Example #1
0
        /// <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;
        }