Esempio n. 1
0
        /// <summary>
        /// Evento que registramos para que cuando el usuario haya indicado el elemento que quiere añadir, al pulsar el boton esta se añada al listview
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void bAñadir_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                String tipoElemento = (selectorFiguras.SelectedItem as Label).Content.ToString();
                switch (tipoElemento)
                {
                case "Recta":    //Si el usuario quiere hacer una nueva recta
                    Recta r = new Recta(tipoElemento);
                    resumenFiguras.Items.Add(r);
                    añadirEnCanvas(r);
                    break;

                case "Texto":    //Si el usuario quiere hacer una nueva caja con texto
                    Texto t = new Texto(tipoElemento);
                    resumenFiguras.Items.Add(t);
                    añadirEnCanvas(t);
                    break;

                default:    //En otro caso, es una figura
                    Figura f = new Figura(tipoElemento);
                    resumenFiguras.Items.Add(f);
                    añadirEnCanvas(f);
                    break;
                }
            }
            catch (NullReferenceException) {
                MessageBox.Show("No has seleccionado un elemento para añadir", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
Esempio n. 2
0
        /// <summary>
        ///
        ///PINTA LOS VECTORES PERPENDICULARES DE LOS PLANOS , EL VECTOR PARALELO A LA LINEA DE
        ///INTERSECCION Y CONTINUA LA EXPLICACION
        ///
        ///
        /// </summary>
        ///
        private void PrepararResultado()
        {
            lbExplicacion.Text = " Una vez obtenido un punto de paso de la recta de intersección, falta obtener el vector paralelo a esa recta.\nEl vector paralelo a la recta, ha de ser un vector perpendicular a los vectores perpendiculares de los dos planos. Para obtener este vector, podemos calcular el producto cruz entre los vectores perpendiculares de los planos.";

            // Obtener el vector perpendicular a los vectores perpendiculares de los planos
            paralelo = Vector.ProductoCruz(plano1.VectorPerpendicular, plano2.VectorPerpendicular);
            if (!directa)
            {
                label2.Text     += "\n\nVector paralelo a la recta de intersección: \n" + paralelo.ToString();
                flotante.Height += 40;
            }
            // Construir la recta de interseccion
            interseccion = plano1.Interseccion(plano2);

            //Vector paralelo a la recta de interseccion
            paralelo = new Vector(new Punto("0 0 0"), new Punto(paralelo.Componentes));

            // Pintar los vectores perpendiculares
            Vector perpendicular1 = new Vector(new Punto("0 0 0"), new Punto(plano1.VectorPerpendicular.Componentes));
            Vector perpendicular2 = new Vector(new Punto("0 0 0"), new Punto(plano2.VectorPerpendicular.Componentes));


            ventanagrafica.PintarVector(interseccion.PuntoDePaso, new Punto(new Racional[3] {
                perpendicular1.Componentes[0] + interseccion.PuntoDePaso.X, perpendicular1.Componentes[1] + interseccion.PuntoDePaso.Y, perpendicular1.Componentes[2] + interseccion.PuntoDePaso.Z
            }), Color.DarkOrange, 4, false);
            ventanagrafica.PintarVector(interseccion.PuntoDePaso, new Punto(new Racional[3] {
                perpendicular2.Componentes[0] + interseccion.PuntoDePaso.X, perpendicular2.Componentes[1] + interseccion.PuntoDePaso.Y, perpendicular2.Componentes[2] + interseccion.PuntoDePaso.Z
            }), Color.SlateBlue, 4, false);

            ventanagrafica.PintarVector(interseccion.PuntoDePaso, new Punto(new Racional[3] {
                paralelo.Componentes[0] / 2 + interseccion.PuntoDePaso.X, paralelo.Componentes[1] / 2 + interseccion.PuntoDePaso.Y, paralelo.Componentes[2] / 2 + interseccion.PuntoDePaso.Z
            }), Color.Red, 4, false);


            ventanagrafica.Ventana.Invalidate();



            if (directa)
            {
                FinalizarResolucion();
            }
        }
Esempio n. 3
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();
            }
        }
