Exemplo n.º 1
0
        /// <summary>
        ///
        ///DIBUJA EL PUNTO DE INTERSECCION DE LA RECTA CON EL PLANO, LO MUESTRA EN LA ETIQUETA Y SIGUE
        ///LA EXPLICACION
        ///
        ///
        /// </summary>
        ///
        private void SeguirResolucion()
        {
            lbExplicacion.Text = " Una vez obtenida la ecuación de la recta, hay que calcular el punto de intersección de la recta con el plano. ( Ver como calcular el punto de intersección entre recta y plano en el menú anterior. )";

            // Definir el punto de interseccion
            puntointerseccion = plano.Interseccion(recta);

            // Pintar el punto de interseccion
            ventanagrafica.PintarPunto(puntointerseccion, 10, false, Color.Yellow);

            // Mostrar el punto de interseccion en la etiqueta
            label1.Text += "\n Punto de Intersección entre recta y plano: \n" + Math.Round(puntointerseccion.X.ToDouble(), 4).ToString() + " X ; " + Math.Round(puntointerseccion.Y.ToDouble(), 4).ToString() + " Y ; " + Math.Round(puntointerseccion.Z.ToDouble(), 4).ToString() + " Z";


            if (!directa)
            {
                btZoomMas.PerformClick();
                btZoomMenos.PerformClick();
            }

            if (directa)
            {
                FinalizarResolucion();
            }
        }
Exemplo n.º 2
0
        /// <summary>
        ///
        ///DIBUJA EL PUNTO DE INTERSECCION DE LA RECTA CON EL PLANO, LO MUESTRA EN LA ETIQUETA Y SIGUE
        ///LA EXPLICACION
        ///
        ///
        /// </summary>
        ///
        private void SeguirResolucion()
        {
            lbExplicacion.Text = " Con la ecuación del plano y las ecuaciones parámetricas de la recta, calculamos el punto de intersección de la recta con el plano. ( De color rojo en el gráfico.)";
            if (!directa)
            {
                label1.Text += "\n\nPunto de intersección:\n";
                label1.Text += "X: " + Math.Round(plano.Interseccion(linea1).X.ToDouble(), 4).ToString();
                label1.Text += "\nY: " + Math.Round(plano.Interseccion(linea1).Y.ToDouble(), 4).ToString();
                label1.Text += "\nZ: " + Math.Round(plano.Interseccion(linea1).Z.ToDouble(), 4).ToString();
            }
            interseccion = plano.Interseccion(linea1);
            ventanagrafica.PintarPunto(interseccion, 12, false, Color.Red);
            ventanagrafica.EliminarLinea(0);
            ventanagrafica.PintarLinea(punto1, interseccion, Color.DarkOrange, 5);
            ventanagrafica.PintarLinea(interseccion, punto2, Color.FromArgb(10, Color.DarkOrange), 2);
            btCentrar.PerformClick();

            if (directa)
            {
                FinalizarResolucion();
            }
        }
Exemplo n.º 3
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();
        }
Exemplo n.º 4
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();
            }
        }
Exemplo n.º 5
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;
        }
Exemplo n.º 6
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;
        }