#include
#include
using namespace std;
float calcDistance(int num_pop_a, int num_pop_b, float* c_a,
float* c_b, int d_a,int d_b,int***mapping){
int d_max;
if(d_a > d_b)
d_max = d_a;
else
d_max = d_b;
float* dists = new float[d_max];
for(int i = 0; i < d_max; ++i)
if((mapping[num_pop_a][num_pop_b][2*i] == -1) ||
(mapping[num_pop_a][num_pop_b][(2*i)+1] == -1))
dists[i] = 0;
else
{
dists[i] = c_b[mapping[num_pop_a][num_pop_b][(2*i)+1]] - c_a[mapping[num_pop_a][num_pop_b][2*i]];
dists[i] *= dists[i];
}
float distance = 0;
for(int i = 0; i < d_max; ++i)
distance += dists[i];
return sqrt(distance);
}
//Fournir la distance entre 2 points situés dans des espaces de dimension kkonque.
// Si dimension différente pour les 2 espaces, les distances dans les dimension n'existant pas
//dans un des espaces sont nulles.
//Un "mapping" des coordonnées entre les espaces contenant l'élément pré et l'élément post est fourni
int main(int argc, char* argv[]){
int dim_e_A = 1;
int dim_e_B = 2;
float* coords_p_A = new float[dim_e_A];
float* coords_p_B = new float[dim_e_B];
//tableau contenant une matrice 2D représentant
// les projections possibles entre les espaces considérés
// ici A est dans un espace et B dans un autre
int*** mapping = new int**[2];
//Projections de l'espace de A
mapping[0] = new int*[2];
//Projections de l'espace de B
mapping[1] = new int*[2];
//Projection qu'on utilise ici A -> B
mapping[0][1] = new int[4];
//On indique dans la 3eme dimension du tableau
// les correspondances entre les dimensions des deux espaces
// considérés.
// Ici : A : 1 coords (X:0), B : 2 coords : (X:0,Y:1)
//le -1 indique 'pas de coordonnées'
//Dans cet exemple, X_A correspond à X_B
//mapping[0][1][0] = 0;
//mapping[0][1][1] = 0;
//mapping[0][1][2] = -1;
//mapping[0][1][3] = 1;
//Dans cet exemple, X_A correspond à Y_B
mapping[0][1][0] = -1;
mapping[0][1][1] = 0;
mapping[0][1][2] = 0;
mapping[0][1][3] = 1;
coords_p_A[0] = 2;
coords_p_B[0] = 1;
coords_p_B[1] = 5;
float distance = calcDistance(0,1,coords_p_A,coords_p_B,dim_e_A,dim_e_B,mapping);
cout << "distance A - B = " << distance << endl;
return 1;
};
Aucun commentaire:
Enregistrer un commentaire