Ejemplo n.º 1
0
        /// <summary>
        ///
        /// DIBUJA LA RECTA PERPENDICULAR AL PLANO QUE PASA POR EL PUNTO, MUESTRA LA ECUACION DE LA
        /// RECTA Y CONTINUA LA EXPLICACION
        ///
        /// </summary>
        ///
        private void ContinuarResolucion()
        {
            lbExplicacion.Text = "Usando el punto del que se quiere encontrar la distancia al plano como punto de paso, y el vector perpendicular al plano como vector paralelo, contruimos la ecuación de la recta que pasa por el punto y es perpendicular al plano.";

            // Mostrar la ecuacion de la recta en la etiqueta
            label1.Show();
            label1.Location  = new Point(btContinuar.Location.X + btContinuar.Width + 5, btContinuar.Location.Y);
            label1.Font      = new Font(label1.Font.FontFamily, 12);
            label1.BackColor = Color.Transparent;
            label1.TextAlign = ContentAlignment.MiddleLeft;
            label1.Text      = "Ecuaciones paramétricas de la recta:\n";
            foreach (Ecuacion e in recta.EcuacionesParametricas())
            {
                label1.Text += e.ToString() + "\n";
            }

            Racional distancia = plano.Distancia(punto);

            // Dibujar la recta
            Punto a = recta.SituacionPunto(distancia);
            Punto b = recta.SituacionPunto(-distancia);

            ventanagrafica.PintarLinea(a, b, Color.Red, 2);
            if (directa)
            {
                SeguirResolucion();
            }
            if (!directa)
            {
                ventanagrafica.Ventana.Invalidate();
            }
        }
Ejemplo n.º 2
0
 /// <summary>
 ///
 ///  PONE EL ATRIBUTO defecto A TRUE PARA QUE SE INICIE LA RESOLUCION CON LOS VALORES POR
 ///  DEFECTO
 ///
 /// </summary>
 ///
 private new void btDefecto_Click(object sender, EventArgs e)
 {
     btDefecto.Hide();
     tbFilas.Text = "3";
     orden        = 3;
     ConstruirMatriz();
     matrizracional    = new Racional[orden, orden];
     matriz[0, 0].Text = "5"; matrizracional[0, 0] = 5;
     matriz[0, 1].Text = "8"; matrizracional[0, 1] = 8;
     matriz[0, 2].Text = "7"; matrizracional[0, 2] = 7;
     matriz[1, 0].Text = "4"; matrizracional[1, 0] = 4;
     matriz[1, 1].Text = "6"; matrizracional[1, 1] = 6;
     matriz[1, 2].Text = "2"; matrizracional[1, 2] = 2;
     matriz[2, 0].Text = "7"; matrizracional[2, 0] = 7;
     matriz[2, 1].Text = "8"; matrizracional[2, 1] = 8;
     matriz[2, 2].Text = "1"; matrizracional[2, 2] = 1;
     if (!directa)
     {
         SeleccionarResolucion();
     }
     else if (directa)
     {
         MostrarResultado();
     }
 }
Ejemplo n.º 3
0
 /// <summary>
 ///
 /// CONVIERTE EL DECIMAL INTRODUCIDO EN RACIONAL, PASO A PASO
 ///
 /// </summary>
 ///
 private void ResolucionDecimal()
 {
     if (paso == 1)
     {
         int    indicecoma = tbFilas.Text.IndexOf(',');
         string digits     = tbFilas.Text.Substring(indicecoma + 1);
         digitosdecimales    = digits.Length;
         lbExplicacion.Text += "\nPara pasar a fracción este decimal aperiodico, multiplicamos el número por la potencia de 10 equivalente a la cantidad de digitos después de la coma. En este caso: " + digitosdecimales.ToString();
         label1.Show();
         numerad     = (long)(numero * Math.Pow(10, digitosdecimales));
         label1.Text = numero.ToString() + " * 10^" + digitosdecimales.ToString() + " = " + numerad.ToString();
         paso++;
     }
     else if (paso == 2)
     {
         lbExplicacion.Text += "\nEl resultado anterior, será el numerador de la fracción. El denominador, será la potencia de 10 por la que hemos multiplicado el decimal anteriormente, es decir: 10^" + digitosdecimales.ToString();
         denominad           = (long)Math.Pow(10, digitosdecimales);
         label1.Text        += "\n" + numerad + " / " + denominad.ToString();
         paso++;
     }
     else
     {
         label2.Show();
         Racional racio = new Racional(numerad, denominad);
         lbExplicacion.Text += "\nSimplificando, obtenemos el número racional equivalente al decimal introducido:";
         label2.Text         = racio.ToString();
         label2.Location     = new Point(label1.Location.X, label1.Location.Y + label1.Height + 5);
         btContinuar.Hide();
         lbExplicacion.Focus();
     }
 }
