Obtener distancia entre dos puntos declarados en un struct

publicado por: Anonymous

tengo un struct con diferentes parámetros, entre ellos, uno consistente en un punto de un plano, con una coordenada x y otra y.

Quiero crear una función que, a partir de dos puntos, calcule su distancia con la fórmula correspondiente. Mi problema es que no consigo enlazar valores para los puntos, y da resultados incoherentes.

Código:

#include <stdio.h>
#include <math.h>
#define N 20

struct Tpunto                   // punto en un plano, x abscisas, y ordenadas
{
    float x;
    float y;
};

struct TlistaPuntos            //Lista de puntos del plano
{
    int tam;                      //cantidad de valores en el vector puntos
    struct Tpunto puntos[N];
};

int distancia_puntos(struct Tpunto x, struct Tpunto y);


void main()
{
    struct Tpunto p1, p2;

    printf("nLa distancia entre los puntos %d y %d es %d", p1, p2, distancia_puntos(p1, p2));

    printf("nn");

}

int distancia_puntos(struct Tpunto punto1, struct Tpunto punto2)
{
    int resul=sqrt((pow(punto2.x-punto1.x, 2))+(pow(punto2.y-punto1.y, 2)));

    return resul;
}

solución

No estoy seguro si entiendo del todo tu consulta, pero por lo que puedo concluir tu problema es como asignar valores a las variables del struct. La asignación sería más o menos así:

void main()
{
  struct Tpunto p1, p2;
  p1.x = val_1_x // asignar valor para el punto1 en x
  p1.y = val_1_y // asignar valor para el punto1 en y

  p2.x = val_2_x // asignar valor para el punto2 en x
  p2.y = val_2_y // asignar valor para el punto2 en y

  //.. resto del código luego de la asignación
}

Además, como mencionan en uno de los comentarios, la función que calcula distancia deberías cambiarla para que retorne un valor float. Debería quedar algo como lo siguiente:

float distancia_puntos(struct Tpunto punto1, struct Tpunto punto2)
{
  return sqrt((pow(punto2.x-punto1.x, 2))+(pow(punto2.y-punto1.y, 2)));
}

Luego esto y almacenado los valores deseados en el struct, tus algoritmos deberían dar valores más coherentes.

Saludos

Respondido por: Anonymous

Leave a Reply

Your email address will not be published.