Esempio n. 4
0
        /// <summary>
        ///
        /// DIBUJA LA RECTA, EL PUNTO , EL PLANO PERPENDICULAR A LA RECTA QUE PASA POR EL PUNTO E INICIA
        /// LA EXPLICACION
        ///
        /// </summary>
        ///
        private void IniciarResolucion()
        {
            btDefecto.Hide();

            if (defecto)
            {
                this.Focus();
                btContinuar.Visible = true;
                this.AcceptButton   = this.btContinuar;
                paso++;
                tbPunto1X.Text = "2";
                tbPunto1Y.Text = "6";
                tbPunto1Z.Text = "7";
                tbPunto2X.Text = "10";
                tbPunto2Y.Text = "-5";
                tbPunto2Z.Text = "15";
                tbPunto3X.Text = "10";
                tbPunto3Y.Text = "3";
                tbPunto3Z.Text = "2";
            }

            // 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;
            punto1 = new Punto(tbPunto1X.Text + " " + tbPunto1Y.Text + " " + tbPunto1Z.Text);
            punto2 = new Punto(tbPunto2X.Text + " " + tbPunto2Y.Text + " " + tbPunto2Z.Text);
            punto3 = new Punto(tbPunto3X.Text + " " + tbPunto3Y.Text + " " + tbPunto3Z.Text);

            if (directa)
            {
                lbExplicacion.Hide();
            }

            lbExplicacion.Text = " La distancia entre el punto y la recta, es el módulo del vector perpendicular a la recta que vá desde el punto a la recta.\n El punto inicial de ese vector, es el punto del que se quiere encontrar la distancia a la recta. El punto final de ese vector, será el punto de intersección de la recta con el plano perpendicular a la misma, y que pasa por el punto del que se quiere encontrar la distancia a la recta.";
            // Crear la recta
            linea1 = new Recta(punto1, punto2);

            // Pintar la linea
            ventanagrafica.PintarLinea(punto1, punto2, Color.DarkOrange, 5);
            // Pintar los puntos inicial y final del segmento de recta
            ventanagrafica.PintarPunto(punto1, 5, true, Color.DarkOrange);
            ventanagrafica.PintarPunto(punto2, 5, true, Color.DarkOrange);

            // Pintar el punto
            ventanagrafica.PintarPunto(punto3, 10, false, Color.Yellow);

            btIsometrica.PerformClick();
            btAjustar.PerformClick();

            if (directa)
            {
                ContinuarResolucion();
            }
            paso = 1;
        }
