[C] ecrire texte sur graph + dimensionnement

loenix Messages postés 2 Statut Membre -  
loenix Messages postés 2 Statut Membre -
merci d'avance

1 réponse

  1. loenix Messages postés 2 Statut Membre
     
    desolé il y a eu comme a petit probleme....

    mais bon

    bonjour a tous

    voila mon probleme:

    je dois realiser un programme en C qui consiste a tracer un diagramme de bode du 2 ordre
    mais voila j'arrive pa a ecrire du texte sur la courbe
    et pour different coeff d'amortissement que je donne la courbe dépasse de l'ecran pour revenir a gauche pour continué le tracé.
    si ca peur vous aider voila le code
    #include <stdio.h>
    #include <vga.h>
    #include <math.h>
    #define w 50000
    
    
    
    	char choix;
    	int i,x,y,k,l;
    	float modH[w+1],argH[w+1],courbe[w+1],m;
    	float W1[w+1],xmin=0.01,xmax=10,ymin,ymax;
    
    
    void presentation(void){
    	system("clear");
    
    	printf("\n                    ///////////////////////////////////////");
    	printf("\n                    /          Diagramme de BODE          /");
    	printf("\n                    /         Circuit du 2e Ordre         /");
    	printf("\n                    /            Realiser par:            /");
    	printf("\n                    /                                                   /");
    	printf("\n                    /                        loenix                   /");
    	printf("\n                    /              Groupe RLIA            /");
    	printf("\n                    ///////////////////////////////////////\n\n\n\n\n\n");
    }
    
    
    
    
    void trace_graduation(void){
    	int x0,y0;
    	x0=vga_getxdim();
    	y0=vga_getydim();
    	vga_drawline(0,0,x0,0);
    	vga_drawline(0,0,0,y0);
    	for(l=1;l<5;l++){
    		vga_drawline(l*200,10,l*200,0);
    			for(k=2;k<10;k++){
    			vga_drawline((log10(k)+(l-1))*200,5,(log10(k)+(l-1))*200,0);
    					}
    			}
    
    		for(l=0;l<600;l+=50)  vga_drawline(0,l,5,l);
    }
    
    
    void calcul_gain(void){
    	for(i=0;i<=w;i++){
    		W1[i]=(xmin+i*(xmax-xmin)/w);    //equation déterminant le nb de point entre les intervalle de la courbe
    		modH[i]=-20*(log10 (sqrt(pow((2*m*W1[i]),2)+pow(pow(W1[i],2)+1,2))));    //equation du module
    	}
    }
    
    void calcul_phase(void){
    	for(i=0;i<=w;i++){
    		W1[i]=(xmin+i*(xmax-xmin)/w);    //equation déterminant le nb de point entre les intervalle de la courbe
    		argH[i]= - atan (2*m*W1[i]+pow(W1[i],2));   //equation de la phase
    	}
    }
    
    
    
    void minmax(void){
    	if(choix=='m'){
    		for(i=0;i<w;i++) courbe[i]=modH[i];
    	}
    	if(choix=='p'){
    		for(i=0;i<w;i++) courbe[i]=argH[i];
    	}
    			ymin=courbe[0];
    			ymax=courbe[0];
    			for(i=1;i<=w;i++){
    				if(courbe[i]<ymin)	ymin=courbe[i];
    
    				if(courbe[i]>ymax)	ymax=courbe[i];
    
    			}
    }
    
    void trace_graph (void){
    	for(i=0;i<w;i++){
    		x=318*log10((W1[i]-xmin)/(xmax-xmin));
    		y=479-479*(courbe[i]-ymin)/(ymax-ymin);
    		vga_drawline(x,y,318*log10((W1[i+1]-xmin)/(xmax-xmin)),479-479*(courbe[i+1]-ymin)/(ymax-ymin));
    	}
    }
    
    
    
    int main(void){
    while(1){
    
     	presentation();
    	printf("---------------------Saisir la valeur de l'amortissement M---------------------\n");
    
    	scanf("%f",&m);
    
    	calcul_gain();	
    	vga_init();
    	vga_setmode(11);
    	vga_setcolor(3);
    
    	trace_graduation();
    	choix='m';
    	minmax();	
    	trace_graph();
    	choix=vga_getch();
    	if (choix =='p'){
    		calcul_phase();	
    		vga_init();
    		vga_setmode(11);	
    		vga_setcolor(4);
    		trace_graduation();
    		minmax();
    		trace_graph();
    	}
    	vga_getch();
    	vga_setmode(TEXT);
    
    }}
    

    je le compile avec:
    ccg tut.c

    pour ce qui est du texte j'ai essaié un ca (trace_graph modifié):
    
    ...............
    #include<vgagl.h>
    ........................
    void trace_graph (void){
    
    
    	if(choix!='p'){
    	 gl_setcontextvga(11);
    	 gl_setfont(8, 8, gl_font8x8); //largeur, hauteur, pointeur sur la police (c'est la seule 						en standard)
    	 gl_setwritemode(FONT_COMPRESSED);
    	 gl_setfontcolors(4,5);
    	 gl_printf(50,500,"Tapez P pour la phase");
    }
    
    
    
    	for(i=0;i<w;i++){
    		x=318*log10((W1[i]-xmin)/(xmax-xmin));
    		y=479-479*(courbe[i]-ymin)/(ymax-ymin);
    		vga_drawline(x,y,318*log10((W1[i+1]-xmin)/(xmax-xmin)),479-479*(courbe[i+1]-ymin)/(ymax-ymin));
    	}
    }
    

    et je compileavec
    gcc -o3 -o tut tut.c -lvgagl -lvga -lm

    mais lors de l'execution du graph ca me met :
    cannot get I/O permissions
    ca vien d ou le prob
    si quelquen a une autre .....
    PS : j'execute le prog sous linux en mode texte avec (./tut)
    voila et merci d'avance
    0