Ejemplo n.º 4
0
        /// <summary>
        ///
        /// REALIZA LAS OPERACIONES PARA LLEGAR A LA ECUACION DEL PLANO SIMPLIFICADA Y FINALIZA LA
        /// EXPLICACION
        ///
        ///
        /// </summary>
        ///
        private void FinalizarResolucion()
        {
            lbExplicacion.Text = " Una vez planteada la ecuación, podemos continuar realizando los productos y sumas y despejar el termino independiente. \n Con esto obtenemos la ecuación simplificada de este plano.";
            if (!directa)
            {
                label1.Text += "\n" + Racional.AString(vector.Componentes[0] * punto1.Coordenadas[0]) + " - " + Racional.AString(vector.Componentes[0]) + "X +" + Racional.AString(vector.Componentes[1] * punto1.Coordenadas[1]) + " - " + Racional.AString(vector.Componentes[1]) + "Y +" + Racional.AString(vector.Componentes[2] * punto1.Coordenadas[2]) + " - " + Racional.AString(vector.Componentes[2]) + "Z = 0";
            }
            label2.Show();
            label2.Location  = new Point(label1.Location.X, label1.Location.Y + label1.Height + 10);
            label2.BackColor = Color.Chartreuse;
            Plano plano = new Plano(vector, punto1);

            ecuacion    = plano.EcuacionDelPlano();
            label2.Text = ecuacion.ToString();
            int altoletra = 400 / label2.Text.Length;

            label2.Font = new Font("Dejavu Sans", altoletra);
            btContinuar.Hide();
            btCentrar.PerformClick();
            if (defecto)
            {
                btArriba.PerformClick();
                btArriba.PerformClick();
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        ///
        /// PINTA EL FONDO DE LAS CAJAS EN LA FILA POR DEBAJO DE LA FILA ACUAL DE COLOR ROJO, UNA CADA VEZ
        /// QUE SE CUMPLE EL TIEMPO ESTABLECIDO EN EL TEMPORIZADOR
        ///
        /// </summary>

        private void Temporizador1_Tick(object sender, EventArgs e)
        {
            btNuevo.Hide();
            btContinuar.Hide();
            // label7.Location = new Point(matriz[0, 0].Location.X - 300, label2.Location.Y + label2.Height + 10);
            label7.Location    = new Point(50, label2.Location.Y + label2.Height + 10);
            label7.MaximumSize = new Size(1100, 200);
            label7.TextAlign   = ContentAlignment.MiddleLeft;

            if (filaarestar > matriz.GetLength(0))
            {
                filaarestar = columnaaconvertir;
            }

            if (filaactual < matriz.GetLength(0) && columnaactual < matriz.GetLength(0))
            {
                label7.Show();
                matriz[filaarestar, columnaactual].BackColor = Color.Coral;
                label7.Font  = new Font(label7.Font.FontFamily, (int)(15 * Math.Ceiling((double)(1 / (double)label7.Text.Length))));
                label7.Text += matriz[filaarestar, columnaactual].Text + " - " + " ( " + matriz[filaactual, columnaactual].Text + " * " + Racional.AString(producto) + " ) " + " = " + (Racional.AString((Racional.StringToRacional(matriz[filaarestar, columnaactual].Text) - Racional.StringToRacional(matriz[filaactual, columnaactual].Text) * producto)) + "         ");
                matriz[filaarestar, columnaactual].Text = Racional.AString((Racional.StringToRacional(matriz[filaarestar, columnaactual].Text) - Racional.StringToRacional(matriz[filaactual, columnaactual].Text) * producto));
                columnaactual++;
            }
            else if (columnaactual >= matriz.GetLength(0) - 1)
            {
                columnaactual = columnaaconvertir;
                filaarestar++;
                Temporizador1.Stop();
                btContinuar.Show();
                btNuevo.Show();
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        ///
        ///  CAMBIA EL CONTENIDO Y EL NOMBRE DE LA ETIQUETA PARA EL ORDEN DE LA MATRIZ, Y MUESTRA EL
        ///  VALOR DEL DETERMINANTE, EN LA CAJA DE TEXTO DONDE SE INTRODUJO EL ORDEN EL DE LA MISMA.
        ///
        /// </summary>

        internal void MostrarResultado()
        {
            EtiquetaFilas.Text = " El determinante de la matriz introducida es: ";
            Racional resultado = Matematicas.AlgebraLineal.Determinante(matrizracional);

            tbFilas.Size       = new Size(Racional.AString(resultado).Length * 15, tbFilas.Size.Height);
            tbFilas.Text       = Racional.AString(resultado);
            tbFilas.BackColor  = Color.GreenYellow;
            lbExplicacion.Text = "";
            EtiquetaFilas.Focus();
        }
Ejemplo n.º 7
0
 private void ResolucionPeriodicoMixto()
 {
     if (paso == 20)
     {
         lbExplicacion.Text += "\nComenzamos construyendo un número con la parte entera, el anteperiodo y el periodo. ";
         label1.Show();
         string parteenteras = tbFilas.Text.Substring(0, tbFilas.Text.IndexOf(','));
         parteentera = Int64.Parse(parteenteras);
         Racional numeror = (Racional)(numero);
         anteperiodo = numeror.AntePeriodo();
         string anteperiodos = anteperiodo.ToString();
         periodo = numeror.Periodo();
         string periodos = periodo.ToString();
         string aux      = parteenteras + anteperiodos + periodos;
         auxi1       = Int64.Parse(aux);
         label1.Text = aux;
         paso++;
     }
     else if (paso == 21)
     {
         lbExplicacion.Text += "\nAhora construimos otro número con la parte entera seguida del anteperiodo y se lo restamos al número contruido anteriormente, obteniendo así el numerador de la fracción:";
         string aux = parteentera.ToString() + anteperiodo.ToString();
         auxi2        = Int64.Parse(aux);
         numerad      = auxi1 - auxi2;
         label1.Text += " - " + aux + " = " + numerad.ToString();
         paso++;
     }
     else if (paso == 22)
     {
         lbExplicacion.Text += "\nPara obtener el denominador de la fracción, construimos un número compuesto por tantos nueves como digitos tenga el periodo, y tantos ceros como digitos tenga el anteperiodo:";
         string denominads = "";
         for (int i = 0; i < periodo.ToString().Length; i++)
         {
             denominads += "9";
         }
         for (int i = 0; i < anteperiodo.ToString().Length; i++)
         {
             denominads += "0";
         }
         denominad    = Int64.Parse(denominads);
         label1.Text += "\n Denominador = " + denominads;
         paso++;
     }
     else if (paso == 23)
     {
         lbExplicacion.Text += "\nPor último construimos el racional simplificando numerador y denominador:";
         label2.Show();
         label2.Location = new Point(label1.Location.X, label1.Location.Y + label1.Height + 5);
         label2.Text     = new Racional(numerad, denominad).ToString();
         btContinuar.Hide();
         lbExplicacion.Focus();
     }
 }
Ejemplo n.º 8
0
        /// <summary>
        ///
        ///  AVANZA EN LA RESOLUCION DE LA MATRIZ ADJUNTA UN PASO CADA VEZ QUE SE CLICA SOBRE EL
        ///  BOTON CONTINUAR
        ///
        /// </summary>

        internal void ResolucionPasoAPaso(object sender, EventArgs e)
        {
            if (columnaactual > orden - 1)
            {
                columnaactual = 0;
                filaactual++;
                if (filaactual > orden - 1)
                {
                    lbExplicacion.Text = " Hemos calculado la matriz adjunta.";
                    foreach (Label l in adjunta)
                    {
                        l.BackColor = Color.YellowGreen;
                    }
                    btContinuar.Hide();
                    foreach (TextBox t in matriz)
                    {
                        t.BackColor = Color.White;
                    }
                    lbExplicacion.Focus();
                    return;
                }
            }
            PintarFilaColumna(matriz, filaactual, columnaactual, Color.Black);
            string parimpar = " ";

            if ((filaactual + columnaactual) % 2 == 0)
            {
                parimpar += "Como la suma de los indices del elemento [" + filaactual + "," + columnaactual + " ], es par, ponemos el determinante calculado en la posicion  [" + columnaactual + "," + filaactual + " ] de la matriz adjunta sin mas";
            }
            else
            {
                parimpar += "Como la suma de los indices del elemento [" + filaactual + "," + columnaactual + " ], es impar, cambiamos el signo del determinante calculado y lo ponemos en la posicion  [" + columnaactual + "," + filaactual + " ] de la matriz adjunta";
            }

            if (filaactual == 0 && columnaactual == 0)
            {
                lbExplicacion.Text = "Para comenzar, eliminamos todos los elementos que estan en la misma fila y columna que el elemento [" + filaactual + "," + columnaactual + " ] , y calculamos el determinante de la matriz compuesta por los elementos que quedan.";
            }
            else
            {
                lbExplicacion.Text = "Eliminamos todos los elementos que estan en la misma fila y columna que el elemento [" + filaactual + "," + columnaactual + " ] , y calculamos el determinante de la matriz compuesta por los elementos que quedan.";
            }

            lbExplicacion.Text += "\r\n " + parimpar;

            adjunta[columnaactual, filaactual].BackColor = Color.Coral;
            adjunta[columnaactual, filaactual].Text      = Racional.AString(resultado[columnaactual, filaactual]);


            columnaactual++;
            paso++;
        }
Ejemplo n.º 9
0
        /// <summary>
        ///
        ///  INICIA EL METODO DE RESOLUCION PASO A PASO POR EL METODO DE LAS DIAGONALES
        ///
        /// </summary>

        private void rbSeleccion_Click(object sender, EventArgs e)
        {
            if (sender == radioButton1)
            {
                this.Text += "  ( Método de las diagonales )";
                diagonales = true;
                btContinuar.Show();
                paso = 0;
                btContinuar.Location = new Point(900, 200);
                radioButton1.Hide();
                radioButton2.Hide();
                radioButton3.Hide();
                EtiquetaFilas.Hide();
                tbFilas.Hide();
                lbExplicacion.Focus();

                lbExplicacion.Text = " Primero hacemos el producto de los elementos de la diagonal principal y guardamos el resultado.";

                label1.Text = "";
                label1.Show(); // Etiqueta con el planteamiento
                label1.Location  = new Point(matriz[matriz.GetLength(0) - 1, 0].Location.X, (matriz[matriz.GetLength(1) - 1, 0].Location.Y + matriz[0, 0].Height + 10));
                label1.BackColor = Color.SeaGreen;
                label1.ForeColor = Color.Silver;
                label1.TextAlign = ContentAlignment.MiddleLeft;

                string planteamiento = PintarDiagonal(matriz, 0, Color.GreenYellow, ref producto);
                label1.Text = planteamiento + " " + Racional.AString(producto);

                label2.Show(); // Etiqueta para Memo
                label2.Text      = "Memo: ";
                label2.Location  = new Point(label1.Location.X, label1.Location.Y + label1.Height + 10);
                label2.Text     += ":   " + Racional.AString(producto);
                label2.ForeColor = label1.ForeColor;
                label2.TextAlign = ContentAlignment.MiddleLeft;
                label2.BackColor = label1.BackColor;

                productos.Add(producto);
                paso++;
            }
            else if (sender == radioButton2)
            {
                this.Text += "  ( Método de las menores principales. )";
                menores    = true;
                Resolucion();
            }
            else if (sender == radioButton3)
            {
                this.Text += "  ( Método de Gauss. )";
                gauss      = true;
                Resolucion();
            }
        }
Ejemplo n.º 10
0
        /// <summary>
        ///
        /// INICIA LA RESOLUCION
        ///
        /// </summary>
        ///
        private void IniciarResolucion()
        {
            btDefecto.Hide();
            if (!tbFilas.Text.Contains(','))
            {
                MessageBox.Show("El número introducido es un entero.");
                return;
            }
            // Obtener el numero introducido
            numero = Double.Parse(tbFilas.Text);
            if (directa)
            {
                Racional resultado = (Racional)numero;
                label2.Show();
                label2.Location = btContinuar.Location;
                btContinuar.Hide();
                label2.Text = resultado.ToString();
                lbExplicacion.Focus();
                return;
            }
            // Pasar el numero a Racional para comprobar de que tipo se trata
            Racional numeror = numero;

            // Comprobar de que tipo se trata ( decimal, periodico puro o periodico mixto )
            if (numeror.EsEntero())
            {
                MessageBox.Show("El número introducido es un entero.");
                return;
            }

            bool esperiodicopuro  = numeror.EsPeriodicoPuro();
            bool esperiodicomixto = numeror.EsPeriodicoMixto();
            bool esdecimal        = numeror.EsDecimal();

            btContinuar.Show();
            if (esdecimal)
            {
                lbExplicacion.Text = "El número introdocido, es un decimal aperiodico";
                paso = 1;
            }
            else if (esperiodicopuro)
            {
                lbExplicacion.Text = "El número introducido, es un decimal periodico puro.";
                paso = 10;
            }
            else if (esperiodicomixto)
            {
                lbExplicacion.Text = "El número introducido, es un decimal periodico mixto.";
                paso = 20;
            }
        }
Ejemplo n.º 11
0
        /// <summary>
        ///
        /// REALIZA EL ULTIMO PASO EN LA RESOLUCION PASO A PASO
        ///
        /// </summary>
        ///
        private void btContinuar2_Click(object sender, EventArgs e)
        {
            lbResultado.Location = new Point(sbAnguloZ.Location.X, pnZoom.Location.Y + pnZoom.Height + 5);
            lbResultado.Visible  = true;
            lbResultado.Font     = new Font(lbResultado.Font.FontFamily, 12);
            lbResultado.Text     = " Por lo tanto en este caso: ";
            lbResultado.Text    += "\n √ [  ( √ ( (" + Racional.AString(punto1.X) + " - " + Racional.AString(punto2.X) + " )^2 + ( " + Racional.AString(punto1.Y) + " - " + Racional.AString(punto2.Y) + " )^2 )^2 + (" + Racional.AString(punto1.Z) + " - " + Racional.AString(punto2.Z) + " )^2  ]";
            lbResultado.Text    += "\n Lo que es igual a: ";
            lbResultado.Text    += "\n √ ( (" + Racional.AString(punto1.X) + " - " + Racional.AString(punto2.X) + " )^2 + ( " + Racional.AString(punto1.Y) + " - " + Racional.AString(punto2.Y) + " )^2 )  + ( " + Racional.AString(punto1.Z) + " - " + Racional.AString(punto2.Z) + " )^2 )";
            Vector resul = new Vector(punto1, punto2);

            lbResultado.Text += "\n La distancia es: " + resul.ModuloDecimal().ToString();
            btContinuar.Hide();
        }
        protected override VisibilityForMetar _Decode(System.Text.RegularExpressions.GroupCollection groups)
        {
            VisibilityForMetar ret = new VisibilityForMetar();

            if (groups[2].Success)
            {
                ret.SetCAVOK();
            }
            else if (groups[3].Success)
            {
                ret.SetSKC();
            }
            else if (groups[4].Success)
            {
                int distance               = groups[5].GetIntValue();
                Common.eDirection?dir      = null;
                int?otherDist              = null;
                Common.eDirection?otherDir = null;

                if (groups[6].Success)
                {
                    dir = (Common.eDirection)Enum.Parse(
                        typeof(Common.eDirection), groups[6].Value, false);
                }

                if (groups[7].Success)
                {
                    otherDist = groups[8].GetIntValue();
                    otherDir  = (Common.eDirection)Enum.Parse(
                        typeof(Common.eDirection), groups[9].Value, false);
                }

                ret.SetMeters(distance, dir, otherDist, otherDir);
            }
            else
            {
                Racional r = new Racional(
                    (groups[13].Success) ? groups[13].GetIntValue() : 0,
                    groups[14].GetIntValue(),
                    (groups[16].Success) ? groups[16].GetIntValue() : 1
                    );

                bool isMinimal = groups[12].Success;

                ret.SetMiles(r, isMinimal);
            }


            return(ret);
        }
Ejemplo n.º 13
0
        /// <summary>
        ///
        /// CONSTRUYE EL NUMERO IMAGINARIO CON LOS DATOS INTRODUCIDOS
        ///
        /// </summary>
        ///
        private void LeerImaginario()
        {
            Racional real       = Racional.StringToRacional(tbFilas.Text);
            Racional imaginaria = Racional.StringToRacional(tbcolumnas.Text);

            if (label2.Text == "-")
            {
                imaginaria = new Racional(imaginaria.Numerador * -1, imaginaria.Denominador);
            }
            imaginario = new Imaginario(real, imaginaria);
            if (paso > 0)
            {
                btContinuar.PerformClick();
            }
        }
Ejemplo n.º 14
0
        /// <summary>
        ///
        /// MUESTRA LAS COORDENADAS DEL PUNTO DE INTERSECCION APLICANDO EL PARAMETRO A CADA UNA
        /// DE LAS ECUACIONES DE LA RECTA Y DIBUJA EL PUNTO DE INTERSECCION Y EXTIENDE LA RECTA HASTA
        /// LLEGAR AL PUNTO
        ///
        /// </summary>
        ///
        private void FinalizarResolucion()
        {
            btContinuar.Hide();
            lbExplicacion.Text = " Por último, basta con aplicar el parámetro obtenido a las ecuaciones paramétricas de la recta, para obtener las coordenadas x, y , z del punto de intersección buscado.\n(Mostrado en el gráfico en color rojo.)";

            //  Dibujar el punto de interseccion de la recta con el plano
            ventanagrafica.PintarPunto(plano.Interseccion(linea1), 10, false, Color.Red);

            // Dibujar la linea que va desde el punto inicial al punto de interseccion de la recta con el plano si el punto esta fuera del segmento de recta
            if (new Vector(punto1, punto2).ModuloDecimal() < new Vector(punto1, plano.Interseccion(linea1)).ModuloDecimal() || new Vector(punto1, punto2).ModuloDecimal() < new Vector(punto2, plano.Interseccion(linea1)).ModuloDecimal())
            {
                if (parametro < 0)
                {
                    ventanagrafica.PintarLinea(punto2, plano.Interseccion(linea1), Color.DarkOrange, 3);
                }
                else
                {
                    ventanagrafica.PintarLinea(punto1, plano.Interseccion(linea1), Color.DarkOrange, 3);
                }
            }
            btCentrar.PerformClick();

            lbResultado.Show();
            lbResultado.Location = new Point(10, lbExplicacion.Height + 10);

            lbResultado.Text = "Punto de intersección = " + Math.Round(plano.Interseccion(linea1).X.ToDouble(), 6).ToString() + "x ;" + Math.Round(plano.Interseccion(linea1).Y.ToDouble(), 6).ToString() + "y ;" + Math.Round(plano.Interseccion(linea1).Z.ToDouble(), 6).ToString() + "z ";

            ventanagrafica.PintarPunto(plano.Interseccion(linea1), 10, true, Color.Red);
            //Reducir la precision de las coordenadas del punto de interseccion para evitar overflow
            Punto interseccion = plano.Interseccion(linea1);

            Racional[] coords   = interseccion.Coordenadas;
            Racional[] reducida = new Racional[coords.Length];
            int        cont     = 0;

            foreach (Racional r in coords)
            {
                double s = Math.Round(r.ToDouble(), 10);
                reducida[cont] = s;
                cont++;
            }
            interseccion = new Punto(reducida);
            ventanagrafica.PintarLinea(punto2, interseccion, Color.Chartreuse, 3);
            ventanagrafica.PintarPlano(new Vector(punto4.Coordenadas), plano.Interseccion(linea1), 10, Color.Chartreuse);
            btCentrar.PerformClick();
        }
Ejemplo n.º 15
0
 /// <summary>
 ///
 /// CONTINUA LA EXPLICACION Y PLANTEA LA ECUACION DEL PLANO
 ///
 /// </summary>
 ///
 private void ContinuarResolucion()
 {
     lbExplicacion.Text = " El vector entre el punto de paso del plano, y cualquier punto contenido en el mismo, será perpendicular al vector perpendicular del plano.\n Por lo tanto el producto punto entre el vector perpendicular al plano y el vector entre el punto de paso del plano y cualquier punto contenido en el mimo, será igual a cero.\n Con esto, podemos plantear la ecuación del plano: ";
     label1.Show();
     label1.Location  = new Point(btContinuar.Location.X, btContinuar.Location.Y + btContinuar.Height + 10);
     label1.Text      = "ECUACIÓN DE ESTE PLANO";
     label1.BackColor = Color.SeaGreen;
     label1.Font      = new Font(label1.Font.FontFamily, 10);
     if (!directa)
     {
         label1.Text += "\n\n" + Racional.AString(vector.Componentes[0]) + " * (" + Racional.AString(punto1.Coordenadas[0]) + " - X ) + " + Racional.AString(vector.Componentes[1]) + " * ( " + Racional.AString(punto1.Coordenadas[1]) + " - Y ) + " + Racional.AString(vector.Componentes[2]) + " * ( " + Racional.AString(punto1.Coordenadas[2]) + " - Z ) = 0";
     }
     if (directa)
     {
         FinalizarResolucion();
     }
 }
Ejemplo n.º 16
0
    static void Main()
    {
        /*Creación de los numeros racionales*/
        Racional a = new Racional(2, 3);
        Racional b = new Racional(3, 4);
        /*Suma de los números racionales a y b*/
        Racional c = a + b;

        /*Creacion de un numero racional que posteriomente fue simplificado usando
         * el método simplificar*/
        Racional d = new Racional(30, 8);

        d.simplificar();

        /*Impresión de los resultados de todas las operaciones realizadas
        *  (suma de 2 numeros racionales y la simplifacion de un tercero.)*/
        Console.WriteLine("{0}\n{1}\n{2}\nSimplificado:{3} ", a, b, c, d);
    }
Ejemplo n.º 17
0
        /// <summary>
        ///
        ///  PINTA EL FONDO DE LAS CAJAS DE TEXTO QUE ESTAN EN LA DIAGONAL A DERECHA
        ///  CUYO INDICE ES PASADO COMO ARGUMENTO. LA MATRIZ ES PASADA COMO ARGUMENTO
        ///  Y DEVUELVE EL STRING DEL PLATEAMIENTO DEL PRODUCTO DE ESOS ELEMENTOS
        ///  Y EL RESULTADO DEL PRODUCTO COMO REFERENCIA
        ///
        /// </summary>


        private string PintarDiagonal(TextBox[,] matriz, int indice, Color color, ref Racional producto)
        {
            int    fila          = 0;
            string planteamiento = "";

            for (int i = 0; i < matriz.GetLength(0); i++)
            {
                if (indice > matriz.GetLength(0) - 1)
                {
                    indice = 0;
                }

                matriz[fila, indice].BackColor = Color.GreenYellow;
                producto      *= Racional.StringToRacional(matriz[fila, indice].Text);
                planteamiento += matriz[fila, indice].Text + " * ";
                indice++;
                fila++;
            }
            planteamiento  = planteamiento.Substring(0, planteamiento.Length - 2);
            planteamiento += " = ";
            return(planteamiento);
        }
Ejemplo n.º 18
0
 /// <summary>
 ///
 /// CONVIERTE EL PERIODICO PURO EN RACIONAL, PASO A PASO
 ///
 /// </summary>
 ///
 private void ResolucionPeriodicoPuro()
 {
     if (paso == 10)
     {
         lbExplicacion.Text += "\nPara convertir el periodico puro en fracción, primero construimos un número compuesto por la parte entera y el periodo. A este número se le resta la parte entera, obteniendo así el numerador de la fracción:";
         label1.Show();
         string   parteenteras = tbFilas.Text.Substring(0, tbFilas.Text.IndexOf(','));
         Racional numeror      = numero;
         string   periodos     = numeror.Periodo().ToString();
         parteentera = Int64.Parse(parteenteras);
         periodo     = Int64.Parse(periodos);
         string aux  = parteenteras + periodos;
         long   auxi = Int64.Parse(aux);
         numerad     = auxi - parteentera;
         label1.Text = parteenteras + periodos + " - " + parteenteras + " = " + numerad.ToString();
         paso++;
     }
     else if (paso == 11)
     {
         lbExplicacion.Text += "\nEl denominador de la fracción, es un número compuesto por tantos ' 9 ' como digitos tenga el periodo:";
         string denominads = "";
         for (int i = 0; i < periodo.ToString().Length; i++)
         {
             denominads += "9";
         }
         label1.Text += "\n" + denominads;
         denominad    = Int64.Parse(denominads);
         paso++;
     }
     else if (paso == 12)
     {
         lbExplicacion.Text += "\nPor último, simplificando el numerador y denominador, obtenemos el racional equivalente al decimal periodico puro introducido.";
         label2.Show();
         label2.Location = new Point(label1.Location.X, label1.Location.Y + label1.Height + 5);
         label2.Text     = new Racional(numerad, denominad).ToString();
         btContinuar.Hide();
     }
 }
Ejemplo n.º 19
0
        /// <summary>
        ///
        ///  PINTA EL FONDO DE LAS CAJAS DE LA MATRIZ PASADA COMO ARGUMENTO, QUE ESTEN EN LA FILA O
        ///  COLUMNA PASADAS COMO ARGUMENTO Y CALCULA EL DETERMINANTE DE LA MENOR PRINCIPAL
        ///
        /// </summary>

        internal void PintarFilaColumna(TextBox[,] matriz, int fila, int columna, Color color)
        {
            List <Racional> aux = new List <Racional>();

            for (int i = 0; i < matriz.GetLength(0); i++)
            {
                for (int j = 0; j < matriz.GetLength(0); j++)
                {
                    if (i == fila && j != columna || i != fila && j == columna)
                    {
                        matriz[i, j].BackColor = color;
                    }
                    else if (i == fila && j == columna)
                    {
                        matriz[i, j].BackColor = Color.Coral;
                    }
                    else
                    {
                        matriz[i, j].BackColor = Color.White;
                        aux.Add(Racional.StringToRacional(matriz[i, j].Text));
                    }
                }
            }
            Racional[,] matrizaux = new Racional[matriz.GetLength(0) - 1, matriz.GetLength(0) - 1];
            int contador = 0;

            for (int i = 0; i < matrizaux.GetLength(0); i++)
            {
                for (int j = 0; j < matrizaux.GetLength(0); j++)
                {
                    matrizaux[i, j] = aux[contador];
                    contador++;
                }
            }
            determinantemenor = Matematicas.AlgebraLineal.Determinante(matrizaux);
        }
Ejemplo n.º 20
0
        /// <summary>
        ///
        ///  COMPRUEBA QUE LOS DATOS INTRODUCIDO EN CADA TextBox EN matriz SEAN
        ///  ADECUADOS PARA PASARLOS A Racional MAS TARDE
        ///  Y CREA LA MATRIZ EN FORMATO Racional Y LA RELLENA CON DATOS DE matriz
        ///  PASADOS A Racional
        /// </summary>

        private void Matriz_KeyPress(object sender, KeyPressEventArgs e)
        {
            matrizracional = new Racional[matriz.GetLength(0), matriz.GetLength(1)];
            TextBox aux = (TextBox)sender;

            if (e.KeyChar == Convert.ToChar(13))                                            // Si se pulsa la tecla intro
            {
                if (aux.Text.Length > 0)                                                    // Si la caja de texto no está vacia.
                {
                    filaactual    = (aux.TabIndex) / matriz.GetLength(0);                   // primer indice de la caja actual
                    columnaactual = (aux.TabIndex) - (matriz.GetLength(0) * filaactual);    // segundo indice de la caja actual
                    if (columnaactual == matriz.GetLength(1) - 1)                           // Si es la ultima caja de la fila
                    {
                        if (aux.TabIndex < ((matriz.GetLength(0)) * (matriz.GetLength(0)))) // Si no es la ultima caja de la matriz.
                        {
                            columnaactual = 0;
                            filaactual++;
                        }
                        else // Si es la ultima caja de la matriz rellenar la matriz en formato Racional
                        {
                            e.Handled = true;
                            for (int i = 0; i < matriz.GetLength(0); i++)
                            {
                                for (int j = 0; j < matriz.GetLength(0); j++)
                                {
                                    matrizracional[i, j] = Racional.StringToRacional(matriz[i, j].Text);
                                    // lbMensajes.Text = Racional.AString(matrizracional[i,j]) + "  ";
                                }
                            }
                            // SIGUIENTE METODO
                            ConstruirAdjunta();
                        }
                    }
                    else // Si no es la ultima caja de la fila
                    {
                        columnaactual++;
                    }
                    try
                    {
                        e.Handled = true;
                        matriz[filaactual, columnaactual].Focus();
                    }
                    catch (IndexOutOfRangeException) // Rellenar la matriz Racional
                    {
                        e.Handled = true;
                        for (int i = 0; i < matriz.GetLength(0); i++)
                        {
                            for (int j = 0; j < matriz.GetLength(1); j++)
                            {
                                matrizracional[i, j] = Racional.StringToRacional(matriz[i, j].Text);
                            }
                        }
                        // SIGUIENTE METODO
                        ConstruirAdjunta();
                    }
                }
                else // Si la caja está vacia
                {
                    aux.Focus();
                }
            }

            else if (e.KeyChar == Convert.ToChar(8)) // Si se pulsa la tecla BackSpace
            {
                e.Handled = false;
            }

            else if (e.KeyChar == '/') // Solo puede haber un caracter
            {
                if (aux.Text.Length > 1 && aux.Text.IndexOf('/') != -1)
                {
                    e.Handled = true;
                }
                else
                {
                    if (aux.Text.Length > 0)
                    {
                        e.Handled = false;
                    }
                    else
                    {
                        e.Handled = true;
                    }
                }
            }

            else if (e.KeyChar == '+' || e.KeyChar == '-')  // Asegurar que los signos + o - esten en la primera posicion.
            {
                if (aux.SelectionLength == aux.Text.Length) // Si todo el texto de la caja está seleccionado, es decir estamos en el primer caracter
                {
                    e.Handled = false;
                }
                else
                {
                    e.Handled = true;
                }
            }

            else if (e.KeyChar < '0' || e.KeyChar > '9') // Asegurar que se introduzcan digitos y no otro tipo de caracteres
            {
                e.Handled = true;
            }
        }
Ejemplo n.º 21
0
        /// <summary>
        ///
        ///PINTA EL PUNTO FINAL DE LA LINEA DE RADIO Y LAS LINEAS CORREPONDIENTES Y CONTINUA CON LA
        ///EXPLICACION
        ///
        /// </summary>
        ///
        private void ContinuarResolucion()
        {
            ventanagrafica.EliminarCirculo(0);
            ventanagrafica.PintarCirculo(apintar, radio, Color.Olive, 2, anguloradio, true);
            double radiodouble = (double)(radio.Numerador / radio.Denominador);
            double centroxx    = (double)apintar.X.Numerador / apintar.X.Denominador;
            double centroyy    = (double)apintar.Y.Numerador / apintar.Y.Denominador;

            lbExplicacion.Hide();
            lbExplicacion.Show();
            lbExplicacion.Text = " Las coordenadas X e Y del punto final del radio, se obtienen sumando o restando el largo de los catetos a las coodenadas X o Y respectivas del centro de la circunferencia.\n Se han añadido a la figura en color amarillo, y puede verse como varian cambiando el ángulo de la línea del radio.\n La ecuación del punto final del radio en este ángulo de la linea del radio es:  " + Racional.AString(radio * radio) + " = ( " + Math.Round((radiodouble * Math.Cos(anguloradio) + centroxx), 4).ToString() + " - " + centroxx.ToString() + " )^2 + ( " + Math.Round((radiodouble * Math.Sin(anguloradio) + centroyy), 4).ToString() + " - " + centroyy.ToString() + ")^2";
            ventanagrafica.Ventana.Invalidate();
            if (directa)
            {
                FinalizarResolucion();
            }
        }
Ejemplo n.º 22
0
        /// <summary>
        ///
        /// MUESTRA LA ECUACION DE LA CIRCUNFERENCIA INTRODUCIDA Y TERMINA LA EXPLICACION
        ///
        /// </summary>
        ///
        private void FinalizarResolucion()
        {
            double radiodouble = (double)(radio.Numerador / radio.Denominador);
            double centroxx    = (double)apintar.X.Numerador / apintar.X.Denominador;
            double centroyy    = (double)apintar.Y.Numerador / apintar.Y.Denominador;

            if (!directa)
            {
                lbExplicacion.Text = " Las coordenadas del centro de la circunferencia, son las mismas esté donde esté el punto final del radio de la circunferencia, si cambiamos las coordenadas del punto final del radio  por las variables X e Y, la ecuación queda: \n " + Racional.AString(radio * radio) + " = ( X - " + centroxx.ToString() + " )^2 + ( Y - " + centroyy.ToString() + ")^2 . Desarrollando los cuadrados de las restas: " + Racional.AString(radio * radio) + " =  X^2 - " + (2 * centroxx).ToString() + "X + " + (centroxx * centroxx).ToString() + " + Y^2  - " + (2 * centroyy).ToString() + "Y + " + (centroyy * centroyy).ToString() + ".  Simplificando: " + ((radiodouble * radiodouble) - (centroxx * centroxx) - (centroyy * centroyy)) + " =  X^2 - " + (2 * centroxx).ToString() + "X + Y^2 - " + (2 * centroyy).ToString() + "Y";
            }
            lbResultado.Visible  = true;
            lbResultado.Location = new Point(btContinuar.Location.X, label1.Location.Y + label1.Height + 5);
            lbResultado.Text     = "Ecuación de esta circunferencia:\nX^2 - " + (2 * centroxx).ToString() + "X + Y^2 - " + (2 * centroyy).ToString() + "Y = " + ((radiodouble * radiodouble) - (centroxx * centroxx) - (centroyy * centroyy));
            btContinuar.Hide();
            if (directa)
            {
                lbExplicacion.Hide();
            }
        }
Ejemplo n.º 23
0
        /// <summary>
        ///
        ///  CENTRA Y ESCALA LA PANTALLA AUTOMATICAMENTE
        ///
        /// </summary>
        ///
        private void btCentrar_Click(object sender, EventArgs e)
        {
            Racional coordenadamaxima = apintar.CoordenadaMaxima; // Coordenada mas grande del centro del circulo

            if (coordenadamaxima.Numerador < 0)                   // Pasar a valor absoluto
            {
                coordenadamaxima = new Racional(coordenadamaxima.Numerador * -1, coordenadamaxima.Denominador);
            }
            coordenadamaxima += radio;
            float maximafloat = (float)((float)coordenadamaxima.Numerador / (float)coordenadamaxima.Denominador);

            maximafloat = Math.Abs(maximafloat);
            // Escalar
            if ((float)Math.Round((double)(ventanagrafica.Ventana.Height / 10) / maximafloat) > 1) // Coordenada maxima del centro y radio mas pequeños que el area grafica
            {
                ventanagrafica.Escala = (float)Math.Round((double)(ventanagrafica.Ventana.Height / 10) / (double)maximafloat) * 10;
            }
            else // Coordenada maxima o radio, mas grandes que el area grafica
            {
                ventanagrafica.Escala = (float)Math.Round((double)(ventanagrafica.Ventana.Height) / (double)(maximafloat), 0); // Coordenada maxima del centro o radio mas grandes que el area grafica
            }

            if (radio > apintar.CoordenadaMaxima)
            {
                ventanagrafica.Escala /= 2;
            }
            if (ventanagrafica.Escala == 0)
            {
                ventanagrafica.Escala = 0.1F;
            }

            // Desplazar
            if ((apintar.X.Numerador > 0 && apintar.Y.Numerador > 0) || (apintar.X.Numerador == 0 && apintar.Y.Numerador > 0) || (apintar.X.Numerador > 0 && apintar.Y.Numerador == 0) || (apintar.X.Numerador == 0 && apintar.Y.Numerador == 0)) // Centro en el primer cuadrante
            {
                Racional desplazamientoy = radio - apintar.X;
                if (desplazamientoy < 0)
                {
                    desplazamientoy = 0;
                }
                int desplazamienty = (int)(desplazamientoy.Numerador / desplazamientoy.Denominador);
                desplazamienty *= (int)(ventanagrafica.Escala);
                Racional desplazamientox = radio - apintar.Y;
                if (desplazamientox < 0)
                {
                    desplazamientox = 0;
                }
                int desplazamientx = (int)(desplazamientox.Numerador / desplazamientox.Denominador);
                desplazamientx *= (int)(ventanagrafica.Escala);
                ventanagrafica.DesplazarA(new Point(ventanagrafica.Ventana.Height - desplazamientx - 40, desplazamienty + 10));
            }
            else if (apintar.X < 0 && apintar.Y > 0)
            {
                Racional desplazamientoy = radio + apintar.X;
                if (desplazamientoy < 0)
                {
                    desplazamientoy = 0;
                }
                int desplazamienty = (int)(desplazamientoy.Numerador / desplazamientoy.Denominador);
                desplazamienty *= (int)(ventanagrafica.Escala);
                Racional desplazamientox = radio - apintar.Y;
                if (desplazamientox < 0)
                {
                    desplazamientox = 0;
                }
                int desplazamientx = (int)(desplazamientox.Numerador / desplazamientox.Denominador);
                desplazamientx *= (int)(ventanagrafica.Escala);
                ventanagrafica.DesplazarA(new Point(ventanagrafica.Ventana.Height - desplazamientx - 10, ventanagrafica.Ventana.Width - desplazamienty - 40));
            }
            else if (apintar.X < 0 && apintar.Y < 0)
            {
                Racional desplazamientoy = radio + apintar.X;
                if (desplazamientoy < 0)
                {
                    desplazamientoy = 0;
                }
                int desplazamienty = (int)(desplazamientoy.Numerador / desplazamientoy.Denominador);
                desplazamienty *= (int)(ventanagrafica.Escala);
                Racional desplazamientox = radio - apintar.Y;
                if (desplazamientox < 0)
                {
                    desplazamientox = 0;
                }
                int desplazamientx = (int)(desplazamientox.Numerador / desplazamientox.Denominador);
                desplazamientx *= (int)(ventanagrafica.Escala);
                ventanagrafica.DesplazarA(new Point(ventanagrafica.Ventana.Height - desplazamientx - 10, ventanagrafica.Ventana.Width - desplazamienty - 40));
            }
            else if (apintar.X > 0 && apintar.Y < 0)
            {
                //ventanagrafica.DesplazarA(new Point(5, 40));
                Racional desplazamientoy = radio - apintar.X;
                if (desplazamientoy < 0)
                {
                    desplazamientoy = 0;
                }
                int desplazamienty = (int)(desplazamientoy.Numerador / desplazamientoy.Denominador);
                desplazamienty *= (int)(ventanagrafica.Escala);
                Racional desplazamientox = radio - apintar.Y;
                if (desplazamientox < 0)
                {
                    desplazamientox = 0;
                }
                int desplazamientx = (int)(desplazamientox.Numerador / desplazamientox.Denominador);
                desplazamientx *= (int)(ventanagrafica.Escala);
                ventanagrafica.DesplazarA(new Point(5 + desplazamientx + 10, 40 + desplazamienty));
            }
            ventanagrafica.Ventana.Invalidate();
        }
Ejemplo n.º 24
0
        /// <summary>
        ///
        /// CONTRUYE EL SISTEMA IGUALANDO LAS ECUACIONES DE CADA
        /// PLANO, PINTA EL PUNTO DE PASO DE LA RECTA DE INTERSECCION  Y CONTINUA LA EXPLICACION
        ///
        /// </summary>
        ///
        private void ContinuarResolucion()
        {
            // Construir la recta de interseccion
            interseccion = plano1.Interseccion(plano2);

            // Determinar la variable que se consideró nula
            int  contador     = 0;
            char variablenula = '\0';

            foreach (Racional r in interseccion.PuntoDePaso.Coordenadas)
            {
                if (r.Numerador == 0)
                {
                    variablenula = (char)((int)'X' + contador);
                }
                contador++;
            }

            lbExplicacion.Text = " Obtenemos un punto de paso de la línea de intersección, construyendo un sistema con las ecuaciones de cada plano y dando valor cero a una de las variables. En este caso, le damos valor cero a la coordenada " + variablenula + ".";

            if (!directa)
            {
                // Construir la ventana flotante
                flotante = new ControlesFlotantes();
                flotante.Show();
                flotante.Text          = " ";
                flotante.StartPosition = FormStartPosition.Manual;
                flotante.Location      = pnDatos.Location;
                flotante.Opacity       = 1;

                // Mostrar el sistema de ecuaciones
                int nula = variablenula - 'X';
                label2.Visible   = true;
                label2.AutoSize  = true;
                label2.Font      = new Font(label2.Font.FontFamily, 10);
                label2.BackColor = Color.Transparent;
                label2.Text      = "Sistema con las ecuaciones de cada plano con : " + variablenula + " = 0.";
                label2.Text     += "\n";
                for (int i = 0; i < plano1.EcuacionDelPlano().CantidadDeTerminosIzquierda; i++)
                {
                    if (plano1.EcuacionDelPlano().ObtenerTerminoIzquierda(i).Variables[0] != variablenula)
                    {
                        label2.Text += plano1.EcuacionDelPlano().ObtenerTerminoIzquierda(i).ToString();
                    }
                }
                label2.Text += " = " + Racional.AString(plano1.EcuacionDelPlano().ObtenerTerminoDerecha(0).Coeficiente);
                label2.Text += "\n";
                for (int i = 0; i < plano2.EcuacionDelPlano().CantidadDeTerminosIzquierda; i++)
                {
                    if (plano2.EcuacionDelPlano().ObtenerTerminoIzquierda(i).Variables[0] != variablenula)
                    {
                        label2.Text += plano2.EcuacionDelPlano().ObtenerTerminoIzquierda(i).ToString();
                    }
                }
                label2.Text += " = " + Racional.AString(plano2.EcuacionDelPlano().ObtenerTerminoDerecha(0).Coeficiente);
                flotante.Controls.Add(label2);
                label2.Location = new Point(5, 5);


                // Mostrar el punto de paso
                label2.Text += "\n\n X: " + Racional.AString(interseccion.PuntoDePaso.X) + "\n Y: " + Racional.AString(interseccion.PuntoDePaso.Y) + "\n Z: " + Racional.AString(interseccion.PuntoDePaso.Z);

                // Pintar el punto de paso de la recta de interseccion
                ventanagrafica.PintarPunto(interseccion.PuntoDePaso, 5, false, Color.Red);
                flotante.Size = new Size(flotante.Width, label2.Height + 65);
            }

            ventanagrafica.Ventana.Invalidate();
            if (!directa)
            {
                btContinuar.Show();
            }
            if (directa)
            {
                PrepararResultado();
            }
        }
Ejemplo n.º 25
0
        /// <summary>
        ///
        ///  REDIBUJA EL CIRCULO CON EL RADIO EN EL ANGULO REDUCIDO EN 0,1 RADIANES
        ///  Y CAMBIA LA ETIQUETA CON EL TEOREMA DE PITAGORAS lbPitagoras
        ///
        /// </summary>
        ///
        private void AnguloMenos()
        {
            float escalaactual = ventanagrafica.Escala;

            origenx = ventanagrafica.OrigenX;
            origeny = ventanagrafica.OrigenY;
            ventanagrafica.EliminarCirculo(0);

            ventanagrafica.Escala = escalaactual;
            ventanagrafica.DesplazarA(new Point(origeny, origenx));
            if (paso == 1)
            {
                ventanagrafica.PintarCirculo(apintar, radio, Color.Olive, 2, anguloradio);
            }
            else
            {
                ventanagrafica.PintarCirculo(apintar, radio, Color.Olive, 2, anguloradio, true);
            }
            tbParametro.Text = anguloradio.ToString();
            double grados = (anguloradio * 57.29577951F);

            tbLargoInicial.Text = grados.ToString();
            double radiodouble = radio.Numerador / radio.Denominador;
            double centroxx    = (double)apintar.X.Numerador / apintar.X.Denominador;
            double centroyy    = (double)apintar.Y.Numerador / apintar.Y.Denominador;

            if (paso == 1)
            {
                lbExplicacion.Text = " Las coordenadas X e Y del punto final del radio, se obtienen sumando o restando el largo de los catetos a las coodenadas X o Y respectivas del centro de la circunferencia.\n Se han añadido a la figura en color amarillo, y puede verse como varian cambiando el ángulo de la línea del radio.\n La ecuación del punto final del radio en este ángulo de la linea del radio es:  " + Racional.AString(radio * radio) + " = ( " + Math.Round((radiodouble * Math.Cos(anguloradio) + centroxx), 4).ToString() + " - " + centroxx.ToString() + " )^2 + ( " + Math.Round((radiodouble * Math.Sin(anguloradio) + centroyy), 4).ToString() + " - " + centroyy.ToString() + ")^2";
            }
            label1.Text = "Teorema de Pitágoras aplicado a esta circunferencia:\nѴ (" + Math.Round(radiodouble * Math.Sin(anguloradio), 2).ToString() + "^2 + " + Math.Round(radiodouble * Math.Cos(anguloradio), 2).ToString() + "^2 )  = " + Racional.AString(radio);
            ventanagrafica.Ventana.Invalidate();
        }
Ejemplo n.º 26
0
        /// <summary>
        ///
        /// REINICIA UN NUEVO FORMULARIO
        ///
        /// </summary>

        public override void btNuevo_Click(object sender, EventArgs e)
        {
            this.Text = "Deteminante de una matriz cuadrada.";
            radioButton1.Hide();
            radioButton2.Hide();
            radioButton3.Hide();
            diagonales = false;
            menores    = false;
            gauss      = false;
            if (copiamatriz != null)
            {
                foreach (TextBox t in copiamatriz)
                {
                    t.Dispose();
                }
            }
            label1.Hide();
            label2.Hide();
            label3.Hide();
            label4.Hide();
            label6.Hide();
            label7.Hide();
            label5.Hide();
            lbExplicacion.Show();
            lbExplicacion.Text = "Introducir un número entero.\n\n(Pulsar el botón [E] para ejemplo con valores por defecto.)";
            btDefecto.Location = new Point(tbFilas.Location.X + tbFilas.Size.Width + 5, EtiquetaFilas.Location.Y);
            if (directa)
            {
                EtiquetaFilas.Text = "Cantidad de filas y columnas de la matriz: ";
                tbFilas.BackColor  = Color.White;
            }
            producto             = new Racional(1, 1);
            productos            = new List <Racional>();
            productosizquierda   = new List <Racional>();
            radioButton1.Checked = false;
            radioButton2.Checked = false;
            radioButton3.Checked = false;
            EtiquetaFilas.Show();
            tbFilas.Show();
            btDefecto.Show();
            orden = 0;
            paso  = 0;
            paso  = 0;
            btContinuar.Hide();
            label3.Text = "Total derecha: ";
            label4.Text = "Total izquierda: ";
            tbFilas.ResetText();
            tbFilas.Focus();
            tbFilas.Size = new Size(60, 26);
            if (matriz != null)
            {
                foreach (TextBox t in matriz)
                {
                    t.Dispose();
                }
            }
            filaactual        = 0;
            columnaactual     = 0;
            columnaaconvertir = 0;
            filaarestar       = 1;
        }
Ejemplo n.º 27
0
        /// <summary>
        ///
        /// CONTINUA CON EL SEGUNDO PASO DE LA EXPLICACION EN EL METODO PASO A PASO
        ///
        /// </summary>
        ///
        private void btContinuar_Click(object sender, EventArgs e)
        {
            lbExplicacion.Text += " \n Esto es así, porque la distancia entre los dos puntos es la hipotenusa del triangulo rectangulo formado por el vector entre los puntos y sus proyecciones sobre los planos ortogonales.";
            // Pintar el vector
            ventanagrafica.PintarVector(punto1, punto2, Color.Chartreuse, 6, true);
            string pto1X;

            if (punto1.X.ToString() != "")
            {
                pto1X = punto1.X.ToString();
            }
            else
            {
                pto1X = "0";
            }

            string pto1Y;

            if (punto1.Y.ToString() != "")
            {
                pto1Y = punto1.Y.ToString();
            }
            else
            {
                pto1Y = "0";
            }

            string pto1Z;

            if (punto1.Z.ToString() != "")
            {
                pto1Z = punto1.Z.ToString();
            }
            else
            {
                pto1Z = "0";
            }

            string pto2X;

            if (punto2.X.ToString() != "")
            {
                pto2X = punto2.X.ToString();
            }
            else
            {
                pto2X = "0";
            }

            string pto2Y;

            if (punto2.Y.ToString() != "")
            {
                pto2Y = punto2.Y.ToString();
            }
            else
            {
                pto2Y = "0";
            }

            string pto2Z;

            if (punto2.Z.ToString() != "")
            {
                pto2Z = punto2.Z.ToString();
            }
            else
            {
                pto2Z = "0";
            }

            // Pintar las lineas que forman los catetos del triangulo rectangulo
            if (punto2.Z > punto1.Z)
            {
                ventanagrafica.PintarLinea(punto1, new Punto(pto2X + " " + pto2Y + " " + pto1Z), Color.Coral, 0.5F);
                ventanagrafica.PintarLinea(new Punto(pto2X + " " + pto2Y + " " + (pto1Z)), punto2, Color.Aquamarine, 0.5f);
                ventanagrafica.PintarString(new Punto(new Racional[] { (punto1.X + punto2.X) / 2, (punto1.Y + punto2.Y) / 2, punto1.Z }), Color.Coral, 13, "√ ( (" + Racional.AString(punto1.X) + " - " + Racional.AString(punto2.X) + " )^2 + ( " + Racional.AString(punto1.Y) + " - " + Racional.AString(punto2.Y) + " )^2 )");
                ventanagrafica.PintarString(new Punto(new Racional[] { punto2.X, punto2.Y, (punto1.Z + punto2.Z) / 2 }), Color.Aquamarine, 13, Racional.AString(punto1.Z) + " - " + Racional.AString(punto2.Z));
            }
            else
            {
                ventanagrafica.PintarLinea(punto2, new Punto(pto1X + " " + pto1Y + " " + pto2Z), Color.Coral, 0.5f);
                ventanagrafica.PintarLinea(new Punto(pto1X + " " + pto1Y + " " + pto2Z), punto1, Color.Aquamarine, 0.5f);
                ventanagrafica.PintarString(new Punto(new Racional[] { (punto1.X + punto2.X) / 2, (punto1.Y + punto2.Y) / 2, punto2.Z }), Color.Coral, 13, "√ ( (" + Racional.AString(punto1.X) + " - " + Racional.AString(punto2.X) + " )^2 + ( " + Racional.AString(punto1.Y) + " - " + Racional.AString(punto2.Y) + " )^2 )");
                ventanagrafica.PintarString(new Punto(new Racional[] { punto1.X, punto1.Y, (punto1.Z + punto2.Z) / 2 }), Color.Aquamarine, 13, Racional.AString(punto1.Z) + " - " + Racional.AString(punto2.Z));
            }

            btContinuar.Click -= btContinuar_Click;
            btContinuar.Click += btContinuar2_Click;
            for (int i = 0; i < 3; i++)
            {
                btArriba.PerformClick();
            }
            ventanagrafica.Ventana.Invalidate();
        }
Ejemplo n.º 28
0
        /// <summary>
        ///
        /// CONTRUYE LOS PUNTOS CON LOS VALORES INTRODUCIDOS EN LAS CAJAS DE TEXTO, CAMBIA EL TEXTO
        /// DEL BOTON ACEPTAR POR CONTINUAR , LO CAMBIA A COLOR VERDE OSCURO Y DIBUJA LOS PUNTOS EN
        /// EL AREA GRAFICA
        ///
        /// </summary>
        ///

        private void IniciarResolucion()
        {
            // Mostrar los controles
            lbTituloAnguloX.Visible = true; btIsometrica.Visible = true;
            lbAnguloX.Visible       = true; btAlzado.Visible = true;
            sbAngulox.Visible       = true; btPerfil.Visible = true;
            lbTituloAnguloY.Visible = true; btPlanta.Visible = true;
            lbAnguloY.Visible       = true;
            sbAnguloY.Visible       = true;
            lbTituloAnguloZ.Visible = true;
            lbAnguloZ.Visible       = true;
            sbAnguloZ.Visible       = true;
            btZoomMas.Visible       = true;
            btZoomMenos.Visible     = true;
            lbZoomtitulo.Visible    = true;
            lbAjustar.Visible       = true;
            btAjustar.Visible       = true;
            pnZoom.Visible          = true;
            btAbajo.Visible         = true;
            btArriba.Visible        = true;
            btDerecha.Visible       = true;
            btIzquierda.Visible     = true;
            btCentrar.Visible       = true;
            btContinuar.Visible     = true;

            if (!defecto) // Si no se ha pulsado el boton de resolucion con valores por defecto
            {
                punto1 = new Punto(tbPunto1X.Text + " " + tbPunto1Y.Text + " " + tbPunto1Z.Text);
                punto2 = new Punto(tbPunto2X.Text + " " + tbPunto2Y.Text + " " + tbPunto2Z.Text);
                btDefecto.Hide();
            }
            else
            {
                punto1                = new Punto("10 26 25");
                tbPunto1X.Text        = Racional.AString(punto1.X);
                tbPunto1Y.Text        = Racional.AString(punto1.Y);
                tbPunto1Z.Text        = Racional.AString(punto1.Z);
                punto2                = new Punto("25 -30 -40");
                tbPunto2X.Text        = Racional.AString(punto2.X);
                tbPunto2Y.Text        = Racional.AString(punto2.Y);
                tbPunto2Z.Text        = Racional.AString(punto2.Z);
                ventanagrafica.Escala = 0.85F;
                btIsometrica.PerformClick();
                // sbAngulox.Value = 30;
                //  sbAnguloY.Value = -25;
                //  sbAnguloZ.Value = 65;
            }


            if (!directa)
            {
                ventanagrafica.PintarPunto(punto1, 10, true, Color.Red);
                ventanagrafica.PintarPunto(punto2, 10, true, Color.GreenYellow);
                lbExplicacion.Text = " La distancia entre los dos puntos, es igual a la raiz cuadrada de la suma de los cuadrados de las diferencias de sus coordenadas respectivas. \nEs decir: Distancia = √ ( " + tbPunto1X.Text + " - " + tbPunto2X.Text + ")^2 + ( " + tbPunto1Y.Text + " - " + tbPunto2Y.Text + " )^2 + ( " + tbPunto1Z.Text + " - " + tbPunto2Z.Text + " )^2";
            }
            if (directa)
            {
                lbExplicacion.Text = " La distancia entre los puntos es: " + new Vector(punto1, punto2).ModuloDecimal().ToString();
                ventanagrafica.PintarVector(punto1, punto2, Color.CadetBlue, 5, true);
                btContinuar.Hide();
            }

            if (!defecto)
            {
                btAjustar.PerformClick();
                btIsometrica.PerformClick();
            }
        }
Ejemplo n.º 29
0
        /// <summary>
        ///
        ///  CONSTRUYE UNA MATRIZ DE LA MISMA DIMENSION QUE LA MATRIZ DE LA QUE SE QUIERE OBTENER
        ///  LA ADJUNTA PARA DAR EL RESULTADO
        ///  ,
        /// </summary>

        private void ConstruirAdjunta()
        {
            if (defecto)
            {
                matrizracional = new Racional[orden, orden];
                for (int i = 0; i < matriz.GetLength(0); i++)
                {
                    for (int j = 0; j < matriz.GetLength(0); j++)
                    {
                        matrizracional[i, j] = Racional.StringToRacional(matriz[i, j].Text);
                    }
                }
            }
            if (!directa)
            {
                lbExplicacion.Text = "La matriz adjunta es del mismo tamaño que la matriz inicial.";
            }
            else
            {
                lbExplicacion.Text = "";
            }
            int indicetabulador = 0;

            adjunta = new Label[orden, orden];
            Point origen = new Point(70 + (matriz.GetLength(0) * 100), 200);

            label2.Location  = new Point(90 + (matriz.GetLength(0) * 100), label1.Location.Y);
            label2.Font      = label1.Font;
            label2.Text      = "Matriz adjunta";
            label2.BackColor = Color.SeaGreen;
            label2.Show();
            for (int i = 0; i < orden; i++)
            {
                for (int j = 0; j < orden; j++)
                {
                    adjunta[i, j]           = new Label();
                    adjunta[i, j].BackColor = Color.White;
                    adjunta[i, j].Size      = new Size(50, 20);
                    adjunta[i, j].Location  = origen;
                    adjunta[i, j].TabIndex  = indicetabulador;
                    adjunta[i, j].TextAlign = ContentAlignment.MiddleCenter;
                    Controls.Add(adjunta[i, j]);
                    adjunta[i, j].Show();
                    origen.X += 60;
                    indicetabulador++;
                }
                origen.X  = 70 + (matriz.GetLength(0) * 100);
                origen.Y += 30;
            }
            if (directa)
            {
                Racional[,] resultado = Matematicas.AlgebraLineal.Adjunta(matrizracional);
                for (int i = 0; i < orden; i++)
                {
                    for (int j = 0; j < orden; j++)
                    {
                        adjunta[i, j].Text      = Racional.AString(resultado[i, j]);
                        adjunta[i, j].BackColor = Color.YellowGreen;
                    }
                }
            }
            else
            {
                filaactual             = 0;
                columnaactual          = 0;
                lbExplicacion.Location = new Point(10, 5);
                lbExplicacion.Show();
                if (!directa)
                {
                    btContinuar.Location = new Point(100, matriz[matriz.GetLength(0) - 1, 0].Location.Y + 50);
                    btContinuar.Show();
                }
                resultado = Matematicas.AlgebraLineal.Adjunta(matrizracional);
            }
            lbExplicacion.Focus();
        }
Ejemplo n.º 30
0
        /// <summary>
        ///
        ///  LLEVA A CABO LA EXPLICACION PASO A PASO DEL METODO DE RESOLUCION ELEGIDO ANTERIORMENTE
        ///
        /// </summary>

        private void Resolucion()
        {
            if (diagonales) // Resolucion por el metodo de las diagonales
            {
                label3.Location  = new Point(label2.Location.X, label2.Location.Y + label2.Size.Height + 10);
                label3.BackColor = label1.BackColor;
                label4.Location  = new Point(label3.Location.X, label3.Location.Y + label3.Height + 10);
                label3.AutoSize  = true;
                label4.Location  = new Point(label3.Location.X, label3.Location.Y + label3.Height + 10);

                bool ordendos = (matriz.GetLength(0) == 2); // Si la matriz es de orden dos

                lbExplicacion.Text = " Realizamos la misma operacion con todas las diagonales a la derecha.";

                producto = new Racional(1, 1);
                if ((!ordendos & paso < matriz.GetLength(0)) || (ordendos & paso == 0))  // Mientras no se llegue a todas las diagonales a la derecha
                {
                    DespintarCajas();
                    string planteamiento = PintarDiagonal(matriz, paso, Color.GreenYellow, ref producto);
                    label1.Text = planteamiento + " " + Racional.AString(producto);

                    label2.Show();
                    if (producto.Numerador >= 0)
                    {
                        label2.Text += " + ";
                    }
                    if (paso == matriz.GetLength(0))
                    {
                        label2.Text += " = ";
                    }

                    label2.Text += Racional.AString(producto);

                    productos.Add(producto);
                }
                else if ((!ordendos && paso == orden) || (ordendos && paso == 1))// Cuando se hayan realizado todas las diagonales a la derecha
                {
                    Racional totalderecha = 0;
                    foreach (Racional r in productos)
                    {
                        totalderecha += r;
                    }
                    label3.Show(); // Etiqueta para el resultado de las diagonales a la derecha
                    label3.Text      = "Total derecha: " + Racional.AString(totalderecha);
                    label3.Location  = new Point(label2.Location.X, label2.Location.Y + label2.Size.Height + 10);
                    label3.BackColor = label1.BackColor;

                    lbExplicacion.Text = " Una vez realizado el producto de todas las diagonales a la derecha, los sumamos y procedemos a realizar el producto de los elementos de las diagonales a la izquierda.";
                }
                else // Productos de las diagonales a la izquierda
                {
                    if ((!ordendos && descontador >= 0) || (ordendos && paso == 2))
                    {
                        if (descontador == orden - 1)
                        {
                            lbExplicacion.Text = "Comenzamos con el producto de la primera diagonal a la izquierda.";
                        }
                        else
                        {
                            lbExplicacion.Text = " Continuamos realizando el producto de la siguiente diagonal hacia la izquierda: ";
                        }

                        DespintarCajas();
                        producto = 1;
                        string planteamiento = PintarDiagonalIzquierda(matriz, descontador, Color.Coral, ref producto);
                        label1.Text = planteamiento + " = " + Racional.AString(producto);
                        productosizquierda.Add(producto);
                        if (descontador == matriz.GetLength(0) - 1)
                        {
                            label2.Text = " ";
                            label2.Text = "Memo: " + Racional.AString(producto);
                        }
                        else
                        {
                            if (producto.Numerador >= 0)
                            {
                                label2.Text += " + ";
                            }
                            label2.Text += Racional.AString(producto);
                        }
                        descontador--;
                    }
                    else
                    {
                        label2.Text        = " ";
                        lbExplicacion.Text = " Por ultimo restamos al total de la suma de productos de las diagonales a la derecha, el total de la suma de productos de las diagonales a la izquierda. ";
                        Racional totalizquierda = 0;
                        label1.Text = "  ";
                        foreach (Racional r in productosizquierda)
                        {
                            totalizquierda += r;
                        }
                        label4.Show();
                        label4.BackColor = Color.SeaGreen;
                        label4.Text      = "Toltal izquierda:  " + Racional.AString(totalizquierda);
                        Racional totalderecha = 0;
                        foreach (Racional r in productos)
                        {
                            totalderecha += r;
                        }
                        label1.Text = " El determinante o módulo de la matriz es: " + Racional.AString(totalderecha) + " - " + Racional.AString(totalizquierda) + " = " + Racional.AString(totalderecha - totalizquierda);
                        btContinuar.Hide();
                        foreach (TextBox t in matriz)
                        {
                            t.BackColor = Color.White;
                        }
                        lbExplicacion.Focus();
                    }
                }
            } // Fin de la resolucion por el metodo de las diagonales
            else if (menores) // Resolucion por el metodo de las menores principales
            {
                if (paso == 0) // primer paso de la resolucion
                {
                    productos.Clear();
                    producto = 0;
                    btContinuar.Show();
                    btContinuar.Location = new Point(900, 150);
                    radioButton1.Hide();
                    radioButton2.Hide();
                    radioButton3.Hide();
                    EtiquetaFilas.Hide();
                    tbFilas.Hide();
                    label1.BackColor = Color.SeaGreen;
                    label2.BackColor = Color.SeaGreen;
                    // Pintar de negro la fila y columna correspondiente
                    PintarFilaColumna(matriz, 0, 0, Color.Black);
                    lbExplicacion.Focus();
                    // Escribir explicacion en la etiqueta
                    lbExplicacion.Text  = " Primero extraemos la submatriz formada por los elementos cuya fila o columna, no coincida con el elemento numero " + paso.ToString() + " de la matriz, y calculamos el determinante de la misma.";
                    lbExplicacion.Text += " \n\r Mulplicamos el determinante de la submatriz " + Racional.AString(determinantemenor) + " por el elemento numero " + paso.ToString() + " de la matriz. ";
                    lbExplicacion.Text += " \n\r Como el indice del elemento 0 de la matriz es par, guardamos el resultado sin mas.";
                    // Mostrar el planteamiento
                    label1.Show();
                    label1.Location = new Point(matriz[0, 0].Location.X, matriz[matriz.GetLength(0) - 1, 0].Location.Y + matriz[0, 0].Height + 10);
                    label1.Text     = Racional.AString(determinantemenor) + " * " + matriz[0, 0].Text + " = " + Racional.AString(determinantemenor * Racional.StringToRacional(matriz[0, 0].Text));
                    // Mostrar el resultado anterior
                    label2.Show();
                    label2.Location = new Point(label1.Location.X, label1.Location.Y + label1.Height + 10);
                    label2.Text     = "Memo: " + Racional.AString(determinantemenor * Racional.StringToRacional(matriz[0, 0].Text));
                    productos.Add(determinantemenor * Racional.StringToRacional(matriz[0, 0].Text));
                    filaactual    = 0;
                    columnaactual = 1;
                    paso++;
                }
                else if (paso > 0)  // pasos posteriores al primero hasta llegar al orden de la matriz
                {
                    if (paso < matriz.GetLength(0))
                    {
                        // Pintar de negro la fila y columna correspondiente
                        PintarFilaColumna(matriz, filaactual, columnaactual, Color.Black);
                        // Escribir la explicacion en la etiqueta
                        lbExplicacion.Text  = " Continuamos extrayendo la submatriz formada por los elementos cuya fila o columna, no coincida con el elemento numero " + paso.ToString() + " de la matriz, y calculamos el determinante de la misma.";
                        lbExplicacion.Text += " Mulplicamos el determinante de la submatriz " + Racional.AString(determinantemenor) + " por el elemento numero " + paso.ToString() + " de la matriz. ";
                        if (paso % 2 == 0)
                        {
                            lbExplicacion.Text += " \n\r Como el indice del elemento" + paso.ToString() + "  de la matriz es par, guardamos el resultado sin mas.";
                            label1.Show();
                            label1.Text = Racional.AString(determinantemenor) + " * " + matriz[filaactual, columnaactual].Text + " = " + Racional.AString(determinantemenor * Racional.StringToRacional(matriz[filaactual, columnaactual].Text));
                            label2.Show();
                            Racional parcial = determinantemenor * Racional.StringToRacional(matriz[filaactual, columnaactual].Text);
                            if (parcial.Numerador >= 0)
                            {
                                label2.Text += " + ";
                            }
                            label2.Text += Racional.AString(parcial);
                            productos.Add(determinantemenor * Racional.StringToRacional(matriz[filaactual, columnaactual].Text));
                        }
                        else
                        {
                            lbExplicacion.Text += " \n\r Como el indice del elemento " + paso.ToString() + " de la matriz es impar, cambiamos el signo del resultado";
                            label1.Show();
                            label1.Text = Racional.AString(determinantemenor) + " * " + matriz[filaactual, columnaactual].Text + " = " + Racional.AString(determinantemenor * Racional.StringToRacional(matriz[filaactual, columnaactual].Text));
                            label2.Show();
                            Racional parcial = determinantemenor * Racional.StringToRacional(matriz[filaactual, columnaactual].Text) * -1;
                            if (parcial.Numerador >= 0)
                            {
                                label2.Text += " + ";
                            }
                            label2.Text += Racional.AString(parcial);

                            productos.Add(determinantemenor * Racional.StringToRacional(matriz[filaactual, columnaactual].Text) * -1);
                        }
                        columnaactual++;
                        if (columnaactual > matriz.GetLength(0) - 1)
                        {
                            columnaactual = 0;
                            filaactual++;
                        }
                    }
                    else
                    {
                        foreach (Racional r in productos)
                        {
                            producto += r;
                        }
                        label3.AutoSize  = true;
                        label3.Location  = new Point(label2.Location.X, label2.Location.Y + label2.Height + 10);
                        label3.BackColor = Color.SeaGreen;
                        label3.Show();
                        label3.Text = " El determinante de la matriz es la suma de los resultados anteriores: " + Racional.AString(producto);
                        foreach (TextBox t in matriz)
                        {
                            t.BackColor = Color.White;
                        }
                        label1.Hide();
                        lbExplicacion.Hide();
                        btContinuar.Hide();
                        label3.Focus();
                    }
                }
                ////////////////////////////////////
            }  // Fin de la resolucion por el metodo de las menores principales
            // Resolucion por el metodo de Gauss.
            else if (gauss)
            {
                if (paso == 0)
                {
                    lbExplicacion.Focus();
                    foreach (TextBox t in matriz)
                    {
                        t.Location = new Point(t.Location.X + (100 * matriz.GetLength(0)), t.Location.Y);
                    }

                    copiamatriz = new TextBox[matriz.GetLength(0), matriz.GetLength(0)];
                    for (int i = 0; i < matriz.GetLength(0); i++)
                    {
                        for (int j = 0; j < matriz.GetLength(0); j++)
                        {
                            copiamatriz[i, j]           = new TextBox();
                            copiamatriz[i, j].Size      = matriz[i, j].Size;
                            copiamatriz[i, j].TextAlign = HorizontalAlignment.Center;
                            copiamatriz[i, j].Location  = new Point(matriz[i, j].Location.X - (90 * matriz.GetLength(0)), matriz[i, j].Location.Y);
                            Controls.Add(copiamatriz[i, j]);
                            copiamatriz[i, j].Text = matriz[i, j].Text;
                        }
                    }

                    label5.Location = new Point(copiamatriz[0, 0].Location.X, copiamatriz[0, 0].Location.Y - 20);
                    label5.Show(); // Titulo de la matriz
                    label5.Text      = "Matriz original.";
                    label5.BackColor = Color.SeaGreen;
                    label5.Font      = new Font("Dejavu Sans", 10, FontStyle.Underline);
                    label6.Location  = new Point(matriz[0, 0].Location.X, label5.Location.Y);
                    label6.Show(); // Titulo de la matriz copia
                    label6.Text      = "Matriz copia.";
                    label6.Font      = label5.Font;
                    label6.BackColor = Color.SeaGreen;
                    filaactual       = 0;
                    columnaactual    = 0;
                    productos.Clear();
                    producto = 0;
                    btContinuar.Show();
                    btContinuar.Location = new Point(900, 150);
                    radioButton1.Hide();
                    radioButton2.Hide();
                    radioButton3.Hide();
                    EtiquetaFilas.Hide();
                    tbFilas.Hide();
                    lbExplicacion.Show();

                    lbExplicacion.Text  = " Para empezar, tenemos que convertir todos los elementos por debajo del primer elemento de la diagonal principal, en cero. ";
                    producto            = Racional.StringToRacional(matriz[filaarestar, columnaaconvertir].Text) / Racional.StringToRacional(matriz[columnaaconvertir, columnaaconvertir].Text);
                    lbExplicacion.Text += " \n\r Para ello,comenzamos dividiendo el elemento debajo del primer elemento de la diagonal principal por este, y guardamos el cociente.";
                    lbExplicacion.Text += " \n\r Este cociente, lo multiplicamos a cada elemento de la primera fila, y el resultado se lo restamos a cada elemento de la segunda.";

                    label1.Location = new Point(matriz[0, 0].Location.X, matriz[matriz.GetLength(0) - 1, 0].Location.Y + matriz[0, 0].Height + 10);
                    label1.Show();
                    label1.BackColor = Color.SeaGreen;
                    label1.Text      = matriz[filaarestar, columnaaconvertir].Text + " / " + matriz[columnaaconvertir, columnaaconvertir].Text + " = " + Racional.AString(producto);
                    label2.Show();
                    label2.BackColor = Color.SeaGreen;
                    label2.Location  = new Point(label1.Location.X, label1.Location.Y + label1.Height + 10);
                    label2.Text      = "Cociente = " + Racional.AString(producto);
                    filaactual       = 0;
                    label7.Show();
                    label7.BackColor = Color.SeaGreen;
                    label7.ForeColor = Color.Silver;
                    label7.Text      = "Secuencia de operaciones: ";
                    Temporizador1.Start();
                    paso++;
                }
                else if (paso > 0)
                {
                    lbExplicacion.Focus();
                    btContinuar.Hide();
                    label7.Text = "Secuencia de operaciones:  ";
                    // Si ya se ha alcanzado la ultima fila a pero quedan columnas por convertir a cero los elementos por debajo de la diagonal principal
                    if (filaarestar > matriz.GetLength(0) - 1 && columnaaconvertir < matriz.GetLength(0) - 1)
                    {
                        foreach (TextBox t in matriz)
                        {
                            t.BackColor = Color.White; // Repintar todas las celdas con fondo blanco
                        }
                        columnaaconvertir++;
                        filaarestar   = columnaaconvertir + 1;
                        filaactual    = columnaaconvertir;
                        columnaactual = columnaaconvertir;
                    }

                    // Fijar la cantidad de pasos a realizar para convertir todos los elemetos por debajo de la diagonal principal en cero
                    int limite = 0;

                    int orden = matriz.GetLength(0); // Orden de la matriz

                    while (orden > 0)                // Sumar la cantidad de pasos que seran necesarios para convertir la columna en cero
                    {
                        orden--;
                        limite += orden;
                    }

                    if (paso < limite)
                    {
                        lbExplicacion.Text = " Continuamos convitiendo en cero todos los elementos por debajo del elemento " + (paso + 1) + " de la diagonal principal de la matriz.";
                        producto           = Racional.StringToRacional(matriz[filaarestar, columnaaconvertir].Text) / Racional.StringToRacional(matriz[columnaaconvertir, columnaaconvertir].Text);
                        label1.Text        = matriz[filaarestar, columnaaconvertir].Text + " / " + matriz[columnaaconvertir, columnaaconvertir].Text + " = " + Racional.AString(producto);
                        label2.Text        = "Cociente = " + Racional.AString(producto);
                        Temporizador1.Start();
                    }
                    else
                    {
                        lbExplicacion.Text  = " Una vez convertidos en cero todos los elementos por debajo de la diagonal principal, hemos convertido la matriz en una matriz tringular.";
                        lbExplicacion.Text += "\r\n El determinante de las matrices triangulares, es el producto de los elementos de la diagonal principal: ";
                        label2.Hide();
                        label7.Hide();
                        string producto = " ";
                        // Racional resultado = 1;
                        for (int i = 0; i < matriz.GetLength(0); i++)
                        {
                            for (int j = 0; j < matriz.GetLength(0); j++)
                            {
                                if (i == j)
                                {
                                    producto += matriz[i, j].Text + " * ";
                                    // resultado *= Racional.StringToRacional(matriz[i, j].Text);
                                }
                            }
                        }
                        producto = producto.Substring(0, producto.Length - 2);
                        // label1.Text = producto + " = " + Racional.AString(resultado);
                        label1.MaximumSize = new Size(500, 200);
                        label1.Text        = producto + " = " + (Matematicas.AlgebraLineal.Determinante(matrizracional)).ToString();
                    }
                }
            }
        }