Algoritmo de Bresenham clásico. El programa traza líneas pixel a pixel en cualquier sentido. Más sobre este versátil algoritmo aplicado a círculos, elipses y curvas Bézier, clic aquí. Y haciendo clic aquí podrás leer un artículo muy completo que abarca todos los algoritmos para trazar líneas con y sin antialiasing.
El programa y código fuente que pongo para descargar podrás introducir valores para X entre 0 y 800, para Y entre 0 y 600. Puedes introducir cualquier valor, incluso números negativos, pero fuera del rango de 800x600 no podrás ver las líneas.
Todos los algoritmos de Bresenham que encontrarás en esta web también funciona con números enteros negativos.
Dim As Integer x, y, Incrd1, Incrd2, IncrXold, IncrXnew, IncrYold, IncrYnew Dim As Integer DistX, DistY, NumPixel, Decision, BucleDim As Integer Xnew, Ynew, Xold, YoldScreen 19 ' Pantalla gráfica 800x600 Xold=0Yold=0 While (1) Input "Eje X:", Xnew Input "Eje Y:", Ynew DistX = Abs(Xnew - Xold) DistY = Abs(Ynew - Yold) If DistX >= DistY Then NumPixel = DistX + 1 Decision = (2 * DistY) - DistX Incrd1 = DistY * 2 Incrd2 = (DistY - DistX) * 2 IncrXold = 1 IncrXnew = 1 IncrYold = 0 IncrYnew = 1 Else NumPixel = DistY + 1 Decision = (2 * DistX) - DistY Incrd1 = DistX * 2 Incrd2 = (DistX - DistY) * 2 IncrXold = 0 IncrXnew = 1 IncrYold = 1 IncrYnew = 1 End If If Xold > Xnew Then IncrXold = -IncrXold IncrXnew = -IncrXnew End If If Yold > Ynew Then IncrYold = -IncrYold IncrYnew = -IncrYnew End If x = Xold y = Yold For Bucle = 1 To NumPixel PSet (x,y), 1 If Decision < 0 Then Decision = Decision + Incrd1 x = x + IncrXold y = y + IncrYold Else Decision = Decision + Incrd2 x = x + IncrXnew y = y + IncrYnew End If Next Bucle Xold = Xnew Yold = Ynew WendEnd