Durante los 10 a 15 minutos que tengo para entrevistar cara a cara a los que voy seleccionando, tengo que intentar descubrir lo mejor y lo peor de cada uno de los entrevistados. esta vez, la prueba que utilicé con bastantes de los llegados para ver si serían capaces de programar y de resolver problemas fue un algoritmo clásico de los inicios de la computación digital de los que se estudian en algorítmica y geometría computacional. "Dados dos puntos de una matriz, pintar una línea recta en una pantalla de píxeles pintando punto a punto."
Comentarios
yo subcontrataria a uno para que lo hiciese
Hace muchos años,hice un programa para eso precisamente. Un pseudoalgoritmo de la recta, punto a punto, para mover los motores de pasos de una máquina a traves de toda la trazada, punto a punto o sea paso a paso secuencialmente.
Lo resolví de esta manera, y funcionaba perfectamente y a toda leche. la rutina trazaba entre dos puntos dados x0,y0 y X1,Y1:
Public Sub TRAZA(x0 As Single,y0 As Single, X1 As Single,Y1 As Single)
difx = x1 - X0 'cateto (tú no,eh)
dify = y1 - Y0 'cateto (tú no,eh)
distanciadestino = Sqr( (difx*difx) + (dify*dify)) 'distancia al punto destino(hipotenusa)
incrX = difx / distanciadestino 'incrementos de x e y
incry = dify / distanciadestino 'incrementos de x e y
do while (c < distanciadestino)
c=c+1
puntoX = (c * incrX + x0)
puntoY = (c * incry + y0)
loop
END SUB
para mover los motores, calculaba la distancia de cada punto de la trazada hasta el punto final.
Aplicaba un AND con el 3 para coger solamente los 2 bits ultimos del valor de la distancia.
Esos 2 bits los atacaba directamente a los 4 pines de los motores y la secuencia iba a toda leche y perfecto.
line (x0,y0)-(X1,Y1)
#4 el comando line usa el bresenham que es el rey de los algoritmos de la recta ,pero no da la salida de todos los puntos de la recta que es de lo que se trata.
Yo probé con el bresenham pero la secuencia de los motores no iba limpia y la velocidad de calculo apenas variaba
https://es.wikipedia.org/wiki/Algoritmo_de_Bresenham