#include #include #ifndef PI #define PI 3.14159265358979323846 #endif #define NMAX 100 void ps_line( double x1, double y1, double x2, double y2 ); void ps_func( double *x, double *y, int imin, int imax ); void ps_conv( double x, double y, double *psx, double *psy ); FILE *fp_ps; double cx, cy, xmin, ymin, xd[NMAX+1], yd1[NMAX+1], yd2[NMAX+1]; int main() { double h, x, y, xmax, ymax, psxsize, psysize, ux, uy; int k; xmin = 0; xmax = PI; ymin = -1; ymax = 1; h = ( xmax - xmin )/NMAX; for(k=0; k<=NMAX; k++){ xd[k] = xmin + h*k; yd1[k] = sin(xd[k])*sin(9*xd[k]); yd2[k] = exp(-xd[k])*cos(9*xd[k]); } /***** PSo—Í ****/ psxsize = 5*72; /* ‰¡ 5inch */ psysize = 2*72; /* c 2inch */ cx = psxsize/( xmax - xmin ); cy = psysize/( ymax - ymin ); fp_ps=fopen("sin.ps","w"); fprintf(fp_ps,"50 50 translate 1.5 setlinewidth\n"); ps_func( xd, yd1, 0, NMAX ); fprintf(fp_ps,"[5] 0 setdash\n"); ps_func( xd, yd2, 0, NMAX ); fprintf(fp_ps,"[ ] 0 setdash\n"); fprintf(fp_ps,"0.5 setlinewidth\n"); ps_line( xmin, 0., xmax, 0 ); /** x-޲ **/ ps_line( 0., ymin, 0, ymax ); /** y-޲ **/ fprintf(fp_ps,"/Helvetica-Narrow findfont 14 scalefont setfont\n"); for( k=1; k<=6; k++ ){ /** x-޲–Ú·‚è **/ x=0.5*k; y=0.; ps_line( x, -0.05, x, 0.05 ); ps_conv( x, y, &ux, &uy ); fprintf(fp_ps,"%.3f %.3f moveto (%.1f) show\n",ux-8, uy-18, x ); } fprintf(fp_ps,"showpage\n"); fclose(fp_ps); return 0; } void ps_line( double x1, double y1, double x2, double y2 ) { double ux1, uy1, ux2, uy2; ps_conv( x1, y1, &ux1, &uy1 ); ps_conv( x2, y2, &ux2, &uy2 ); fprintf(fp_ps,"newpath %.3f %.3f %.3f %.3f moveto lineto stroke\n", ux2, uy2, ux1, uy1 ); } void ps_func( double *x, double *y, int imin, int imax ) { double ux, uy; int i; ps_conv( x[imin], y[imin], &ux, &uy ); fprintf(fp_ps,"newpath %.3f %.3f moveto\n",ux, uy); for(i=imin+1; i<=imax; i++ ){ ps_conv( x[i], y[i], &ux, &uy ); fprintf(fp_ps,"%.3f %.3f lineto\n",ux, uy); } fprintf(fp_ps,"stroke\n"); } void ps_conv( double x, double y, double *psx, double *psy ) { *psx = cx*( x - xmin ); *psy = cy*( y - ymin ); }