コード例 #1
0
        /// <summary>
        ///
        /// PINTA LA LINEA DE INTERSECCION, MUESTRA LA ECUACION PARAMETRICA DE LA MISMA  Y FINALIZA
        /// LA EXPLICACION
        ///
        ///
        /// </summary>
        ///
        private void FinalizarResolucion()
        {
            lbExplicacion.Text = " Con el punto de paso y el vector paralelo, ya tenemos definida la línea de intersección entre los planos.";

            //Pintar la linea de interseccion
            Punto ini = interseccion.SituacionPunto(100);
            Punto fin = interseccion.SituacionPunto(-100);

            ventanagrafica.PintarLinea(ini, fin, Color.Red, 2);



            // Mostrar la ecuacion parametrica de la recta de interseccion
            lbResultado.Text = "Ecuaciones paramétricas de la recta de intersección:\n";
            foreach (Ecuacion e in interseccion.EcuacionesParametricas())
            {
                lbResultado.Text += e.ToString() + "\n";
            }
            lbResultado.Show();
            lbResultado.Font = new Font(lbResultado.Font.FontFamily, 12);
            if (!directa)
            {
                lbResultado.Location = new Point(5, lbExplicacion.Height);
            }
            else if (directa)
            {
                lbResultado.Location = lbExplicacion.Location;
            }
            btContinuar.Hide();

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

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

            Racional distancia = plano.Distancia(punto);

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

            ventanagrafica.PintarLinea(a, b, Color.Red, 2);
            if (directa)
            {
                SeguirResolucion();
            }
            if (!directa)
            {
                ventanagrafica.Ventana.Invalidate();
            }
        }
コード例 #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>
        ///
        /// 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();
            }
        }
コード例 #5
0
ファイル: Distancia.cs プロジェクト: Xadnem53/Matedicom
        /// <summary>
        ///
        /// CONTINUA CON EL SEGUNDO PASO DE LA EXPLICACION EN EL METODO PASO A PASO
        ///
        /// </summary>
        ///
        private void btContinuar_Click(object sender, EventArgs e)
        {
            lbExplicacion.Text += " \n Esto es así, porque la distancia entre los dos puntos es la hipotenusa del triangulo rectangulo formado por el vector entre los puntos y sus proyecciones sobre los planos ortogonales.";
            // Pintar el vector
            ventanagrafica.PintarVector(punto1, punto2, Color.Chartreuse, 6, true);
            string pto1X;

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

            string pto1Y;

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

            string pto1Z;

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

            string pto2X;

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

            string pto2Y;

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

            string pto2Z;

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

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

            btContinuar.Click -= btContinuar_Click;
            btContinuar.Click += btContinuar2_Click;
            for (int i = 0; i < 3; i++)
            {
                btArriba.PerformClick();
            }
            ventanagrafica.Ventana.Invalidate();
        }
コード例 #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;
        }