Esempio n. 5
0
        /// <summary>
        ///
        /// DIBUJA LOS PUNTOS, EL SEGMENTO DE LINEA Y EL VECTOR E INICIA LA EXPLICACION
        ///
        /// </summary>
        ///
        private void IniciarResolucion()
        {
            btIsometrica.PerformClick();
            if (defecto)
            {
                this.Focus();
                btContinuar.Visible = true;
                this.AcceptButton   = this.btContinuar;
                paso++;
                tbPunto1X.Text  = "-27";
                tbPunto1Y.Text  = "-61";
                tbPunto1Z.Text  = "17";
                tbPunto2X.Text  = "23";
                tbPunto2Y.Text  = "39";
                tbPunto2Z.Text  = "-8";
                tbPunto3X.Text  = "50";
                tbPunto3Y.Text  = "-30";
                tbPunto3Z.Text  = "20";
                tbPunto4X.Text  = "79/2";
                tbPunto4Y.Text  = "267/2";
                tbPunto4Z.Text  = "-37";
                sbAnguloZ.Value = 70;
                sbAnguloY.Value = -30;
                sbAngulox.Value = 30;
            }

            // 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;
            btDefecto.Hide();

            punto1 = new Punto(tbPunto1X.Text + " " + tbPunto1Y.Text + " " + tbPunto1Z.Text);
            punto2 = new Punto(tbPunto2X.Text + " " + tbPunto2Y.Text + " " + tbPunto2Z.Text);
            punto3 = new Punto(tbPunto3X.Text + " " + tbPunto3Y.Text + " " + tbPunto3Z.Text);
            punto4 = new Punto(tbPunto4X.Text + " " + tbPunto4Y.Text + " " + tbPunto4Z.Text);

            lbExplicacion.Text = " Primero construimos las ecuaciones paramétricas de las rectas que pasan por los puntos introducidos. ( Ecuación de la recta en el menu anterior. )";
            if (directa)
            {
                lbExplicacion.Hide();
            }

            // Dibujar los segmentos de las lineas entre los puntos introducidos
            ventanagrafica.PintarVector(punto1, punto2, Color.DarkOrange, 3F, true);
            ventanagrafica.PintarVector(punto3, punto4, Color.SlateBlue, 3F, true);
            if (defecto)
            {
                btAjustar.PerformClick();
            }

            // Mostrar las ecuaciones paramétricas de la rectas en un recuadro flotante
            linea1 = new Recta(punto1, punto2);
            linea2 = new Recta(punto3, punto4);
            if (!directa)
            {
                flotante      = new ControlesFlotantes();
                flotante.Text = " Desarrollo de la resolución";
                flotante.pnParametro.Show();
                flotante.Location = new Point(btContinuar.Location.X, btContinuar.Location.Y + 20);
                flotante.pnParametro.Controls.Add(label1);
                flotante.Show();
                flotante.Opacity = 1;
                flotante.lbTituloParametro.Text = "Ecuaciones paramétricas de la recta 1:";
                flotante.sbValor.Hide();
                flotante.tbParametro.Hide();
                flotante.StartPosition = FormStartPosition.Manual;
                flotante.Location      = new Point(pnDatos.Location.X, pnDatos.Location.Y + pnDatos.Height + 5);
                foreach (Ecuacion e in linea1.EcuacionesParametricas())
                {
                    //flotante.lbTituloParametro.Text += "\n" + e.ObtenerTerminoIzquierda(0).ToString() + " = " + e.ObtenerTerminoDerecha(0).ToString();
                    double coef1 = Math.Round(e.ObtenerTerminoIzquierda(0).Coeficiente.ToDouble(), 4);
                    double coef2 = Math.Round(e.ObtenerTerminoDerecha(0).Coeficiente.ToDouble(), 4);
                    String ecu1  = "\n" + e.ObtenerTerminoIzquierda(0).Variables[0] + " = " + coef2.ToString() + " " + e.ObtenerTerminoDerecha(0).Variables[0];
                    //  flotante.lbTituloParametro.Text += "\n" + e.ObtenerTerminoIzquierda(0).Variables[0] + " = " + coef2.ToString() +" " + e.ObtenerTerminoDerecha(0).Variables[0];

                    if (e.ObtenerLadoDerecho.Largo > 1 && e.ObtenerTerminoDerecha(1).Coeficiente.Numerador > 0)
                    {
                        // flotante.lbTituloParametro.Text += " + ";
                        ecu1 += " + ";
                    }
                    else
                    {
                        //flotante.lbTituloParametro.Text += " ";
                        ecu1 += " ";
                    }
                    if (e.ObtenerLadoDerecho.Largo > 1)
                    {
                        //flotante.lbTituloParametro.Text += Math.Round(e.ObtenerTerminoDerecha(1).Coeficiente.ToDouble(), 4).ToString() +" "+ e.ObtenerTerminoDerecha(1).Variables[0];
                        ecu1 += Math.Round(e.ObtenerTerminoDerecha(1).Coeficiente.ToDouble(), 4).ToString() + " " + e.ObtenerTerminoDerecha(1).Variables[0];
                    }
                    ecu1 = ecu1.Replace('P', 't');
                    flotante.lbTituloParametro.Text += ecu1;
                }
                // flotante.lbTituloParametro.Text += "\n" + e.ToString();
                flotante.lbTituloParametro.Text += "\nEcuaciones paramétricas de la recta 2:";

                foreach (Ecuacion e in linea2.EcuacionesParametricas())
                {
                    double coef3 = Math.Round(e.ObtenerTerminoIzquierda(0).Coeficiente.ToDouble(), 4);
                    double coef4 = Math.Round(e.ObtenerTerminoDerecha(0).Coeficiente.ToDouble(), 4);
                    string ecu2  = "\n" + e.ObtenerTerminoIzquierda(0).Variables[0] + " = " + coef4.ToString() + " " + e.ObtenerTerminoDerecha(0).Variables[0];
                    // flotante.lbTituloParametro.Text += "\n" + e.ObtenerTerminoIzquierda(0).ToString() + " = " + e.ObtenerTerminoDerecha(0).ToString();
                    if (e.ObtenerLadoDerecho.Largo > 1 && e.ObtenerTerminoDerecha(1).Coeficiente.Numerador > 0)
                    {
                        //flotante.lbTituloParametro.Text += " + ";
                        ecu2 += " + ";
                    }
                    else
                    {
                        //flotante.lbTituloParametro.Text += " ";
                        ecu2 += " ";
                    }
                    if (e.ObtenerLadoDerecho.Largo > 1)
                    {
                        // flotante.lbTituloParametro.Text += Math.Round(e.ObtenerTerminoDerecha(1).Coeficiente.ToDouble(), 4).ToString() + e.ObtenerTerminoDerecha(1).Variables[0];
                        ecu2 += Math.Round(e.ObtenerTerminoDerecha(1).Coeficiente.ToDouble(), 4).ToString() + e.ObtenerTerminoDerecha(1).Variables[0];
                    }
                    ecu2 = ecu2.Replace('P', 's');
                    flotante.lbTituloParametro.Text += ecu2;
                }
                flotante.lbTituloParametro.Anchor    = AnchorStyles.Top;
                flotante.lbTituloParametro.TextAlign = ContentAlignment.MiddleLeft;
                flotante.lbTituloParametro.Location  = new Point(flotante.lbTituloParametro.Location.X - 100, flotante.lbTituloParametro.Location.Y);
                flotante.Size             = new Size(450, 200);
                flotante.pnParametro.Size = new Size(430, 180);
            }
            if (!directa)
            {
                btIsometrica.PerformClick();
            }
            if (directa)
            {
                ContinuarResolucion();
            }
        }
