示例#1
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();
            }
        }
示例#2
0
        /// <summary>
        ///
        /// DIBUJA EL PLANO PERPENDICULAR A LA RECTA Y QUE PASA POR EL PUNTO , MUESTRA LA ECUACION DEL
        /// PLANO Y CONTINUA LA EXPLICACION
        ///
        /// </summary>
        ///
        private void ContinuarResolucion()
        {
            lbExplicacion.Text = "Construimos la ecuación del plano, con el punto del cual queremos conocer la distancia a la recta como punto de paso del plano, y el vector paralelo a la recta como vector perpendicular al plano.";

            Vector perpendicular = new Vector(punto1, punto2);

            // Construir el plano

            plano = new Plano(perpendicular, punto3);
            if (!directa)
            {
                // Mostrar la ecuacion del plano
                label1.Show();
                label1.Location  = new Point(btContinuar.Location.X, btContinuar.Location.Y + btContinuar.Height + 5);
                label1.BackColor = Color.Transparent;
                label1.Font      = new Font(label1.Font.FontFamily, 10);

                label1.Text = "Ecuación del plano:\n";
                foreach (Termino t in plano.EcuacionDelPlano().ObtenerLadoIzquierdo.Terminos)
                {
                    if (t.Coeficiente.Numerador > 0)
                    {
                        label1.Text += " + ";
                    }
                    label1.Text += Math.Round(t.Coeficiente.ToDouble(), 4).ToString() + t.Variables[0];
                }
                label1.Text += " = " + Math.Round(plano.EcuacionDelPlano().ObtenerTerminoDerecha(0).Coeficiente.ToDouble(), 4).ToString();
            }

            // Dibujar el plano
            long tamaño = (long)perpendicular.ModuloDecimal() * 2; // Para determinar el tamaño en funcion del largo de la recta

            ventanagrafica.PintarPlano(perpendicular, punto3, tamaño, Color.Chartreuse);
            btCentrar.PerformClick();

            if (directa)
            {
                SeguirResolucion();
            }
        }
示例#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();
            }
        }
示例#4
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;
        }
示例#5
0
        /// <summary>
        ///
        /// SUSTITUYE LOS VALORES X, Y, Z EN LA ECUACION DEL PLANO, POR LA ECUACION PARAMETRICA DE LA
        /// RECTA CORRESPONDIENTE Y REALIZA LAS OPERACIONES PASO A PASO PARA DESPEJAR EL VALOR DEL
        /// PARAMETRO P
        ///
        /// </summary>
        ///
        private void ContinuarResolucion()
        {
            lbExplicacion.Text = " Para encontrar el punto que está en la recta y en el plano seguimos los siguientes pasos:\n Sustituimos los valores x,y,z de la ecuación del plano por la correspondiente ecuación paramétrica de la recta, eliminamos parentesis, simplificamos y despejamos P.";
            if (!directa)
            {
                flotante = new ControlesFlotantes();
                flotante.Show();

                label3.Show();
                flotante.Controls.Add(label3);
                label3.Location        = new Point(5, 5);
                label3.BackColor       = Color.Transparent;
                label3.Font            = new Font(label3.Font.FontFamily, 12);
                label3.Text            = "Sustituir: \n";
                flotante.AutoSize      = true;
                flotante.StartPosition = FormStartPosition.Manual;
                flotante.Location      = new Point(pnDatos.Location.X - flotante.Width - 5, pnDatos.Location.Y + 20);
                flotante.Opacity       = 1;
                // ESCRIBIR EL DESARROLLO DE LAS SUSTITUCIONES EN LA ETIQUETA
                // Coeficientes de las incognitas en la ecuacion del plano en formato double
                double coeficientex = plano.EcuacionDelPlano().ObtenerTerminoIzquierda(0).Coeficiente.ToDouble();
                double coeficientey = plano.EcuacionDelPlano().ObtenerTerminoIzquierda(1).Coeficiente.ToDouble();
                double coeficientez = plano.EcuacionDelPlano().ObtenerTerminoIzquierda(2).Coeficiente.ToDouble();
                // Coeficiente del termino independiente de la ecuacion del plano en formato double
                independiente = plano.EcuacionDelPlano().ObtenerTerminoDerecha(0).Coeficiente.ToDouble();
                // Coordenadas del punto de paso de la recta en formato double
                double ax = punto1.X.ToDouble();
                double ay = punto1.Y.ToDouble();
                double az = punto1.Z.ToDouble();
                // Componentes del vector unitario paralelo a la recta en formato double
                double vpi = linea1.VectorParalelo.Componentes[0].ToDouble();
                double vpj = linea1.VectorParalelo.Componentes[1].ToDouble();
                double vpk = linea1.VectorParalelo.Componentes[2].ToDouble();

                label3.Text += Math.Round(coeficientex, 4).ToString() + " * (" + Math.Round(ax, 4).ToString();
                if (vpi > 0)
                {
                    label3.Text += " + ";
                }
                label3.Text += Math.Round(vpi, 4).ToString() + "P )";
                if (coeficientey > 0)
                {
                    label3.Text += " + ";
                }
                label3.Text += Math.Round(coeficientey, 4).ToString() + " * ( " + Math.Round(ay, 4).ToString();
                if (vpj > 0)
                {
                    label3.Text += " + ";
                }
                label3.Text += Math.Round(vpj, 4).ToString() + "P )";
                if (coeficientez > 0)
                {
                    label3.Text += " + ";
                }
                label3.Text += Math.Round(coeficientez, 4).ToString() + " * (" + Math.Round(az, 4).ToString();
                if (vpk > 0)
                {
                    label3.Text += " + ";
                }
                label3.Text += Math.Round(vpk, 4).ToString() + "P ) = " + Math.Round(independiente, 4).ToString();


                label3.Text += "\n\n Eliminar parentesis: \n";
                n1           = coeficientex * ax;
                p1           = coeficientex * vpi;
                n2           = coeficientey * ay;
                p2           = coeficientey * vpj;
                n3           = coeficientez * az;
                p3           = coeficientez * vpk;
                label3.Text += Math.Round(n1, 4).ToString();
                if (p1 > 0)
                {
                    label3.Text += " + ";
                }
                label3.Text += Math.Round(p1, 4).ToString() + "P";
                if (n2 > 0)
                {
                    label3.Text += " + ";
                }
                label3.Text += Math.Round(n2, 4).ToString();
                if (p2 > 0)
                {
                    label3.Text += " + ";
                }
                label3.Text += Math.Round(p2, 4).ToString() + "P";
                if (n3 > 0)
                {
                    label3.Text += " + ";
                }
                label3.Text += Math.Round(n3, 4).ToString();
                if (p3 > 0)
                {
                    label3.Text += " + ";
                }
                label3.Text += Math.Round(p3, 4).ToString() + "P = " + Math.Round(independiente, 4).ToString();

                // Determinar el parametro
                double sumap = p1 + p2 + p3;
                double suman = independiente + n1 * -1 + n2 * -1 + n3 * -1;
                parametro = suman / sumap;

                label3.Text += "\n\n Simplificar y despejar\n";
                label3.Text += "P = " + Math.Round(parametro, 4).ToString();
            }
            if (directa)
            {
                FinalizarResolucion();
            }
        }