示例#1
0
        public static void DibujarLinea(Linea linea)
        {
            double xInicio = linea.Inicio.GetXFlotante();
            double xFin = linea.Fin.GetXFlotante();
            double yInicio = linea.Inicio.GetYFlotante();
            double yFin = linea.Fin.GetYFlotante();

            double pendiente = linea.GetPendiente();

            double pasoY = 1;
            double pasoX = 1;

            if (pendiente == 0) pasoY = 0;
            else if (double.IsInfinity(pendiente)) pasoX = 0;
            else if (Math.Abs(yFin - yInicio) > Math.Abs(xFin - xInicio)) pasoX = Math.Abs(1/pendiente);
            else pasoY = Math.Abs(pendiente);

            if (yFin < yInicio) pasoY = -pasoY;
            if (xFin < xInicio) pasoX = -pasoX;

            double xIteracion = xInicio;
            double yIteracion = yInicio;

            while (((xIteracion >= xInicio && xIteracion <= xFin) ||
                (xIteracion <= xInicio && xIteracion >= xFin)) &&
                ((yIteracion >= yInicio && yIteracion <= yFin) ||
                (yIteracion <= yInicio && yIteracion >= xFin)))
            {
                Gl.glVertex2d(xIteracion, yIteracion);

                xIteracion = xIteracion + pasoX;
                yIteracion = yIteracion + pasoY;
            }
        }
示例#2
0
        public static void DibujarLinea(Linea linea)
        {
            int xInicio = linea.Inicio.GetXEntero();
            int xFin = linea.Fin.GetXEntero();
            int yInicio = linea.Inicio.GetYEntero();
            int yFin = linea.Fin.GetYEntero();

            int xIteracion, yIteracion, deltaX, deltaY, parametroDecision, incE, incNE, pasoX, pasoY;

            deltaX = xFin - xInicio;
            deltaY = yFin - yInicio;

            // Se determina que punto se usa para empezar y que punto para terminar
            if (deltaY < 0)
            {
                deltaY = -deltaY;
                pasoY = -1;
            }
            else pasoY = 1;

            if (deltaX < 0)
            {
                deltaX = -deltaX;
                pasoX = -1;
            }
            else pasoX = 1;

            xIteracion = xInicio;
            yIteracion = yInicio;

            Gl.glVertex2d(xIteracion, yIteracion);

            // Se cicla hasta llegar al extremo de la línea
            if (deltaX > deltaY)
            {
                parametroDecision = 2 * deltaY - deltaX;
                incE = 2 * deltaY;
                incNE = 2 * (deltaY - deltaX);
                while (!(xIteracion == xFin || yIteracion == yFin))
                {
                    xIteracion = xIteracion + pasoX;
                    if (parametroDecision < 0) parametroDecision = parametroDecision + incE;
                    else
                    {
                        yIteracion = yIteracion + pasoY;
                        parametroDecision = parametroDecision + incNE;
                    }

                    Gl.glVertex2d(xIteracion, yIteracion);
                }
            }
            else
            {
                parametroDecision = 2 * deltaX - deltaY;
                incE = 2 * deltaX;
                incNE = 2 * (deltaX - deltaY);
                while (yIteracion != yFin)
                {
                    yIteracion = yIteracion + pasoY;
                    if (parametroDecision < 0)
                    {
                        parametroDecision = parametroDecision + incE;
                    }
                    else
                    {
                        xIteracion = xIteracion + pasoX;
                        parametroDecision = parametroDecision + incNE;
                    }
                    Gl.glVertex2d(xIteracion, yIteracion);
                }
            }
        }