Muchas gracias,
ya lo tengo más o menos desarrollado aunque tengo que hacer pruebas puesto que he tenido que hacer cambios al algoritmo:
class Program
{
static void Main(string[] args)
{
int xOrigen,yOrigen,xDestino,yDestino,metros;
xOrigen=80;
yOrigen =10;
xDestino=34;
yDestino =23;
metros=5;
while ((xOrigen != xDestino)||(yOrigen!=yDestino))
{
Console.WriteLine("X: " + xOrigen + "Y: " + yOrigen);
SiguientePosicion(xOrigen,yOrigen,xDestino,yDestino, metros, out xOrigen, out yOrigen);
}
Console.ReadLine();
}
static void SiguientePosicion(int x0, int y0, int x1, int y1, int metros, out int x, out int y)
{
int deltax = x1 - x0;
int deltay = Math.Abs(y1 - y0);
int error = deltax / 2;
int ystep, xstep,xdirection;
y = y0;
if (x0 < x1)
{
xdirection = 1;
}
else
{
xdirection = -1;
}
x = x0;
ystep = 0;
xstep = 0;
error = error - deltay;
if (error < 0)
{
if (y < y1)
{
if (Math.Abs(x - x1) > metros)
{
if (Math.Abs(y - y1) < metros / 2)
{
ystep = Math.Abs(y - y1);
}
else
{
ystep = metros / 2;
}
}
else
{
if (Math.Abs(y - y1) < metros)
{
ystep = Math.Abs(y - y1);
}
else
{
ystep = metros -(Math.Abs(x-x1));
}
}
}
else if (y > y1)
{
if (Math.Abs(x - x1) > metros)
{
if (Math.Abs(y - y1) < metros / 2)
{
ystep = -1*Math.Abs(y - y1);
}
else
{
ystep = -1*metros / 2;
}
}
else
{
if (Math.Abs(y - y1) < metros)
{
ystep = -1*Math.Abs(y - y1);
}
else
{
ystep = -1*metros - (Math.Abs(x - x1));
}
}
}
else
{
ystep = 0;
}
y = y + ystep;
if (Math.Abs(x - x1) < metros - Math.Abs(ystep))
{
xstep = Math.Abs(x - x1) * xdirection;
}
else
{
xstep = ((metros - Math.Abs(ystep)) * xdirection);
}
x = x+xstep;
error = error + deltax;
}
else
{
if (Math.Abs(x - x1) < metros - Math.Abs(ystep))
{
xstep = Math.Abs(x - x1) * xdirection;
}
else
{
xstep = ((metros - Math.Abs(ystep)) * xdirection);
}
x = x + xstep;
}
}
static void swap(out int x1, out int y1, int x2, int y2)
{
x1=y2;
y1=x2;
}
}
Un saludo.