예제 #1
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();
        }
예제 #2
0
        /// <summary>
        ///
        /// DIBUJA LOS PLANOS
        ///
        /// </summary>
        ///
        private void IniciarResolucion()
        {
            btDefecto.Hide();

            if (defecto)
            {
                this.Focus();
                btContinuar.Visible = true;
                this.AcceptButton   = this.btContinuar;
                paso++;
                //Punto de paso 1
                tbPunto1X.Text = "0";
                tbPunto1Y.Text = "10";
                tbPunto1Z.Text = "10";
                //Vector perpendicular 1
                tbPunto2X.Text = "0";
                tbPunto2Y.Text = "10";
                tbPunto2Z.Text = "0";
                //Punto de paso 2
                tbPunto3X.Text = "0";
                tbPunto3Y.Text = "0";
                tbPunto3Z.Text = "20";
                //Vector perpendicular 2
                tbPunto4X.Text = "0";
                tbPunto4Y.Text = "0";
                tbPunto4Z.Text = "10";
            }

            // 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(tbPunto3X.Text + " " + tbPunto3Y.Text + " " + tbPunto3Z.Text);
            vector1 = new Vector(tbPunto2X.Text + " " + tbPunto2Y.Text + " " + tbPunto2Z.Text);
            vector2 = new Vector(tbPunto4X.Text + " " + tbPunto4Y.Text + " " + tbPunto4Z.Text);

            lbExplicacion.Text = " Todo punto de la línea de intersección entre los dos planos, pertenecerá a ambos. Por lo tanto,todo punto de la recta de intersección cumplirá las ecuaciones de los dos planos.";
            if (directa)
            {
                lbExplicacion.Hide();
            }
            // Construir los planos
            plano1 = new Plano(vector1, punto1);
            plano2 = new Plano(vector2, punto2);

            // Mostrar las ecuaciones de los planos
            label1.Show();
            label1.Location  = new Point(btContinuar.Location.X + btContinuar.Width + 5, btContinuar.Location.Y);
            label1.Font      = new Font(label1.Font.FontFamily, 10);
            label1.BackColor = Color.Transparent;
            label1.Text      = "Ecuación del plano1: \n" + plano1.EcuacionDelPlano().ToString() + " \n\n Ecuación del plano2: \n" + plano2.EcuacionDelPlano().ToString();


            // Dibujar los planos
            Vector escalado1 = new Vector(vector1);

            escalado1.MultiplicarPorEscalar(10);
            ventanagrafica.PintarPlano(escalado1, punto1, 50, Color.DarkOrange);
            ventanagrafica.PintarPlano(vector2, punto2, 50, Color.SlateBlue);

            // Punto oculto para que se ajuste la escala al tamaño de los planos
            Vector posicion1 = new Vector(plano1.PuntoDePaso.Coordenadas); // Vector de posicion del punto de paso del 1er plano
            Vector posicion2 = new Vector(plano2.PuntoDePaso.Coordenadas); // Vector de posicion del punto de paso del 2º plano

            if (posicion1.ModuloDecimal() > posicion2.ModuloDecimal())
            {
                Vector ampliado = new Vector(posicion1);
                ampliado.MultiplicarPorEscalar(10);
                oculto = new Punto(ampliado.Componentes);
            }
            else
            {
                Vector ampliado = new Vector(posicion1);
                ampliado.MultiplicarPorEscalar(2);
                oculto = new Punto(ampliado.Componentes);
            }
            ventanagrafica.PintarPunto(oculto, 1, false, Color.Black);

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

            if (directa)
            {
                ContinuarResolucion();
            }
            paso = 1;
        }
예제 #3
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;
        }
예제 #4
0
        /// <summary>
        ///
        /// DIBUJA EL PUNTO DE PASO,  EL VECTOR PERPENDICULAR, EL PLANO E INICIA LA EXPLICACION
        ///
        /// </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;
            // Establecer los valores por defecto
            if (defecto)
            {
                tbPunto1X.Text = "15"; tbPunto1Y.Text = "25"; tbPunto1Z.Text = "6";
                tbPunto2X.Text = "13"; tbPunto2Y.Text = "8"; tbPunto2Z.Text = "30";
            }
            punto1 = new Punto(tbPunto1X.Text + " " + tbPunto1Y.Text + " " + tbPunto1Z.Text);
            vector = new Vector(tbPunto2X.Text + " " + tbPunto2Y.Text + " " + tbPunto2Z.Text);
            plano  = new Plano(vector, punto1);

            lbExplicacion.Text = " Un plano en el espacio, se define por un punto de paso del plano, y un vector perpendicular al mismo.\n En la imagen puede verse el punto introducido en color naranja, el vector perpendicular en color azul y una porción del plano en color verde.";

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

            // Dibujar el vector perpendicular al plano
            ventanagrafica.PintarVector(new Punto("0 0 0"), new Punto(vector.Componentes), Color.SlateBlue, 5, true);
            //Dibujar el punto de paso del plano
            ventanagrafica.PintarPunto(punto1, 10, true, Color.DarkOrange);

            // Dibujar la porcion de plano
            ventanagrafica.PintarPlano(vector, punto1, 50, Color.Chartreuse);

            if (directa)
            {
                ContinuarResolucion();
            }
            btIsometrica.PerformClick();
            btAjustar.PerformClick();
            if (defecto)
            {
                btArriba.PerformClick();
                btArriba.PerformClick();
            }
            paso = 1;
        }
