#include "pssub.h" //papersize double xsize, ysize; //viewpoint double xv1, yv1, xv2, yv2; //world coordinate double xw1, yw1, xw2, yw2; FILE* stream; void annulus(double x1,double y1,double r1,double r2) { plot(x1+r2, y1, 3); arc(x1, y1, r2, 1.0, 360.0); plot(x1+r1, y1, 2); arcn(x1, y1, r1, 360.0, 0.0); plot(x1+r2, y1, 2); closepath(); } void arc(double x1, double y1, double r1, double t1, double t2) { double xx1,yy1,rr1; xx1=((x1-xw1)/(xw2-xw1)*(xv2-xv1)+xv1)*xsize; yy1=((y1-yw1)/(yw2-yw1)*(yv2-yv1)+yv1)*ysize; rr1=(r1/(xw2-xw1)*(xv2-xv1))*xsize; fprintf(stream,"%lf cm %lf cm %lf cm %lf %lf arc \n",xx1,yy1,rr1,t1,t2); return; } void arcn(double x1, double y1, double r1, double t1, double t2) { double xx1,yy1,rr1; xx1=((x1-xw1)/(xw2-xw1)*(xv2-xv1)+xv1)*xsize; yy1=((y1-yw1)/(yw2-yw1)*(yv2-yv1)+yv1)*ysize; rr1=(r1/(xw2-xw1)*(xv2-xv1))*xsize; fprintf(stream,"%lf cm %lf cm %lf cm %lf %lf arcn \n",xx1,yy1,rr1,t1,t2); return; } void arcto(double x1, double y1, double x2, double y2, double r1) { double xx1,yy1,xx2,yy2,rr1; xx1=((x1-xw1)/(xw2-xw1)*(xv2-xv1)+xv1)*xsize; yy1=((y1-yw1)/(yw2-yw1)*(yv2-yv1)+yv1)*ysize; xx2=((x2-xw1)/(xw2-xw1)*(xv2-xv1)+xv1)*xsize; yy2=((y2-yw1)/(yw2-yw1)*(yv2-yv1)+yv1)*ysize; rr1=(r1/(xw2-xw1)*(xv2-xv1))*xsize; fprintf(stream,"%lf cm %lf cm %lf cm %lf cm %lf cm arcto \n",xx1,yy1,xx2,yy2,rr1); return; } void arctorot(double x1, double y1, double x2, double y2, double r1, double t1) { double xx1,yy1,xx2,yy2,rr1,tt1; tt1 = t1*3.14159/180.0; xx1 = x1*cos(tt1)-y1*sin(tt1); yy1 = x1*sin(tt1)+y1*cos(tt1); xx2 = x2*cos(tt1)-y2*sin(tt1); yy2 = x2*sin(tt1)+y2*cos(tt1); xx1=((xx1-xw1)/(xw2-xw1)*(xv2-xv1)+xv1)*xsize; yy1=((yy1-yw1)/(yw2-yw1)*(yv2-yv1)+yv1)*ysize; xx2=((xx2-xw1)/(xw2-xw1)*(xv2-xv1)+xv1)*xsize; yy2=((yy2-yw1)/(yw2-yw1)*(yv2-yv1)+yv1)*ysize; rr1=(r1/(xw2-xw1)*(xv2-xv1))*xsize; fprintf(stream,"%lf cm %lf cm %lf cm %lf cm %lf cm arcto \n",xx1,yy1,xx2,yy2,rr1); return; } void arrow(double x1, double y1, double x2, double y2, double d) { double alpha=2.2,s,x3,y3,x4,y4; s=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); x3=x2-(x2-x1)/s*d*alpha-(y2-y1)/s*d; y3=y2-(y2-y1)/s*d*alpha+(x2-x1)/s*d; x4=x2-(x2-x1)/s*d*alpha+(y2-y1)/s*d; y4=y2-(y2-y1)/s*d*alpha-(x2-x1)/s*d; plot(x1, y1, 3); plot(x2, y2, 2); plot(x3, y3, 3); plot(x2, y2, 2); plot(x4, y4, 2); return; } void arrowa(double x1, double y1, double x2, double y2, double d) { double alpha=2.2,s,x3,y3,x4,y4; s=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); x3=x2-(x2-x1)/s*d*alpha-(y2-y1)/s*d; y3=y2-(y2-y1)/s*d*alpha+(x2-x1)/s*d; x4=x2-(x2-x1)/s*d*alpha+(y2-y1)/s*d; y4=y2-(y2-y1)/s*d*alpha-(x2-x1)/s*d; plot(x1, y1, 3); plot((x3+x4)/2.0, (y3+y4)/2.0, 2); stroke(); plot(x3, y3, 3); plot(x2, y2, 2); plot(x4, y4, 2); closepath();fill(); return; } void arrowb(double x1, double y1, double x2, double y2, double d) { double alpha=2.2,s,x3,y3,x4,y4,x32,y32,x24,y24,x43,y43; s=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); x3=x2-(x2-x1)/s*d*alpha-(y2-y1)/s*d; y3=y2-(y2-y1)/s*d*alpha+(x2-x1)/s*d; x4=x2-(x2-x1)/s*d*alpha+(y2-y1)/s*d; y4=y2-(y2-y1)/s*d*alpha-(x2-x1)/s*d; x32=(x3+x2)/2.0-(y3-y2)/12.0; y32=(y3+y2)/2.0+(x3-x2)/12.0; x24=(x2+x4)/2.0-(y2-y4)/12.0; y24=(y2+y4)/2.0+(x2-x4)/12.0; x43=(x4+x3)/2.0-(y4-y3)/12.0; y43=(y4+y3)/2.0+(x4-x3)/12.0; plot(x1, y1, 3); plot(x43, y43, 2); stroke(); plot(x3, y3, 3); plot(x32, y32, 2); plot(x2, y2, 2); plot(x24, y24, 2); plot(x4, y4, 2); plot(x43,y43,2); closepath();fill(); return; } void arrowc(double x1, double y1, double x2, double y2, double d) { double alpha=2.2,s,x3,y3,x4,y4,x5,y5; s=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); x3=x2-(x2-x1)/s*d*alpha-(y2-y1)/s*d; y3=y2-(y2-y1)/s*d*alpha+(x2-x1)/s*d; x4=x2-(x2-x1)/s*d*alpha+(y2-y1)/s*d; y4=y2-(y2-y1)/s*d*alpha-(x2-x1)/s*d; x5=x2-(x2-x1)/s*d*alpha*0.8; y5=y2-(y2-y1)/s*d*alpha*0.8; plot(x1, y1, 3); plot(x5, y5, 2); stroke(); plot(x3, y3, 3); plot(x2, y2, 2); plot(x4, y4, 2); plot(x5, y5, 2); closepath();fill(); return; } void arrowfill(double x1, double y1, double x2, double y2, double d) { double alpha=2.2,s,x3,y3,x4,y4,x5,y5; s=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); x3=x2-(x2-x1)/s*d*alpha-(y2-y1)/s*d; y3=y2-(y2-y1)/s*d*alpha+(x2-x1)/s*d; x4=x2-(x2-x1)/s*d*alpha+(y2-y1)/s*d; y4=y2-(y2-y1)/s*d*alpha-(x2-x1)/s*d; plot(x1, y1, 3); plot(x2, y2, 2); stroke(); plot(x3, y3, 3); plot(x2, y2, 2); plot(x4, y4, 2); closepath(); fill(); return; } void arrowrot(double x1, double y1, double x2, double y2, double t1, double d) { double alpha=2.2,s,x3,y3,x4,y4; s=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); x3=x2-(x2-x1)/s*d*alpha-(y2-y1)/s*d; y3=y2-(y2-y1)/s*d*alpha+(x2-x1)/s*d; x4=x2-(x2-x1)/s*d*alpha+(y2-y1)/s*d; y4=y2-(y2-y1)/s*d*alpha-(x2-x1)/s*d; plotrot(x1, y1, t1, 3); plotrot(x2, y2, t1, 2); plotrot(x3, y3, t1, 3); plotrot(x2, y2, t1, 2); plotrot(x4, y4, t1, 2); return; } void arrowwide(double x1,double y1, double x2,double y2, double d, double al) { double s,dx,dy,x3,y3,x4,y4,x5,y5,x6,y6,x7,y7,x8,y8; s=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); dx=al; dy=al; x3=x2-(x2-x1)*d-(y2-y1)/s*dx; y3=y2-(y2-y1)*d+(x2-x1)/s*dy; x4=x2-(x2-x1)*d+(y2-y1)/s*dx; y4=y2-(y2-y1)*d-(x2-x1)/s*dy; x7=x2-(x2-x1)*d-(y2-y1)/s*dx*0.4; y7=y2-(y2-y1)*d+(x2-x1)/s*dy*0.4; x8=x2-(x2-x1)*d+(y2-y1)/s*dx*0.4; y8=y2-(y2-y1)*d-(x2-x1)/s*dy*0.4; x5=x1-(y2-y1)/s*dx*0.4; y5=y1+(x2-x1)/s*dy*0.4; x6=x1+(y2-y1)/s*dx*0.4; y6=y1-(x2-x1)/s*dy*0.4; plot(x6, y6, 3); plot(x8, y8, 2); plot(x4, y4, 2); plot(x2, y2, 2); plot(x3, y3, 2); plot(x7, y7, 2); plot(x5, y5, 2); closepath(); stroke(); return; } void battery(double x1, double y1, double x2, double y2, double d1, double d2) { double s,dx,dy,ex,ey,xx,yy; s=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); dx=x2-x1; dy=y2-y1; ex=-dy; ey=dx; xx=x1+d1*ex; yy=y1+d1*ey; plot(xx, yy, 3); xx=x1-d1*ex; yy=y1-d1*ey; plot(xx, yy, 2); xx=x2+d2*ex; yy=y2+d2*ey; plot(xx, yy, 3); xx=x2-d2*ex; yy=y2-d2*ey; plot(xx, yy, 2); return; } void brokenlines(double *x1, double *y1, int n) { int i; newpath(); plot(x1[0],y1[0],3); for (i=1; i