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
IR a: Bresenham 3D
IR a: Bresenham 3D