public static double getLongitud(Punto2d[] trayecto)
            {
                double resultado = 0;
                for (int i = 0; i < trayecto.Length - 1; i++){
                    resultado += trayecto[i].distancia(trayecto[i+1]);
                }

                return resultado;
            }
            public static void getLongitudInicioFin(Punto2d[] trayecto, out double longitud, out Punto2d principio, out Punto2d final)
            {
                longitud = getLongitud(trayecto);
                principio = new Punto2d(trayecto[0].x, trayecto[0].y, Color.Rojo);
                final = new Punto2d(trayecto.Last().x, trayecto.Last().y, Color.Negro);

                Console.WriteLine("Longitud: {0}", longitud);
                Console.WriteLine("Punto inicial: {0}", principio);
                Console.WriteLine("Longitud: {0}", final);
            }
            public static Punto2d[] generaTrayecto(int longitud = 10, double laX = 0.0, double laY = 0.0, double incX = 1.0, double incY = 1.0)
            {
                Punto2d[] trayecto = new Punto2d[longitud];
                trayecto[0] = new Punto2d(laX, laY, Color.Rojo);

                for (int i = 0; i < longitud - 1; i++){
                    incrementaDosDouble(ref laX, ref laY, incX, incY);
                    trayecto[i] = new Punto2d(laX, laY, Color.Rojo);
                }
                return trayecto;
            }
        static void Main(string[] args)
        {
            // LONGITUD
            Punto2d[] trayecto = { new Punto2d(1, 2, Color.Negro), new Punto2d(4, 2, Color.Negro), new Punto2d(4, 10, Color.Negro)};
            Console.WriteLine("LONGITUD: {0}", CalculosTrayectos.getLongitud(trayecto));

            //LONGITUD INICIO FIN
            double longitud = 10;
            Punto2d inicial = new Punto2d(1,1,Color.Transparente);
            Punto2d final = new Punto2d(2,2,Color.Transparente);
            CalculosTrayectos.getLongitudInicioFin(trayecto, out longitud, out inicial, out final);
        }
 public static void muestraTrayecto(Punto2d[] trayecto, bool? mostrar)
 {
     if (mostrar == true)
     {
         Punto2d[] primerCuadrante = (from punto in trayecto where punto.x >= 0 && punto.y >= 0 select punto).ToArray();
         Console.WriteLine("PRIMER CUADRANTE:");
         foreach (Punto2d p in primerCuadrante)
         {
             Console.WriteLine(p);
         }
     }
     else
     {
         Console.WriteLine("TODOS LOS PUNTOS:");
         foreach (Punto2d p in trayecto)
         {
             Console.WriteLine(p);
         }
     }
 }
        static void Main(string[] args)
        {
            //DISTANCIA ENTRE PUNTOS
            Punto2d a = new Punto2d(10, 20, Color.Negro);
            Punto2d b = new Punto2d(20, 10, Color.Rojo);

            Console.WriteLine("Punto A: {0} || Punto B: {1}", a.ToString(), b.ToString());
            Console.WriteLine("La distancia entre el punto A y el punto B es => {0}", a.distancia(b));

            //INTERSECCIÓN RECTA
            Recta y0 = new Recta(50, 60);
            Recta y1 = new Recta(60, 50);

            Console.WriteLine("Intersección de las rectas se produce en el punto: {0}", y0.interseccionRecta(y1));

            //PERPENDICULAR DE UN PUNTO
            Console.WriteLine("La perpendicular del punto A es: {0}", y0.perpendicular(a));

            //DISTANCIA ENTRE RECTA Y PUNTO
            Console.WriteLine("Distancia entre la perpendicular y el punto donde intersecta: {0}", y0.distanciaEntreRectaYPunto(a));
        }
 /// <summary>
 /// Distancia entre 2 puntos
 /// </summary>
 /// <param name="a">Punto al que llegar</param>
 /// <returns></returns>
 public double distancia(Punto2d a)
 {
     return Math.Sqrt((this.x - a.x) * (this.x - a.x) + (this.y - a.y) * (this.y - a.y));
 }
 /// <summary>
 /// Método para calcular la perpendicular de un punto, devuelve una recta(perpendicular)
 /// </summary>
 /// <param name="punto">Punto desde el que se obtiene la recta perpendicular</param>
 /// <returns>Una recta</returns>
 public Recta perpendicular(Punto2d punto)
 {
     double nuevaM = (-1 / this.m);
     double nuevaN = ((punto.y + (1 / this.m) * punto.x));
     return new Recta(nuevaM, nuevaN);
 }
 /// <summary>
 /// Método para calcular la distancia entre una recta y un punto
 /// </summary>
 /// <param name="a">a es el Punto desde el que se calculara la distancia hacia la recta, para ello hacemos uso
 /// de los anteriores métodos
 /// </param>
 /// <returns>Retorna un valor doble, que será la distancia entre dicha recta y punto</returns>
 public double distanciaEntreRectaYPunto(Punto2d a)
 {
     Recta rectaAux = perpendicular(a);
     Punto2d interseccion = interseccionRecta(rectaAux);
     return a.distancia(interseccion);
 }
 public Circunferencia tangenteCentro(Punto2d punto)
 {
     //Recta r = new Recta(centro.x, centro.y);
     //r.perpendicular(punto);
     return null;
 }
 public Circunferencia(Punto2d elCentro, double elRadio)
 {
     centro = elCentro;
     radio = elRadio;
 }