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; } }
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); } } }