El programa de abajo es el algoritmo de Bresenham para 3D; también puede funcionar con números enteros negativos. En pantalla verás los resultados de los números que se van sucediendo uno a uno. Adáptalo a tus necesidades, ya sea para hacer líneas en 3D o controlar 3 motores (ya sean paso a paso [PAP], servomotores o a través de encoders...) El programa es compatible con FreeBasic y Qbasic. Este es el programa: Dim As Integer Cont, dx, dy, dz, Adx, Ady, Adz, x_inc, y_inc, z_inc,_ err_1, err_2, dx2, dy2, dz2, xxx, yyy, zzz, Xold, Yold, Zold,_ Xnew, Ynew, Znew Screen 12 While 1 Input "X: ", Xnew Input "Y: ", Ynew
Input "Z: ", Znew
xxx=Xold yyy=Yold zzz=Zold dx = xnew - Xold dy = ynew - Yold dz = znew - Zold If (dx < 0) Then x_inc = -1 Else x_inc = 1 EndIf If (dy < 0) Then y_inc = -1 Else y_inc = 1 EndIf If (dz < 0) Then z_inc = -1 Else z_inc = 1 EndIf Adx = Abs(dx) Ady = Abs(dy) Adz = Abs(dz) dx2 = Adx*2 dy2 = Ady*2 dz2 = Adz*2 If ((Adx>= Ady) And (Adx>= Adz)) Then err_1 = dy2 - Adx err_2 = dz2 - Adx For Cont = 0 To Adx-1 If (err_1 > 0) Then yyy+= y_inc err_1 -= dx2 EndIf If (err_2 > 0) Then zzz+= z_inc err_2 -= dx2 EndIf err_1 += dy2 err_2 += dz2 xxx+= x_inc print xxx, yyy, zzz Next EndIf If ((Ady> Adx) And (Ady>= Adz)) Then err_1 = dx2 - Ady err_2 = dz2 - Ady For Cont = 0 To Ady-1 If (err_1 > 0) Then xxx+= x_inc err_1 -= dy2 EndIf If (err_2 > 0) Then zzz+= z_inc err_2 -= dy2 EndIf err_1 += dx2 err_2 += dz2 yyy+= y_inc print xxx, yyy, zzz Next EndIf If ((Adz> Adx) And (Adz> Ady)) Then err_1 = dy2 - Adz err_2 = dx2 - Adz For Cont = 0 To Adz-1 If (err_1 > 0) Then yyy+= y_inc err_1 -= dz2 EndIf If (err_2 > 0) Then xxx+= x_inc err_2 -= dz2 EndIf err_1 += dy2 err_2 += dx2 zzz+= z_inc print xxx, yyy, zzz Next EndIf Xold=xnew Yold=ynew Zold=znew Wend End
|