예제 #1
0
        //РИсуем нижнюю границу, отправляясь в точку, угол которой является наименьшим(с помощью 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);
        }
예제 #2
0
 //Здесь мы прочерчиваем первую вертикальную линию (если есть) и возвращаем ее длину
 static int VerticalLine(int x, int y1, int y2, GraphPanel graph)
 {
     graph.putLine(x, y1, x, y2);
     return(Math.Abs(y2 - y1));
 }