// Проверяет, можно ли провести данную линию 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); }
// Поиск ближайшей к заданной точке вершины полигона. Если понадобится, можно оптимизировать до 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); }