Esempio n. 6
0
        /// <summary>
        ///
        /// DIBUJA EL PLANO, EL PUNTO  Y INICIA/ LA EXPLICACION
        ///
        /// </summary>
        ///
        private void IniciarResolucion()
        {
            btDefecto.Hide();

            if (defecto)
            {
                this.Focus();
                btContinuar.Visible = true;
                this.AcceptButton   = this.btContinuar;
                paso++;
                //Vector perpendicular
                tbPunto1X.Text = "2";
                tbPunto1Y.Text = "6";
                tbPunto1Z.Text = "3";
                //Punto de paso
                tbPunto2X.Text = "15";
                tbPunto2Y.Text = "26";
                tbPunto2Z.Text = "10";
                // Punto del que se quiere encontrar la distancia al plano
                tbPunto3X.Text = "50";
                tbPunto3Y.Text = "60";
                tbPunto3Z.Text = "45";
            }

            // 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;


            // Crear el vector perpendicular al plano
            perpendicular = new Vector(tbPunto1X.Text + " " + tbPunto1Y.Text + " " + tbPunto1Z.Text);
            // Crear el punto de paso del plano
            puntopasoplano = new Punto(tbPunto2X.Text + " " + tbPunto2Y.Text + " " + tbPunto2Z.Text);
            // Crear el punto del que se quiere encontrar la distancia al plano
            punto = new Punto(tbPunto3X.Text + " " + tbPunto3Y.Text + " " + tbPunto3Z.Text);
            // Crear el plano
            plano = new Plano(perpendicular, puntopasoplano);
            // Crear la recta perpendicular al plano y que pasa por el punto
            recta = new Recta(punto, plano.VectorPerpendicular);
            // Obtener el punto de interseccion de la recta con el plano
            puntointerseccion = plano.Interseccion(recta);

            // Punto oculto para establecer la escala
            Punto ficticio = plano.ADistanciaXY(35, 35);

            if (ficticio != null)
            {
                ventanagrafica.PintarVector(ficticio, ficticio, Color.Black, 1, false);
            }
            else
            {
                ficticio = new Punto("35 35 35");
                ventanagrafica.PintarVector(ficticio, ficticio, Color.Black, 1, false);
            }

            if (directa)
            {
                lbExplicacion.Hide();
            }

            lbExplicacion.Text = " La distancia entre el punto y el plano, es el módulo del vector que vá desde el punto inicial, al punto donde una recta perpendicular al plano y que pasa por el punto inicial, corta al plano.";

            // Calcular el tamaño del plano para que pase por el punto de interseccion con la recta perpendicular

            Racional dist = plano.PuntoDePaso.Distancia(puntointerseccion);

            int tamaño = (int)dist.ToDouble();

            if (tamaño == 0)
            {
                tamaño = 5;
            }

            // Pintar el plano
            ventanagrafica.PintarPlano(plano.VectorPerpendicular, puntointerseccion, 50 + tamaño, Color.Chartreuse);

            // Pintar el punto
            ventanagrafica.PintarPunto(punto, 10, true, Color.Coral);

            if (!directa)
            {
                btAjustar.PerformClick();
            }
            btIsometrica.PerformClick();

            if (directa)
            {
                ContinuarResolucion();
            }
            paso = 1;
        }
