Projet total V1
Dependencies: mbed
fonctions_distance.cpp
- Committer:
- Paolo804
- Date:
- 2016-06-15
- Revision:
- 0:eac65d0c5a1c
File content as of revision 0:eac65d0c5a1c:
#include <fonctions_distance.h> void init_tab_max(struct maximum tab[3], float acquisition){ int i; for (i=0;i<3;i++){ tab[i].valeur=acquisition; tab[i].indice=0; } } void init_tab_min(struct minimum tab[3], float acquisition){ int i; for(i=0;i<3;i++){ tab[i].valeur=acquisition; tab[i].indice=0; } } bool appartient_max(int i, struct maximum tab_max[3]){ int indice; bool state; state=false; for(indice=0;indice<3;indice++){ if (tab_max[indice].indice == i) state = true; } return state; } bool appartient_min(int i, struct minimum tab_min[3]){ int indice; bool state; state=false; for(indice=0;indice<3;indice++){ if (tab_min[indice].indice == i) state = true; } return state; } void have_max(float tab[NB_VALEURS], struct maximum tab_max[3]){ int i,j; for(j=0;j<3;j++){ for(i=0;i<NB_VALEURS;i++){ if (tab_max[j].valeur < tab[i] && appartient_max(i, tab_max) != true){ //La valeur du tableau est supérieure et aucune autre case du tabelau de structure ne contient cette valeur; tab_max[j].valeur=tab[i]; tab_max[j].indice=i; } } } } void have_min(float tab[NB_VALEURS], struct minimum tab_min[3]){ // A modifier avec la rejection de valeur; int i,j; for(j=0;j<3;j++){ for(i=0;i<NB_VALEURS;i++){ if (tab_min[j].valeur > tab[i] && appartient_min(i, tab_min) != true){ tab_min[j].valeur=tab[i]; tab_min[j].indice=i; } } } } //ALGO DETECTION DISTANCE float abs_minus(float a, float b){ float retour; if ((a-b)>=0) retour = a-b; else retour = b-a; return retour; } void init_struct(struct signal_caracteristiques tableau){ tableau.indice_max=0; tableau.indice_moyenne=0; tableau.indice_ecart=0; tableau.indice_rapport=0; } void verifff(struct distance signal, struct distance donnee[], struct signal_caracteristiques *signal_carac){ int i; init_struct(*signal_carac); for(i=1;i<9;i++){ if (abs_minus(signal.max, donnee[signal_carac->indice_max].max) > abs_minus(signal.max, donnee[i].max))signal_carac->indice_max=i; if (abs_minus(signal.moyenne, donnee[signal_carac->indice_moyenne].moyenne) > abs_minus(signal.moyenne, donnee[i].moyenne))signal_carac->indice_moyenne=i; if (abs_minus(signal.ecart, donnee[signal_carac->indice_ecart].ecart) > abs_minus(signal.ecart, donnee[i].ecart))signal_carac->indice_ecart=i; if (abs_minus(signal.rapport, donnee[signal_carac->indice_rapport].rapport) > abs_minus(signal.rapport, donnee[i].rapport))signal_carac->indice_rapport=i; } } void printf_SC(struct signal_caracteristiques sig){ printf("indice_max: %d\n", sig.indice_max); printf("indice_moyenne: %d\n", sig.indice_moyenne); printf("indice_ecart: %d\n", sig.indice_ecart); printf("indice_rapport: %d\n", sig.indice_rapport); } int calcul_distance_V1(struct distance signal, struct distance donnee[], struct signal_caracteristiques caracteristiques){ int distance; if (caracteristiques.indice_rapport < 3){ if (abs_minus(signal.rapport, donnee[0].rapport) <= abs_minus(signal.rapport, donnee[1].rapport)) distance = 20; else { if (abs_minus(signal.rapport, donnee[1].rapport) < abs_minus(signal.rapport, donnee[2].rapport)) distance = 30; else distance = 40; } } else{ if (abs_minus(signal.ecart, donnee[3].ecart) < abs_minus(signal.ecart, donnee[4].ecart)) distance = 50; else { if (signal.ecart < donnee[8].ecart) distance = 100; else if (signal.ecart < donnee[7].ecart) distance = 90; else if (signal.ecart < donnee[6].ecart) distance = 80; else if (signal.ecart < donnee[5].ecart) distance = 70; else distance = 60; } } return distance; } float convert_indice(int indice){ return indice*10+20; } float calcul_distance_V2(struct distance signal, struct signal_caracteristiques caracteristiques){ float distance; if(convert_indice(caracteristiques.indice_rapport) <= 40) distance = convert_indice(caracteristiques.indice_rapport); else if(convert_indice(caracteristiques.indice_ecart) == 100) distance = 100; else distance = 0.5*convert_indice(caracteristiques.indice_rapport) + 0.5*convert_indice(caracteristiques.indice_ecart); return distance; } //FIN ALGO DETECTION DISTANCE