#include "diabolo.h" #include "synchro.h" #include "carte.h" #define indicemax 1000 double taille_carte,pas,vitesse; int bolo_carte,indice,ind_moy,debut_ligne,moy,sens_ligne; double dynamique; double seuil; double carte[nb_max_bolo][indicemax]; double xx[indicemax]; double yy[indicemax]; int flag_fin[indicemax],flag_sens[indicemax]; double xx0,yy0; //-------------------- fonction exec de la fenetre : trace_carte ------------------------------- void echelles(void); void retrace_carte(void); void exec_carte(int fen,int item,double valeur,...) { if(item>1000) item-=1000; // pour appeler le case pour tous les cara d'un edit texte switch(item) { case ouverture : gg->trace_ouvert=gg->trace_ouvert | 16 ; selectgra(fen); graph->taille_graduations=7; case cart_debut : echelles(); indice=0;ind_moy=0;sens_ligne=1;debut_ligne=1; // premier point a venir xx0=-0.5*(taille_carte-0.5*pas);yy0=-0.5*taille_carte; break; case fermeture : gg->trace_ouvert=gg->trace_ouvert & (255-16); // enleve le 16 break; case cart_taille_carte : case cart_pas : case cart_dynamique : case cart_bolo : case cart_vitesse : echelles(); break; case cart_retrace : retrace_carte(); break; default : break; } } void echelles(void) { double moyenne_double; taille_carte=litD(fenetre_annexe,cart_taille_carte,0); pas=litD(fenetre_annexe,cart_pas,0); vitesse=litD(fenetre_annexe,cart_vitesse,0); dynamique=litD(fenetre_annexe,cart_dynamique,0); bolo_carte=litD(fenetre_annexe,cart_bolo,0); selectgra(fenetre_annexe); graph->ymin=-0.5*(taille_carte+2*pas); graph->ymax=0.5*(taille_carte+2*pas); graph->ypas=pas; graph->xmin=-0.5*(taille_carte+2*pas); graph->xmax=0.5*(taille_carte+2*pas); graph->xpas=pas; graph->graduations=0; graph->grille=1; graph->aspect=-1; efface(fenetre_annexe); // moyennes par demi pas en x moyenne_double= pas * 0.5 /( gg->periode_echantillonage * vitesse ); if(gg->trace_ouvert&32) moyenne_double/=(double)synchro_periode; // pour mesure avec Detection synchrone moy=(int)(moyenne_double+0.5); if(moy<1) moy=1; printf("moyennes calculee sur %6.2f points soit m=%d \n",moyenne_double,moy); } void trace_carte(double * y) { int j; // calculer le nombre de points de mesure dans un pas a la vitesse // gg->periode_echantillonage contient la duree entre deux points de mesure (pour diabolo) if( (!(gg->don.sync[sync_scan]&&gg->don.sync[sync_subscan])) && (indice==0) ) return; if( (!gg->don.sync[sync_subscan]) && (indice>2) && (debut_ligne<3) ) debut_ligne=2; // entre deux subscan if(ind_moy==0) for(j=0;j=moy) && (indice0)rectangle(fenetre_annexe,xx0-0.25*pas,yy0-0.5*pas,xx0+0.25*pas,yy0,couleur_degrade); else rectangle(fenetre_annexe,xx0-0.25*pas,yy0,xx0+0.25*pas,yy0+0.5*pas,couleur_degrade); if(debut_ligne==1) { debut_ligne=0; // premier point printf(" debut_ligne indice=%d : x=%g y=%g valeur=%g couleur=%d \n",indice,xx0,yy0,carte[8][indice],couleur_degrade); } indice++; } if( (debut_ligne==2) && (!gg->don.sync[sync_scan]) ) { debut_ligne=3; // fin de carte son(133); printf("fin de carte \n\n"); } if(gg->don.sync[sync_subscan]) { if(debut_ligne==2) // prepare pour mesure premier point { sens_ligne=-sens_ligne; if(sens_ligne>0) yy0+=pas; xx0=-0.5*sens_ligne*(taille_carte-0.5*pas); debut_ligne=1; ind_moy=0; // premier point } if(!debut_ligne) // prepare pour mesure point suivant { xx0+=sens_ligne*0.5*pas; if( (xx0<0.5*taille_carte) && (xx0>-0.5*taille_carte) ) ind_moy=0; } } } } void retrace_carte(void) { int i,k,kk,couleur_degrade; double sx,sy,sx2,sxy,n,a,b; // pour le fit lineaire efface(fenetre_annexe); // calcul dynamique automatique dynamique=0.000000001; for(i=0;i0.25*taille_carte) ou (xx[i+k]<-0.25*taille_carte) ) { n++; sx+=xx[i+k]; sy+=carte[bolo_carte-1][i+k]; sx2+=xx[i+k]*xx[i+k]; sxy+=xx[i+k]*carte[bolo_carte-1][i+k]; } k++; } while ( (k0) rectangle(fenetre_annexe,xx[i]-0.25*pas,yy[i]-0.5*pas,xx[i]+0.25*pas,yy[i],couleur_degrade); else rectangle(fenetre_annexe,xx[i]-0.25*pas,yy[i],xx[i]+0.25*pas,yy[i]+0.5*pas,couleur_degrade); } }