import java.io.*; class PSM { protected static PrintWriter bw; protected static double xsize,ysize; protected static double xv1,yv1,xv2,yv2; protected static double xw1,yw1,xw2,yw2; void init(int n) { String str1="temp",str2=".ps"; str1=str1+String.valueOf(n)+str2; System.out.println(str1); try{ bw=new PrintWriter ( new BufferedWriter (new FileWriter(str1))); bw.println("%! Created by Jiro Mizushima"); bw.println("/Times-Roman findfont 18 scalefont setfont"); bw.println("/cm {28.35 mul } def "); }catch(IOException e) {System.out.println("Error"); } xsize=21.0;ysize=21.0; System.out.println("ended"); } void viewport(double xv1d, double yv1d, double xv2d, double yv2d) { xv1 = xv1d; yv1 = yv1d; xv2 = xv2d; yv2 = yv2d; } void xyworld(double xw1d, double yw1d, double xw2d, double yw2d) { xw1 = xw1d; yw1 = yw1d; xw2 = xw2d; yw2 = yw2d; return; } void fin() { showpage();bw.close(); } void linety(int ichar) { switch (ichar) { case 1: bw.println("[] 0 setdash"); break; case 2: bw.println("[2 2] 0 setdash");break; case 3: bw.println("[8 2] 0 setdash");break; case 4: bw.println("[8 1 1 1] 0 setdash");break; } } void linewidth(double w) { bw.println(w+" setlinewidth"); } void setgray(double g) { bw.println(g+" setgray"); } void setrgb(double r,double g,double b) { bw.println(r+" "+g+" "+b+" setrgbcolor"); } void newpath() { bw.println("newpath"); } void closepath() { bw.println("closepath"); } void fill() { bw.println("fill"); } void stroke() { bw.println("stroke"); } void showpage() { bw.println("showpage"); } void rotate(int itheta) { bw.println(itheta+" rotate"); } void scale(double tx, double ty) { bw.println(tx+" "+ty+" scale"); } void transrate(double x, double y) { double x1,y1; x1 = ((x-xw1)/(xw2-xw1)*(xv2-xv1) + xv1)*xsize; y1 = ((y-yw1)/(yw2-yw1)*(yv2-yv1) + yv1)*ysize; bw.println(x1+" cm "+y1+" cm translate"); } void clipon(double x1, double y1, double x2, double y2) { newpath(); plot(x1, y1, 3);plot(x2, y1, 2);plot(x2, y2,2); plot(x1, y2, 2); closepath(); bw.println("clip"); } void eoclipon(double x1, double y1, double x2, double y2) { newpath(); plot(x1, y1, 3);plot(x2, y1, 2);plot(x2, y2,2); plot(x1, y2, 2); closepath(); bw.println("eoclip"); } void clipoff() { bw.println("clipoff"); } void plot(double x, double y, int ipen) { double x1, y1; x1 = ((x-xw1)/(xw2-xw1)*(xv2-xv1) + xv1)*xsize; y1 = ((y-yw1)/(yw2-yw1)*(yv2-yv1) + yv1)*ysize; switch (ipen) { case 3: bw.println(x1+" cm "+y1+" cm moveto"); break; case 2: bw.println(x1+" cm "+y1+" cm lineto"); break; } return; } void line(double x, double y, double xx, double yy, double g, double w, int it) { double x1, y1, xx1, yy1; x1 = ((x-xw1)/(xw2-xw1)*(xv2-xv1) + xv1)*xsize; y1 = ((y-yw1)/(yw2-yw1)*(yv2-yv1) + yv1)*ysize; xx1 = ((xx-xw1)/(xw2-xw1)*(xv2-xv1) + xv1)*xsize; yy1 = ((yy-yw1)/(yw2-yw1)*(yv2-yv1) + yv1)*ysize; linewidth(w);linety(it);setgray(g); bw.println(x1+" cm "+y1+" cm moveto"); bw.println(xx1+" cm "+yy1+" cm lineto"); stroke(); linety(1); linewidth(1);setgray(0.0); } void line1(double x, double y, double xx, double yy) { double x1, y1, xx1, yy1; x1 = ((x-xw1)/(xw2-xw1)*(xv2-xv1) + xv1)*xsize; y1 = ((y-yw1)/(yw2-yw1)*(yv2-yv1) + yv1)*ysize; xx1 = ((xx-xw1)/(xw2-xw1)*(xv2-xv1) + xv1)*xsize; yy1 = ((yy-yw1)/(yw2-yw1)*(yv2-yv1) + yv1)*ysize; bw.println(x1+" cm "+y1+" cm moveto"); bw.println(xx1+" cm "+yy1+" cm lineto"); stroke(); } void rect(double x1, double y1, double x2, double y2, double g, double w, int it) { linewidth(w);linety(it);setgray(g); newpath();plot(x1,y1,3);plot(x2,y1,2);plot(x2,y2,2);plot(x1,y2,2); closepath(); if(g!=0.0) bw.println(" fill"); stroke(); linety(1); linewidth(1);setgray(0.0); } void rect1(double x1, double y1, double x2, double y2) { newpath();plot(x1,y1,3);plot(x2,y1,2);plot(x2,y2,2);plot(x1,y2,2); closepath(); } void rectfill(double x1, double y1, double x2, double y2) { newpath();plot(x1,y1,3);plot(x2,y1,2);plot(x2,y2,2);plot(x1,y2,2); closepath(); bw.println(" fill"); stroke(); } void circ(double x1, double y1, double r1, double g, double w, int it) { double xx1,yy1,rr1; xx1 = ((x1-xw1)/(xw2-xw1)*(xv2-xv1) + xv1)*xsize; yy1 = ((y1-yw1)/(yw2-yw1)*(yv2-yv1) + yv1)*ysize; rr1 = (r1-xw1)/(xw2-xw1)*(xv2-xv1)*xsize; linewidth(w);linety(it);setgray(g); newpath(); bw.println(xx1+" cm "+yy1+" cm "+rr1+" cm 0 360 arc"); if(g!=0.0) bw.println(" fill"); stroke(); linety(1); linewidth(1);setgray(0.0); } void circ1(double x1, double y1, double r1) { double xx1,yy1,rr1; xx1 = ((x1-xw1)/(xw2-xw1)*(xv2-xv1) + xv1)*xsize; yy1 = ((y1-yw1)/(yw2-yw1)*(yv2-yv1) + yv1)*ysize; rr1 = (r1-xw1)/(xw2-xw1)*(xv2-xv1)*xsize; newpath(); bw.println(xx1+" cm "+yy1+" cm "+rr1+" cm 0 360 arc"); stroke(); } void circfill(double x1, double y1, double r1) { double xx1,yy1,rr1; xx1 = ((x1-xw1)/(xw2-xw1)*(xv2-xv1) + xv1)*xsize; yy1 = ((y1-yw1)/(yw2-yw1)*(yv2-yv1) + yv1)*ysize; rr1 = (r1-xw1)/(xw2-xw1)*(xv2-xv1)*xsize; newpath(); bw.println(xx1+" cm "+yy1+" cm "+rr1+" cm 0 360 arc"); bw.println(" fill"); stroke(); } void ellipse(double x1, double y1, double rx, double ry, double g, double w, int it) { double x, y, dt; int i; linety(it); linewidth(w); setgray(g); newpath(); x=x1+rx; y=y1; dt=3.14156*2.0/(double)20; plot(x,y,3); for (i=1;i<=20;i++) { x=x1+rx*Math.cos(dt*i);y=y1+ry*Math.sin(dt*i); plot(x,y,2); } stroke(); linety(1); linewidth(1.0); setgray(0.0); } void ellipse1(double x1, double y1, double rx, double ry) { double x, y, dt; int i; newpath(); x=x1+rx; y=y1; dt=3.14156*2.0/(double)20; plot(x,y,3); for (i=1;i<=20;i++) { x=x1+rx*Math.cos(dt*i);y=y1+ry*Math.sin(dt*i); plot(x,y,2); } stroke(); } void ellipsefill(double x1, double y1, double rx, double ry) { double x, y, dt; int i; newpath(); x=x1+rx; y=y1; dt=3.14156*2.0/(double)20; plot(x,y,3); for (i=1;i<=20;i++) { x=x1+rx*Math.cos(dt*i);y=y1+ry*Math.sin(dt*i); plot(x,y,2); } bw.println(" fill");stroke(); } void arc(double x1, double y1, double r1, double t1, double t2, double g, double w, int it) { 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; linety(it); linewidth(w); setgray(g); newpath(); bw.println(xx1+" cm "+yy1+" cm "+rr1+" cm "+t1+" "+t2+" arc"); stroke(); linety(1); linewidth(1.0); setgray(0.0); } void arc1(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; newpath(); bw.println(xx1+" cm "+yy1+" cm "+rr1+" cm "+t1+" "+t2+" arc"); stroke(); } void curv(double x1,double y1,double x2,double y2,double x3,double y3,double x4,double y4, double g, double w, int it) { double xx2,yy2,xx3,yy3,xx4,yy4; xx2=((x2-xw1)/(xw2-xw1)*(xv2-xv1)+xv1)*xsize; yy2=((y2-yw1)/(yw2-yw1)*(yv2-yv1)+yv1)*ysize; xx3=((x3-xw1)/(xw2-xw1)*(xv2-xv1)+xv1)*xsize; yy3=((y3-yw1)/(yw2-yw1)*(yv2-yv1)+yv1)*ysize; xx4=((x4-xw1)/(xw2-xw1)*(xv2-xv1)+xv1)*xsize; yy4=((y4-yw1)/(yw2-yw1)*(yv2-yv1)+yv1)*ysize; linety(it); linewidth(w); setgray(g); newpath(); plot(x1,y1,3); bw.println(xx2+" cm "+yy2+" cm "+xx3+" cm "+yy3+" cm "+xx4+" cm "+yy4+" cm curveto"); stroke(); linety(1);linewidth(1.0); setgray(0.0); } void curv1(double x1,double y1,double x2,double y2,double x3,double y3,double x4,double y4) { double xx2,yy2,xx3,yy3,xx4,yy4; xx2=((x2-xw1)/(xw2-xw1)*(xv2-xv1)+xv1)*xsize; yy2=((y2-yw1)/(yw2-yw1)*(yv2-yv1)+yv1)*ysize; xx3=((x3-xw1)/(xw2-xw1)*(xv2-xv1)+xv1)*xsize; yy3=((y3-yw1)/(yw2-yw1)*(yv2-yv1)+yv1)*ysize; xx4=((x4-xw1)/(xw2-xw1)*(xv2-xv1)+xv1)*xsize; yy4=((y4-yw1)/(yw2-yw1)*(yv2-yv1)+yv1)*ysize; newpath(); plot(x1,y1,3); bw.println(xx2+" cm "+yy2+" cm "+xx3+" cm "+yy3+" cm "+xx4+" cm "+yy4+" cm curveto"); stroke(); } void triangl(double x1, double y1, double r1, double a1, double g, double w, int it) { double aa1,aa2; aa1=a1*3.14159/180.0; aa2=aa1+3.14159/3.0; linety(it); linewidth(w); newpath(); plot(x1,y1,3); plot(x1+r1*Math.cos(aa1),y1+r1*Math.sin(aa1),2); plot(x1+r1*Math.cos(aa2),y1+r1*Math.sin(aa2),2); closepath(); if(g!=0.0) {bw.println("fill");} stroke(); linety(1); linewidth(1.0); } void triangl1(double x1, double y1, double r1, double a1) { double aa1,aa2; aa1=a1*3.14159/180.0; aa2=aa1+3.14159/3.0; newpath(); plot(x1,y1,3); plot(x1+r1*Math.cos(aa1),y1+r1*Math.sin(aa1),2); plot(x1+r1*Math.cos(aa2),y1+r1*Math.sin(aa2),2); closepath(); stroke(); } void spline(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4, int ipart, double g, double w) { int ns=10,i; double u,x,y; linewidth(w); setgray(g); newpath(); u=(double)ipart; x=-u*(u-1.)*(u-2.)/6.*x1+(u+1.)*(u-1.)*(u-2.)/2.*x2-(u+1.)*u*(u-2.)/2.*x3+(u+1.)*u*(u-1.)/6.*x4; y=-u*(u-1.)*(u-2.)/6.*y1+(u+1.)*(u-1.)*(u-2.)/2.*y2-(u+1.)*u*(u-2.)/2.*y3+(u+1.)*u*(u-1.)/6.*y4; plot(x,y,3); for (i=1;i<=ns;i++){ u=(double)ipart+(double)i/(double)ns; x=-u*(u-1.)*(u-2.)/6.*x1+(u+1.)*(u-1.)*(u-2.)/2.*x2-(u+1.)*u*(u-2.)/2.*x3+(u+1.)*u*(u-1.)/6.*x4; y=-u*(u-1.)*(u-2.)/6.*y1+(u+1.)*(u-1.)*(u-2.)/2.*y2-(u+1.)*u*(u-2.)/2.*y3+(u+1.)*u*(u-1.)/6.*y4; plot(x,y,2); } stroke(); linewidth(1.0); setgray(0.0); } void spline1(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4, int ipart) { int ns=10,i; double u,x,y; newpath(); u=(double)ipart; x=-u*(u-1.)*(u-2.)/6.*x1+(u+1.)*(u-1.)*(u-2.)/2.*x2-(u+1.)*u*(u-2.)/2.*x3+(u+1.)*u*(u-1.)/6.*x4; y=-u*(u-1.)*(u-2.)/6.*y1+(u+1.)*(u-1.)*(u-2.)/2.*y2-(u+1.)*u*(u-2.)/2.*y3+(u+1.)*u*(u-1.)/6.*y4; plot(x,y,3); for (i=1;i<=ns;i++){ u=(double)ipart+(double)i/(double)ns; x=-u*(u-1.)*(u-2.)/6.*x1+(u+1.)*(u-1.)*(u-2.)/2.*x2-(u+1.)*u*(u-2.)/2.*x3+(u+1.)*u*(u-1.)/6.*x4; y=-u*(u-1.)*(u-2.)/6.*y1+(u+1.)*(u-1.)*(u-2.)/2.*y2-(u+1.)*u*(u-2.)/2.*y3+(u+1.)*u*(u-1.)/6.*y4; plot(x,y,2); } stroke(); } void parabola(double x1, double y1, double x2, double y2, double x3, double y3, double g, double w, int it) { double u,x,y; int i,ns=20; u=0.0; linewidth(w); setgray(g); linety(it); newpath(); x=(u-1.)*(u-2.)/2.*x1-u*(u-2.)*x2+u*(u-1.)/2.*x3; y=(u-1.)*(u-2.)/2.*y1-u*(u-2.)*y2+u*(u-1.)/2.*y3; plot(x,y,3); for (i=1; i<=2*ns; i++) { u=(double)i/(double)ns; x=(u-1.)*(u-2.)/2.*x1-u*(u-2.)*x2+u*(u-1.)/2.*x3; y=(u-1.)*(u-2.)/2.*y1-u*(u-2.)*y2+u*(u-1.)/2.*y3; plot(x,y,2); } stroke(); linewidth(1.0); setgray(0.0); linety(1); } void parabola1(double x1, double y1, double x2, double y2, double x3, double y3) { double u,x,y; int i,ns=20; u=0.0; newpath(); x=(u-1.)*(u-2.)/2.*x1-u*(u-2.)*x2+u*(u-1.)/2.*x3; y=(u-1.)*(u-2.)/2.*y1-u*(u-2.)*y2+u*(u-1.)/2.*y3; plot(x,y,3); for (i=1; i<=2*ns; i++) { u=(double)i/(double)ns; x=(u-1.)*(u-2.)/2.*x1-u*(u-2.)*x2+u*(u-1.)/2.*x3; y=(u-1.)*(u-2.)/2.*y1-u*(u-2.)*y2+u*(u-1.)/2.*y3; plot(x,y,2); } stroke(); } void arrow(double x1, double y1, double x2, double y2, double d, double g, double w) { double alpha=2.2,s,x3,y3,x4,y4; s=Math.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; linewidth(w); setgray(g); plot(x1, y1, 3); plot(x2, y2, 2); plot(x3, y3, 3); plot(x2, y2, 2); plot(x4, y4, 2); stroke(); linety(1); linewidth(1.0); setgray(0.0); } void arrow1(double x1, double y1, double x2, double y2, double d) { double alpha=2.2,s,x3,y3,x4,y4; s=Math.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); stroke(); } void resist(double x1, double y1, double x2, double y2, double d, double w) { double s, dx, dy, ex, ey, xx, yy;int i; s=Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); linewidth(w); dx=(x2-x1)/12.0; dy=(y2-y1)/12.0; ex=-d*dy; ey=d*dx; plot(x1, y1, 3); xx=x1+dx+ex; yy=y1+dy+ey; plot(xx, yy, 2); for(i=1;i<=5; i++){ xx=x1+(i*2+1)*dx+Math.pow(-1,i)*ex; yy=y1+(i*2+1)*dy+Math.pow(-1,i)*ey; plot(xx, yy, 2); } plot(x2, y2, 2); stroke(); linety(1); linewidth(1.0); } void battery(double x1, double y1, double x2, double y2, double d, double w) { double s,dx,dy,ex,ey,xx,yy; s=Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); linewidth(w); dx=(x2-x1)/3.0; dy=(y2-y1)/3.0; ex=-dy; ey=dx; plot(x1, y1, 3); xx=x1+dx; yy=y1+dy; plot(xx, yy, 2); stroke(); linewidth(2.0*w); xx=x1+dx+3.0*ex; yy=y1+dy+3.0*ey; plot(xx, yy, 3); xx=x1+dx-3.0*ex; yy=y1+dy-3.0*ey; plot(xx, yy, 2); stroke(); xx=x1+2.0*dx+ex; yy=y1+2.0*dy+ey; plot(xx, yy, 3); xx=x1+2.0*dx-ex; yy=y1+2.0*dy-ey; plot(xx, yy, 2); stroke(); linewidth(w); plot(x2, y2, 3); xx=x2-dx; yy=y2-dy; plot(xx, yy, 2); stroke(); linewidth(1.0); linety(1); } void coil(double x1, double y1, double x2, double y2, double d, int n, double w) { double s,ex,ey,ds,a,xx,yy,t;int i; s=Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); linewidth(w); ex=(x2-x1)/s; ey=(y2-y1)/s; a=2.0; ds=(s-2.0*d)/((double)n+0.5); plot(x1, y1, 3); for(i=1;i<=40*n+20;i++) { t=2.0*3.14159*(double)i/40.0; xx=x1+((d-d*Math.cos(t))+t/2.0/3.14159*ds)*ex-a*d*Math.sin(t)*ey; yy=y1+((d-d*Math.cos(t))+t/2.0/3.14159*ds)*ey+a*d*Math.sin(t)*ex; plot(xx, yy, 2); } stroke(); linewidth(1.0);linety(1); } void setchar(int ichar, int ip) { switch (ichar) { case 1: bw.println("/Times-Roman findfont "+ip+" scalefont setfont"); break; case 2: bw.println("/Times-Bold findfont "+ip+" scalefont setfont"); break; case 3: bw.println("/Times-Italic findfont "+ip+" scalefont setfont"); break; case 4: bw.println("/Times-BoldItalic findfont "+ip+" scalefont setfont"); break; case 5: bw.println("/Helvetica findfont "+ip+" scalefont setfont"); break; case 6: bw.println("/Helvetica-Bold findfont "+ip+" scalefont setfont"); break; case 7: bw.println("/Helvetica-Oblique findfont "+ip+" scalefont setfont"); break; case 8: bw.println("/Helvetica-BoldOblique findfont "+ip+" scalefont setfont"); break; case 9: bw.println("/Courier findfont "+ip+" scalefont setfont"); break; case 10: bw.println("/Courier-Bold findfont "+ip+" scalefont setfont"); break; case 11: bw.println("/Courier-Oblique findfont "+ip+" scalefont setfont"); break; case 12: bw.println("/Courier-BoldOblique findfont "+ip+" scalefont setfont"); break; case 13: bw.println("/Symbol findfont "+ip+" scalefont setfont"); break;} } void text(double x1, double y1, int n1, String str1) { plot(x1, y1, 3); bw.println("("+str1+") show"); } void textx(double x, double y, int n, String str1) { plot(x, y, 3); bw.println(-n/2.0*9.0+" "+-3.0/2.0*15.0+" rmoveto"); bw.println("("+str1+") show"); } void texty(double x, double y, int n, String str1) { plot(x, y, 3); bw.println(-(n+1)*9.0+" "+-1.0/2.0/12.0+" rmoveto"); bw.println("("+str1+") show"); } void square(double x, double y) { double x1, y1, xxm, yym, xxp, yyp, delta; x1 = ((x-xw1)/(xw2-xw1)*(xv2-xv1) + xv1)*xsize; y1 = ((y-yw1)/(yw2-yw1)*(yv2-yv1) + yv1)*ysize; delta = 0.05; xxm=x1-delta;yym=y1-delta;xxp=x1+delta;yyp=y1+delta; bw.println(xxm+" cm "+yym+" cm moveto"); bw.println(xxp+" cm "+yym+" cm lineto"); bw.println(xxp+" cm "+yyp+" cm lineto"); bw.println(xxm+" cm "+yyp+" cm lineto"); closepath();stroke(); } void fsquare(double x, double y) { double x1, y1, xxm, yym, xxp, yyp, delta; x1 = ((x-xw1)/(xw2-xw1)*(xv2-xv1) + xv1)*xsize; y1 = ((y-yw1)/(yw2-yw1)*(yv2-yv1) + yv1)*ysize; delta = 0.05; xxm=x1-delta;yym=y1-delta;xxp=x1+delta;yyp=y1+delta; bw.println(xxm+" cm "+yym+" cm moveto"); bw.println(xxp+" cm "+yym+" cm lineto"); bw.println(xxp+" cm "+yyp+" cm lineto"); bw.println(xxm+" cm "+yyp+" cm lineto"); closepath(); fill();stroke(); } void circle(double x, double y) { double x1, y1, xxm, yym, xxp, yyp, delta; x1 = ((x-xw1)/(xw2-xw1)*(xv2-xv1) + xv1)*xsize; y1 = ((y-yw1)/(yw2-yw1)*(yv2-yv1) + yv1)*ysize; delta = 0.05; bw.println(x1+" cm "+y1+" cm "+delta+" cm 0 360 arc"); stroke(); } void fcircle(double x, double y) { double x1, y1, xxm, yym, xxp, yyp, delta; x1 = ((x-xw1)/(xw2-xw1)*(xv2-xv1) + xv1)*xsize; y1 = ((y-yw1)/(yw2-yw1)*(yv2-yv1) + yv1)*ysize; delta = 0.05; bw.println(x1+" cm "+y1+" cm "+delta+" cm 0 360 arc"); closepath(); fill();stroke(); } void delta(double x, double y) { double x1, y1, xxm, yym, xxp, yyp, yyt, delta; x1 = ((x-xw1)/(xw2-xw1)*(xv2-xv1) + xv1)*xsize; y1 = ((y-yw1)/(yw2-yw1)*(yv2-yv1) + yv1)*ysize; delta = 0.05; xxm=x1-0.866*delta;yym=y1-0.5*delta;yyt=y1+delta;xxp=x1+0.866*delta;yyp=y1-0.5*delta; bw.println(xxm+" cm "+yym+" cm moveto"); bw.println(x1+" cm "+yyt+" cm lineto"); bw.println(xxp+" cm "+yyp+" cm lineto"); closepath();stroke(); } void fdelta(double x, double y) { double x1, y1, xxm, yym, xxp, yyp, yyt, delta; x1 = ((x-xw1)/(xw2-xw1)*(xv2-xv1) + xv1)*xsize; y1 = ((y-yw1)/(yw2-yw1)*(yv2-yv1) + yv1)*ysize; delta = 0.05; xxm=x1-0.866*delta;yym=y1-0.5*delta;yyt=y1+delta;xxp=x1+0.866*delta;yyp=y1-0.5*delta; bw.println(xxm+" cm "+yym+" cm moveto"); bw.println(x1+" cm "+yyt+" cm lineto"); bw.println(xxp+" cm "+yyp+" cm lineto"); fill();closepath();stroke(); } }