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
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);
No hay comentarios:
Publicar un comentario