Mensaje dentro de Foro C#

camino entre dos puntos

Responder 
#1 - 25/02/2010 0:52:18 Reporta abuso | Link Permanente
sergiohj
Fecha de registro: 25/02/2010
0 post en este tema
1 post en foro c#
1 post en todos los foros
camino entre dos puntos

Responder Citar
Hola,

estoy desarrollando una aplicación que necesita calcular el camino que debería de recorrerse entre dos puntos y saber los puntos por los que voy pasando. Por ejemplo, imaginar que me encuentro en la posicion x=2 e Y=3 y mi objetivo es x=10 e y=6. Yo sé calcular la distancia entre estos dos puntos que sería de 8,54 unidades. Pues bien, mi problema viene al calcular el camino a seguir puesto que yo sólo puedo moverme 2 metros de mi posición cada vez. Por lo tanto, se que necesito 5 movimientos para llegar pero no sé como calcular los puntos intermedios por los que paso de la recta que une ambos puntos, que es el camino más corto. ¿Alguna idea o sugerencia para calcular dicho camino en coordenadas que se debe seguir para llegar al destino?

Gracias y un saludo.
Volver arriba

Respuestas
Mostrar de en 15
#2 - 10/03/2010 16:50:01 Reporta abuso | Link Permanente
Anonimo
Usuario no registrado
RE: camino entre dos puntos

Responder Citar
Habia un error. Esta es la buena


private void btnCalcular_Click(object sender, EventArgs e)
{
//Obtenemos el valor de los puntos
int origenX = Convert.ToInt32(this.txtOrigenX.Text); //2
int origenY = Convert.ToInt32(this.txtOrigenY.Text); //3
int finalX = Convert.ToInt32(this.txtFinalX.Text); //10
int finalY = Convert.ToInt32(this.txtFinalY.Text); //6

//Calculamos los catetos e hipotenusa del triangulo formado por los puntos anteriormente obtenidos
double catetoX = Math.Abs(origenX - finalX);
double catetoY = Math.Abs(origenY - finalY);
double hipotenusa = Math.Sqrt(Math.Pow(catetoX, 2) + Math.Pow(catetoY, 2));

//Calculamos la relación que existe entre la hipotenusa y uno de los catetos -> sen ? = cateto opuesto / hipotenusa
double razon = ((finalY - origenY) > 0) ? catetoY/hipotenusa : catetoX/hipotenusa;
//Cada tramo son 2 unidades
double tramo = 2;
//Calculamos el número de tramos es decir, el número de veces que necesitas saber el valor de 'x' e 'y'
int numTramos = Convert.ToInt32(hipotenusa/tramo);
//Array donde se guardan los par valores
double[,] array = new double[numTramos,2];
double puntoX, puntoY;
int tramoNumero = 0;
//Por cada tramo
while (tramo <= hipotenusa)
{
if ((finalY - origenY) > 0)
{
/*Anterior incorrecto
puntoX = Math.Sqrt(Math.Pow(tramo, 2) - Math.Pow(puntoY, 2));
puntoY = razon * tramo;
Fin anterior*/
//Correcto
puntoY = razon * tramo;
puntoX = Math.Sqrt(Math.Pow(tramo, 2) - Math.Pow(puntoY, 2));

}
else
{
puntoX = razon * tramo;
puntoY = Math.Sqrt(Math.Pow(tramo, 2) - Math.Pow(puntoX, 2));
}
array[tramoNumero,0] = puntoX;
array[tramoNumero,1] = puntoY;
tramo += 2;
tramoNumero++;
}
//En el array están los valores de 'x' e 'y' para hacer lo que quieras con ellos
Volver arriba

#3 - 10/03/2010 16:39:05 Reporta abuso | Link Permanente
Anonimo
Usuario no registrado
RE: camino entre dos puntos

Responder Citar
Espero que te sirva con este pequeño ejemplo

private void btnCalcular_Click(object sender, EventArgs e)
{
//Obtenemos el valor de los puntos
int origenX = Convert.ToInt32(this.txtOrigenX.Text); //2
int origenY = Convert.ToInt32(this.txtOrigenY.Text); //3
int finalX = Convert.ToInt32(this.txtFinalX.Text); //10
int finalY = Convert.ToInt32(this.txtFinalY.Text); //6

//Calculamos los catetos e hipotenusa del triangulo formado por los puntos anteriormente obtenidos
double catetoX = Math.Abs(origenX - finalX);
double catetoY = Math.Abs(origenY - finalY);
double hipotenusa = Math.Sqrt(Math.Pow(catetoX, 2) + Math.Pow(catetoY, 2));

//Calculamos la relación que existe entre la hipotenusa y uno de los catetos -> sen a = cateto opuesto / hipotenusa
double razon = ((finalY - origenY) > 0) ? catetoY/hipotenusa : catetoX/hipotenusa;
//Cada tramo son 2 unidades
double tramo = 2;
//Calculamos el número de tramos es decir, el número de veces que necesitas saber el valor de 'x' e 'y'
int numTramos = Convert.ToInt32(hipotenusa/tramo);
//Array donde se guardan los par valores
double[,] array = new double[numTramos,2];
double puntoX, puntoY;
int tramoNumero = 0;
//Por cada tramo
while (tramo <= hipotenusa)
{
if ((finalY - origenY) > 0)
{
puntoX = Math.Sqrt(Math.Pow(tramo, 2) - Math.Pow(puntoY, 2));
puntoY = razon * tramo;
}
else
{
puntoX = razon * tramo;
puntoY = Math.Sqrt(Math.Pow(tramo, 2) - Math.Pow(puntoX, 2));
}
array[tramoNumero,0] = puntoX;
array[tramoNumero,1] = puntoY;
tramo += 2;
tramoNumero++;
}
//En el array están los valores de 'x' e 'y' para hacer lo que quieras con ellos
}
Volver arriba
Mostrar de en 15

Hospedado en domitienda