Beispiel #1
0
 // Проверяет, можно ли провести данную линию
 bool lineAllowed(LineD l)
 {
     for (int p = 0; p <= IP.Length; p++)
     {
         if (this[p].getSides().Any(side => l.intersects(side)))
         {
             return(false);
         }
     }
     return(true);
 }
Beispiel #2
0
        // Поиск ближайшей к заданной точке вершины полигона. Если понадобится, можно оптимизировать до O(log(N))
        public int closestVertex(Vertex point)
        {
            int    closestVertex = 0;
            double newDist, bestDist = double.PositiveInfinity;
            LineD  connection;
            var    sides = getSides();

            for (int i = 0; i < vert.Length; i++)
            {
                newDist    = vert[i] % point;
                connection = new LineD(point, vert[i]);
                if (newDist < bestDist && !sides.Any(s => connection.intersects(s)))
                {
                    bestDist      = newDist;
                    closestVertex = i;
                }
            }
            return(closestVertex);
        }