07 junio 2011

Movimiento entre dos puntos en línea recta

Hacer que algo se mueva en línea recta entre dos puntos de la pantalla no es difícil. Basta aplicar la ecuación "punto-pendiente" de la recta:

y - y1 = m (x-x1)

donde (x1,y1) son las coordenadas del punto por el que pasa la recta, y "m" es la pendiente de la recta.

Si lo queremos expresar en función de las coordenadas de dos puntos (x1,y1) y (x2,y2) en vez de usar la pendiente, los cambios no son muy grandes:

y = y1 + ((y2-y1)/(x2-x1)) * (x-x1)

De modo que conociendo x1, x2, y1, y2, podemos obtener la coordenada "y" que corresponde a cada punto "x" de la recta.

Un fuente que lo hiciera con algún intérprete de Basic sencillo y que permita dibujar, como Basic256, podría ser:

REM Datos del primer punto
x1 = 10
y1 = 20

REM Datos del segundo punto
x2 = 100
y2 = 205

REM Borrar pantalla gráfica
clg

REM Parte repetitiva
for x = x1 to x2 step 2
REM Recta con punto y pendiente : y - y1 = m (x - x1)
y = y1 + ((y2-y1) / (x2-x1)) * (x-x1)
plot x, y
pause 0.1
next x



Cuando se trata de un juego, el movimiento se suele repetir como parte del "bucle de juego", así que no existiría ese "for", porque de lo contrario, todo el juego se paralizaría mientras se mueve este elemento.

En este caso, se iría incrementando paso a paso, con algo que podría ser como (siguiendo la sintaxis del lenguaje C y sus derivados):

if (moviendo)
{
x += incrX;
y = y1 + ((y2-y1)/(x2-x1)) * (x-x1)
}
dibujar(x,y);