Esempio n. 7
0
        /// <summary>
        ///
        /// DIBUJA LA RECTA, EL PLANO  E INICIA LA EXPLICACION
        ///
        /// </summary>
        ///
        private void IniciarResolucion()
        {
            btDefecto.Hide();

            // Valores por defecto
            if (defecto)
            {
                this.Focus();
                btContinuar.Visible = true;
                this.AcceptButton   = this.btContinuar;
                paso++;
                tbPunto1X.Text = "33";
                tbPunto1Y.Text = "12";
                tbPunto1Z.Text = "8";
                tbPunto2X.Text = "3";
                tbPunto2Y.Text = "5";
                tbPunto2Z.Text = "10";
                tbPunto3X.Text = "4";
                tbPunto3Y.Text = "13";
                tbPunto3Z.Text = "-9";
                tbPunto4X.Text = "2";
                tbPunto4Y.Text = "-1";
                tbPunto4Z.Text = "3";
            }

            // 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;
            btDefecto.Hide();

            punto1 = new Punto(tbPunto1X.Text + " " + tbPunto1Y.Text + " " + tbPunto1Z.Text); // Punto inicial de la recta
            punto2 = new Punto(tbPunto2X.Text + " " + tbPunto2Y.Text + " " + tbPunto2Z.Text); // Punto final de la recta
            punto3 = new Punto(tbPunto3X.Text + " " + tbPunto3Y.Text + " " + tbPunto3Z.Text); // Punto de paso del plano
            punto4 = new Punto(tbPunto4X.Text + " " + tbPunto4Y.Text + " " + tbPunto4Z.Text); // Vector perpendicular al plano

            lbExplicacion.Text = " El punto de intersección, será un punto que estará a la vez en el plano y en la recta. Por lo tanto, el punto buscado debe cumplir tanto la ecuación de la recta, como la ecuación del plano.";
            if (directa)
            {
                lbExplicacion.Hide();
            }

            //   // Crear el objeto linea.
            linea1 = new Recta(punto1, punto2);

            // Dibujar el segmento de linea entre los puntos introducidos.
            ventanagrafica.PintarLinea(punto1, punto2, Color.DarkOrange, 3F);

            // Crear el objeto plano
            plano = new Plano(new Vector(punto4.Coordenadas), punto3);

            // Dibujar el plano segun el vector y punto de paso introducidos.
            Racional factor = plano.Interseccion(linea1).CoordenadaMaxima; // Para hacer el plano mas o menos grande segun donde esté el punto de interseccion

            ventanagrafica.PintarPlano(new Vector(punto4.Coordenadas), punto3, 50, Color.Chartreuse);

            // Mostrar la ecuacion paramétrica de la rectas
            if (!directa)
            {
                label1.Show();
            }
            label1.Location  = new Point(btContinuar.Location.X + btContinuar.Width + 5, btContinuar.Location.Y);// + btContinuar.Height + 10);
            label1.BackColor = Color.Transparent;
            label1.Font      = new Font(label1.Font.FontFamily, 10);
            label1.Text      = "Ecuaciones paramétricas de la recta:\n";

            foreach (Ecuacion e in linea1.EcuacionesParametricas())
            {
                // label1.Text += e.ToString() + "\n";
                label1.Text += e.ObtenerLadoIzquierdo.ToString() + " = " + Math.Round(e.ObtenerTerminoDerecha(0).Coeficiente.ToDouble(), 4).ToString();
                if (e.ObtenerTerminoDerecha(1).Coeficiente.Numerador > 0)
                {
                    label1.Text += " + ";
                }
                label1.Text += Math.Round(e.ObtenerTerminoDerecha(1).Coeficiente.ToDouble(), 4).ToString() + "p\n";
            }

            // Mostrar la ecuacion del plano
            if (!directa)
            {
                label2.Show();
            }
            label2.Location  = new Point(label1.Location.X, label1.Location.Y + label1.Height + 10);
            label2.Font      = label1.Font;
            label2.BackColor = Color.Transparent;
            label2.Text      = "Ecuación del plano: \n";
            label2.Text     += plano.ToString();

            btIsometrica.PerformClick();
            if (directa)
            {
                ContinuarResolucion();
            }

            paso = 1;
        }