예제 #5
0
        /// <summary>
        ///
        /// VISUALIZA PARAMETRO PARA CADA RECTA, EL PUNTO DE INTERSECCION , EXTIENDE LAS RECTAS HASTA
        /// EL MISMO Y FINALIZA LA RESOLUCION
        ///
        ///
        /// </summary>
        ///
        private void FinalizarResolucion()
        {
            btContinuar.Hide();
            lbExplicacion.Text = " Resolviendo el sistema, se obtienen los parametros t y s que se han de aplicar a las ecuaciones parametricas de cada recta para obtener el punto de intersección.";

            Punto interseccion = linea1.Interseccion(linea2);

            if (linea1.EsParalela(linea2))
            {
                if (directa)
                {
                    lbResultado.Show();
                    lbResultado.Text = "Rectas paralelas.";
                }
                lbExplicacion.Text += "\nComo las lineas introducidas son paralelas, el punto de intersección entre ambas no existe2.";
            }
            else if (interseccion == null)
            {
                if (directa)
                {
                    label10.Show();
                    label10.Text      = "Las lineas se cruzan sin cortarse.";
                    label10.BackColor = Color.Chartreuse;
                    label10.Location  = btContinuar.Location;
                }
                lbExplicacion.Text += "\n Podemos observar que aplicando el parámetro correspondiente a las ecuaciones de cada recta, el resultado es distinto. Esto indica que las rectas no se cortan, sino que se cruzan sin llegar a coincidir en ningún punto.";

                // Alargar las dos rectas 100 unidades por los dos extremos
                Punto extension1 = linea1.SituacionPunto(100);

                //  ventanagrafica.PintarPunto(extension1, 10, false, Color.Pink);

                Punto extension2 = linea1.SituacionPunto(-100);
                Punto extension3 = linea2.SituacionPunto(100);
                Punto extension4 = linea2.SituacionPunto(-100);
                ventanagrafica.PintarLinea(extension1, extension2, Color.DarkOrange, 1);
                ventanagrafica.PintarLinea(extension3, extension4, Color.SlateBlue, 1);
            }
            else
            {
                lbExplicacion.Text += "\n Podemos observar, que aplicando el parámetro correspondiente a las ecuaciones de cada recta, el resultado es el mismo. Si el resultado fuese distinto, las rectas no se cortarian, pero en este caso se cortan en el punto indicado como se vé en el grafico.";
                // Puntos de paso de cada recta
                Punto a = linea1.PuntoDePaso;
                Punto c = linea2.PuntoDePaso;
                // Reducir la precision del punto de interseccion a tres decimales
                double intx      = Math.Round(interseccion.X.ToDouble(), 3);
                double inty      = Math.Round(interseccion.Y.ToDouble(), 3);
                double intz      = Math.Round(interseccion.Z.ToDouble(), 3);
                Punto  intersecc = new Punto(new Racional[] { intx, inty, intz });
                // Calcular parametro que será la distancia entre el punto de paso de cada recta y el punto de interseccion
                Vector vector1    = new Vector(a, intersecc);
                double parametro1 = Math.Round(vector1.Modulo().ARacional().ToDouble(), 4);
                Vector vector2    = new Vector(c, intersecc);
                double parametro2 = Math.Round(vector2.Modulo().ARacional().ToDouble(), 4);
                // Mostrar los parametros en el control flotante
                if (!directa)
                {
                    flotante.lbTituloParametro.Text += "\n\nt = " + parametro1 + "        s = " + parametro2;
                }
                lbResultado.Show();

                label10.Show();
                label10.Location  = btContinuar.Location;
                label10.BackColor = Color.Chartreuse;
                label10.Text      = "Punto de intersección de las rectas:\n ( x:" + Math.Round(interseccion.X.ToDouble(), 4).ToString() + " y: " + Math.Round(interseccion.Y.ToDouble(), 4).ToString() + " z: " + Math.Round(interseccion.Z.ToDouble(), 4).ToString();

                ventanagrafica.PintarPunto(interseccion, 20, true, Color.Chartreuse);
                ventanagrafica.PintarLinea(punto2, interseccion, Color.DarkOrange, 1);
                ventanagrafica.PintarLinea(punto4, interseccion, Color.SlateBlue, 1);
            }
            btCentrar.PerformClick();
            if (directa)
            {
                btIsometrica.PerformClick();
                btAjustar.PerformClick();
            }
        }
예제 #6
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();
            }
        }
예제 #7
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;
        }