//РИсуем нижнюю границу, отправляясь в точку, угол которой является наименьшим(с помощью Atan2) static double LowerBorder(int[,] dots, int N, GraphPanel graph, int start_index) { int min_X = dots[start_index, 0], min_Y = dots[start_index, 1], num_of_last = 0; int starting_X = dots[start_index, 0], starting_Y = dots[start_index, 1]; double min_angle = 0, final_distance = 0;; while (num_of_last + 1 < N) { min_angle = Tangle(starting_X, starting_Y, dots[num_of_last + 1, 0], dots[num_of_last + 1, 1]); for (int i = num_of_last + 1; i < N; i++) { double radians = Tangle(starting_X, starting_Y, dots[i, 0], dots[i, 1]); if (radians <= min_angle) { min_angle = radians; min_X = dots[i, 0]; min_Y = dots[i, 1]; num_of_last = i; } } final_distance += DistanceTo(starting_X, starting_Y, min_X, min_Y); graph.putLine(starting_X, starting_Y, min_X, min_Y); starting_X = min_X; starting_Y = min_Y; Console.WriteLine("Выбрана точка: " + starting_X + " " + starting_Y); } return(final_distance); }
//Здесь мы прочерчиваем первую вертикальную линию (если есть) и возвращаем ее длину static int VerticalLine(int x, int y1, int y2, GraphPanel graph) { graph.putLine(x, y1, x, y2); return(Math.Abs(y2 - y1)); }