Bresenham 2D

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.

(Si usas antivirus Avast has de añadir una exclusión para poder ejecutarlo. Para analizar este o cualquier otro archivo puedes hacer clic aquí)Programa escrito en FreeBasic, compatible con QBasic.The translation could modify the code. Use the code without translating or download the program clicking image above.
Dim    As Integer   x,  y, Incrd1, Incrd2, IncrXold, IncrXnew, IncrYold, IncrYnew 
Dim    As Integer   DistX, DistY, NumPixel, Decision, Bucle
Dim    As Integer   Xnew, Ynew, Xold, Yold
Screen 19 ' Pantalla gráfica 800x600
  
Xold=0
Yold=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 
Wend
End