Created
January 19, 2010 10:50
-
-
Save clairvy/280843 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| dora | |
| *.o | |
| temp1.ps |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include "ps.h" | |
| /* 参考 | |
| http://www1.doshisha.ac.jp/~jmizushi/ps.html | |
| */ | |
| void dora(); | |
| int main() | |
| { | |
| dora(); | |
| return 0; | |
| } | |
| void dora() | |
| { | |
| double k = 1.0 / 350.0; | |
| init(); | |
| /* 中心を原点とする */ | |
| translate(0.2, 0.5); | |
| /* 線の幅指定 */ | |
| linewidth(5.0); | |
| /* 外郭 */ | |
| setrgb(0.0, 0.0, 1.0); | |
| circfill1(0.0, 0.0, 280 * k); | |
| setrgb(0.0, 0.0, 0.0); | |
| circ1(0.0, 0.0, 280 * k); | |
| /* 内郭 */ | |
| setrgb(1.0, 1.0, 1.0); | |
| circfill1(0.0, -50.0 * k, 227.0 * k); | |
| setrgb(0.0, 0.0, 0.0); | |
| arc1(0.0, -50.0 * k, 230.0 * k, -90.0, 59.0); stroke(); | |
| arc1(0.0, -50.0 * k, 230.0 * k, 121.0, -90.0); stroke(); | |
| /* 目 */ | |
| setrgb(1.0, 1.0, 1.0); | |
| circfill1(60.0 * k, 160.0 * k, 60.0 * k); /* 眼球 */ | |
| setrgb(0.0, 0.0, 0.0); | |
| circ1(60.0 * k, 160.0 * k, 60.0 * k); | |
| setrgb(1.0, 1.0, 1.0); | |
| circfill1(-60.0 * k, 160.0 * k, 60.0 * k); /* 眼球 */ | |
| setrgb(0.0, 0.0, 0.0); | |
| circ1(-60.0 * k, 160.0 * k, 60.0 * k); | |
| circ1( 10.0 * k, 160.0 * k, 10.0 * k); /* 黒目 */ | |
| circ1(-10.0 * k, 160.0 * k, 10.0 * k); | |
| /* 鼻 */ | |
| setrgb(1.0, 0.0, 0.0); | |
| circfill1(0.0, 90.0 * k, 30.0 * k); | |
| setrgb(0.0, 0.0, 0.0); | |
| circ1(0.0, 90.0 * k, 30.0 * k); | |
| /* 縦線 */ | |
| newpath(); line1(0.0, 60.0 * k, 0.0, -150.0 * k); | |
| /* 口 */ | |
| setrgb(1.0, 0.0, 0.0); | |
| arc1(0.0, -60.0 * k, 150.0 * k, -143.0, -37.0); fill(); | |
| setrgb(0.0, 0.0, 0.0); | |
| newpath(); line1(-121 * k, -150.0 * k, 121.0 * k, -150.0 * k); | |
| arc1(120.0 * k, -120.0 * k, 30.0 * k, -90.0, 180.0); stroke(); | |
| arc1(0.0, -60.0 * k, 150.0 * k, -143.0, -37.0); stroke(); | |
| /* ひげ */ | |
| newpath(); line1( 120.0 * k, 0.0, 290.0 * k, 30.0 * k); | |
| newpath(); line1( 120.0 * k, -30.0 * k, 290.0 * k, -30.0 * k); | |
| newpath(); line1( 120.0 * k, -60.0 * k, 290.0 * k, -120.0 * k); | |
| newpath(); line1(-120.0 * k, 0.0, -290.0 * k, 30.0 * k); | |
| newpath(); line1(-120.0 * k, -30.0 * k, -290.0 * k, -30.0 * k); | |
| newpath(); line1(-120.0 * k, -60.0 * k, -290.0 * k, -120.0 * k); | |
| fin(); | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| %!PS | |
| % 座標系の保存 | |
| gsave | |
| % A4 のサイズは 576x832pt くらい | |
| % 中心を原点にする | |
| 306 416 translate | |
| % 線の幅指定 | |
| 5 setlinewidth | |
| % 外郭(288, 416) | |
| %newpath 0 0 303 0 360 arc stroke | |
| 0 0 1 setrgbcolor | |
| newpath 0 0 280 0 360 arc fill | |
| 0 0 0 setrgbcolor | |
| newpath 0 0 280 0 360 arc stroke | |
| % 内郭 | |
| 1 1 1 setrgbcolor | |
| newpath 0 -50 227 0 360 arc fill | |
| 0 0 0 setrgbcolor | |
| newpath 0 -50 230 -90 59 arc stroke | |
| newpath 0 -50 230 121 -90 arc stroke | |
| % 目 | |
| 1 1 1 setrgbcolor | |
| newpath 60 160 60 0 360 arc fill % 眼球 | |
| 0 0 0 setrgbcolor | |
| newpath 60 160 60 0 360 arc stroke % 眼球 | |
| 1 1 1 setrgbcolor | |
| newpath -60 160 60 0 360 arc fill | |
| 0 0 0 setrgbcolor | |
| newpath -60 160 60 0 360 arc stroke | |
| newpath 10 160 10 0 360 arc stroke % 黒目 | |
| newpath -10 160 10 0 360 arc stroke | |
| % 鼻 | |
| 1 0 0 setrgbcolor | |
| newpath 0 90 30 0 360 arc fill | |
| 0 0 0 setrgbcolor | |
| newpath 0 90 30 0 360 arc stroke | |
| % 縦線 | |
| newpath 0 60 moveto 0 -150 lineto stroke | |
| % 口 | |
| 1 0 0 setrgbcolor | |
| newpath 0 -60 150 -143 -37 arc fill | |
| 0 0 0 setrgbcolor | |
| newpath -121 -150 moveto 121 -150 lineto stroke | |
| newpath 120 -120 30 -90 180 arc stroke | |
| newpath 0 -60 150 -143 -37 arc stroke | |
| % ひげ | |
| newpath 120 0 moveto 290 30 lineto stroke | |
| newpath 120 -30 moveto 290 -30 lineto stroke | |
| newpath 120 -60 moveto 280 -120 lineto stroke | |
| newpath -120 0 moveto -290 30 lineto stroke | |
| newpath -120 -30 moveto -290 -30 lineto stroke | |
| newpath -120 -60 moveto -280 -120 lineto stroke | |
| % 座標系の復元 | |
| grestore | |
| showpage | |
| % 参考 | |
| % http://www.rain.hyarc.nagoya-u.ac.jp/~maesaka/dabun_comp/ps/index.html |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| OBJS = dora.o psbasic.o | |
| EXEC = dora | |
| OUTPUT = temp1.ps | |
| all: do | |
| do : $(OUTPUT) | |
| $(OUTPUT) : $(EXEC) | |
| ./$(EXEC) | |
| build: $(EXEC) | |
| $(EXEC) : $(OBJS) | |
| $(CC) -o $@ $^ | |
| clean: | |
| $(RM) $(RMF) $(EXEC) $(OBJS) $(OUTPUT) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <stdio.h> | |
| #include <stdlib.h> | |
| #include <string.h> | |
| #include <math.h> | |
| #define PI 3.141592653585793 | |
| void init(void); | |
| void viewport(double, double, double, double); | |
| void xyworld(double, double, double, double); | |
| void fin(void); | |
| void linety(int); | |
| void linewidth(double); | |
| void setgray(double); | |
| void setrgb(double, double, double); | |
| void newpath(void); | |
| void fill(void); | |
| void closepath(void); | |
| void stroke(void); | |
| void rotate(int); | |
| void scale(double, double); | |
| void transrate(double, double); | |
| void clipon(double, double, double, double); | |
| void eoclipon(double, double, double, double); | |
| void clipoff(void); | |
| void plot(double, double, int); | |
| void line(double, double, double, double, double, double, int); | |
| void line1(double, double, double, double); | |
| void rect(double, double, double, double, double, double, int); | |
| void rect1(double, double, double, double); | |
| void rectfill1(double, double, double, double); | |
| void circ(double, double, double, double, double, int); | |
| void circ1(double, double, double); | |
| void circfill1(double, double, double); | |
| void ellipse(double, double, double, double, double, double, int); | |
| void ellipse1(double, double, double, double); | |
| void ellipsefill1(double, double, double, double); | |
| void arc(double, double, double, double, double, double, double, int); | |
| void arc1(double, double, double, double, double); | |
| void curv(double, double, double, double, double, double, double, double, double, double, int); | |
| void curv1(double, double, double, double, double, double, double, double); | |
| void triangl(double, double, double, double, double, double, int); | |
| void triangl1(double, double, double, double); | |
| void trianglfill1(double, double, double, double); | |
| void spline(double, double, double, double, double, double, double, double, int, double, double); | |
| void spline1(double, double, double, double, double, double, double, double, int); | |
| void parabola(double, double, double, double, double, double, double, double, int); | |
| void parabola1(double, double, double, double, double, double); | |
| void arrow(double, double, double, double, double, double, double); | |
| void arrow1(double, double, double, double, double); | |
| void resist(double, double, double, double, double, double); | |
| void battery(double, double, double, double, double, double); | |
| void coil(double, double, double, double, double, int, double); | |
| void text(double, double, int, char* ); | |
| void textx(double, double, int, char* ); | |
| void texty(double, double, int, char* ); | |
| void setchar(int, int); | |
| void square(double, double); | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include "ps.h" | |
| //papersize | |
| double xsize, ysize; | |
| //viewpoint | |
| double xv1, yv1, xv2, yv2; | |
| //world coordinate | |
| double xw1, yw1, xw2, yw2; | |
| FILE* stream; | |
| // plotting routines for general purpose using postscript | |
| void init(void) | |
| { stream = fopen("temp1.ps", "w"); | |
| // aspect ratio of the paper is 1.4143 | |
| fprintf(stream, "%%! Created by Jiro Mizushima \n"); | |
| fprintf(stream, "/Times-Roman findfont 18 scalefont setfont \n"); | |
| fprintf(stream, "/cm {28.35 mul} def \n"); | |
| xsize = 21.0;/* ysize = 29.7;*/ ysize = 21.0; | |
| viewport(0.2, 0.2, 0.8, 0.8); | |
| xyworld(0.0, 0.0, 1.0, 1.0); | |
| linety(1); linewidth(1); | |
| return; | |
| } | |
| void viewport(double xv1d, double yv1d, double xv2d, double yv2d) | |
| { | |
| xv1 = xv1d; yv1 = yv1d; xv2 = xv2d; yv2 = yv2d; | |
| return; | |
| } | |
| void xyworld(double xw1d, double yw1d, double xw2d, double yw2d) | |
| { | |
| xw1 = xw1d; yw1 = yw1d; xw2 = xw2d; yw2 = yw2d; | |
| return; | |
| } | |
| void fin(void) | |
| { | |
| stroke(); fprintf(stream, "showpage\n"); fclose(stream); | |
| return; | |
| } | |
| void linety(int ichar) | |
| { | |
| switch (ichar) { | |
| case 1: fprintf(stream, "[] 0 setdash \n"); break; | |
| case 2: fprintf(stream, "[2 2] 0 setdash \n");break; | |
| case 3: fprintf(stream, "[8 2] 0 setdash \n");break; | |
| case 4: fprintf(stream, "[8 1 1 1] 0 setdash \n");break; | |
| } | |
| return; | |
| } | |
| void linewidth(double w) | |
| { | |
| fprintf(stream, "%lf setlinewidth\n", w); return; | |
| } | |
| void setgray(double g) | |
| { | |
| fprintf(stream, "%lf setgray\n", g); return; | |
| } | |
| void setrgb(double r,double g,double b) | |
| { | |
| fprintf(stream, "%lf %lf %lf setrgbcolor\n",r,g,b); return; | |
| } | |
| void newpath(void) | |
| { | |
| fprintf(stream, "newpath\n"); return; | |
| } | |
| void closepath(void) | |
| { | |
| fprintf(stream, "closepath\n"); return; | |
| } | |
| void fill(void) | |
| { | |
| fprintf(stream, "fill\n"); return; | |
| } | |
| void stroke(void) | |
| { | |
| fprintf(stream, "stroke\n"); | |
| } | |
| void rotate(int itheta) | |
| { | |
| fprintf(stream, "%d rotate\n",itheta); | |
| } | |
| void scale(double tx, double ty) | |
| { | |
| fprintf(stream, "%lf %lf scale\n",tx, ty); | |
| } | |
| void translate(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; | |
| fprintf(stream, "%lf cm %lf cm translate\n", x1, y1); | |
| } | |
| 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(); | |
| fprintf(stream, "clip\n"); | |
| } | |
| 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(); | |
| fprintf(stream, "eoclip\n"); | |
| } | |
| void clipoff(void) | |
| { | |
| fprintf(stream, "clip\n"); | |
| } | |
| 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: fprintf(stream, "%lf cm %lf cm moveto\n", x1,y1); | |
| break; | |
| case 2: fprintf(stream, "%lf cm %lf cm lineto\n", x1,y1); | |
| 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); | |
| fprintf(stream, "%lf cm %lf cm moveto\n", x1, y1); | |
| fprintf(stream, "%lf cm %lf cm lineto\n", xx1, yy1); | |
| stroke(); | |
| linety(1); linewidth(1);setgray(0.0); | |
| return; | |
| } | |
| 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; | |
| fprintf(stream, "%lf cm %lf cm moveto\n", x1, y1); | |
| fprintf(stream, "%lf cm %lf cm lineto\n", xx1, yy1); | |
| stroke(); | |
| return; | |
| } | |
| 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) fprintf(stream, " fill\n"); | |
| stroke(); | |
| linety(1); linewidth(1);setgray(0.0); | |
| return; | |
| } | |
| 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(); | |
| stroke(); | |
| return; | |
| } | |
| void rectfill1(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(); | |
| fprintf(stream, " fill\n"); | |
| stroke(); | |
| return; | |
| } | |
| 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/(xw2-xw1)*(xv2-xv1)*xsize; | |
| linewidth(w);linety(it);setgray(g); | |
| newpath(); | |
| fprintf(stream, "%lf cm %lf cm %lf cm 0 360 arc\n", xx1, yy1, rr1); | |
| if(g!=0.0) fprintf(stream, " fill\n"); | |
| stroke(); | |
| linety(1); linewidth(1);setgray(0.0); | |
| return; | |
| } | |
| 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/(xw2-xw1)*(xv2-xv1)*xsize; | |
| newpath(); | |
| fprintf(stream, "%lf cm %lf cm %lf cm 0 360 arc\n", xx1, yy1, rr1); | |
| stroke(); | |
| return; | |
| } | |
| void circfill1(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(); | |
| fprintf(stream, "%lf cm %lf cm %lf cm 0 360 arc\n", xx1, yy1, rr1); | |
| fprintf(stream, " fill\n"); | |
| stroke(); | |
| return; | |
| } | |
| 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/20.0; | |
| plot(x,y,3); | |
| for (i=1;i<=20;i++) { | |
| x=x1+rx*cos(dt*i);y=y1+ry*sin(dt*i); plot(x,y,2); | |
| } | |
| if(g!=0.0) {fprintf(stream, "fill\n");} | |
| stroke(); | |
| linety(1); linewidth(1.0); setgray(0.0); return; | |
| } | |
| 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/20.0; | |
| plot(x,y,3); | |
| for (i=1;i<=20;i++) { | |
| x=x1+rx*cos(dt*i);y=y1+ry*sin(dt*i); plot(x,y,2); | |
| } | |
| stroke(); | |
| } | |
| void ellipsefill1(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/20.0; | |
| plot(x,y,3); | |
| for (i=1;i<=20;i++) { | |
| x=x1+rx*cos(dt*i);y=y1+ry*sin(dt*i); plot(x,y,2); | |
| } | |
| fprintf(stream, "fill\n"); | |
| 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(); | |
| fprintf(stream,"%lf cm %lf cm %lf cm %lf %lf arc \n",xx1,yy1,rr1,t1,t2); | |
| stroke(); linety(1); linewidth(1.0); setgray(0.0); | |
| return; | |
| } | |
| 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(); | |
| fprintf(stream,"%lf cm %lf cm %lf cm %lf %lf arc \n",xx1,yy1,rr1,t1,t2); | |
| return; | |
| } | |
| 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); | |
| fprintf(stream, "%lf cm %lf cm %lf cm %lf cm %lf cm %lf cm curveto\n", xx2 ,yy2,xx3,yy3,xx4,yy4); | |
| stroke(); | |
| linety(1);linewidth(1.0); setgray(0.0); | |
| return; | |
| } | |
| 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); | |
| fprintf(stream, "%lf cm %lf cm %lf cm %lf cm %lf cm %lf cm curveto\n", xx2 ,yy2,xx3,yy3,xx4,yy4); | |
| stroke(); | |
| return; | |
| } | |
| 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); setgray(g); | |
| newpath(); plot(x1,y1,3); plot(x1+r1*cos(aa1), y1+r1*sin(aa1), 2); | |
| plot(x1+r1*cos(aa2), y1+r1*sin(aa2), 2); | |
| closepath(); | |
| if(g!=0.0) {fprintf(stream, "fill\n");} | |
| stroke(); | |
| linety(1); linewidth(1.0); setgray(0.0); | |
| return; | |
| } | |
| 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*cos(aa1), y1+r1*sin(aa1), 2); | |
| plot(x1+r1*cos(aa2), y1+r1*sin(aa2), 2); | |
| closepath(); | |
| stroke(); | |
| return; | |
| } | |
| void trianglfill1(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*cos(aa1), y1+r1*sin(aa1), 2); | |
| plot(x1+r1*cos(aa2), y1+r1*sin(aa2), 2); | |
| closepath(); | |
| fprintf(stream, "fill\n"); | |
| stroke(); | |
| return; | |
| } | |
| 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); | |
| return; | |
| } | |
| 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(); | |
| return; | |
| } | |
| 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); | |
| return; | |
| } | |
| 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(); | |
| return; | |
| } | |
| 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=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(x2, y2, 3); plot(x3, y3, 2); plot(x2, y2, 3); plot(x4, y4, 2); | |
| stroke(); linety(1); linewidth(1.0); setgray(0.0); | |
| return; | |
| } | |
| void arrow1(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(x2, y2, 3); plot(x3, y3, 2); plot(x2, y2, 3); plot(x4, y4, 2); | |
| stroke(); | |
| return; | |
| } | |
| 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=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+pow(-1,i)*ex; yy=y1+(i*2+1)*dy+pow(-1,i)*ey; | |
| plot(xx, yy, 2); | |
| } | |
| plot(x2, y2, 2); | |
| stroke(); linety(1); linewidth(1.0); | |
| return; | |
| } | |
| void battery(double x1, double y1, double x2, double y2, double d, double w) | |
| { | |
| double s,dx,dy,ex,ey,xx,yy; | |
| s=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); | |
| return; | |
| } | |
| 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=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*cos(t))+t/2.0/3.14159*ds)*ex-a*d*sin(t)*ey; | |
| yy=y1+((d-d*cos(t))+t/2.0/3.14159*ds)*ey+a*d*sin(t)*ex; | |
| plot(xx, yy, 2); | |
| } stroke(); | |
| linewidth(1.0);linety(1); | |
| return; | |
| } | |
| void text(double x, double y, int n, char* str1) | |
| { | |
| double x1, y1; | |
| x1 = ((x-xw1)/(xw2-xw1)*(xv2-xv1) + xv1)*xsize; | |
| y1 = ((y-yw1)/(yw2-yw1)*(yv2-yv1) + yv1)*ysize; | |
| fprintf(stream, "%lf cm %lf cm moveto\n", x1, y1); | |
| fprintf(stream, "(%s) show\n", str1); | |
| return; | |
| } | |
| void textx(double x, double y, int n, char* str1) | |
| { | |
| plot(x, y, 3); | |
| fprintf(stream, "%lf %lf rmoveto\n", -n/2.0*9.0,-3.0/2.0*15.0); | |
| fprintf(stream, "(%s) show\n", str1); | |
| return; | |
| } | |
| void texty(double x, double y, int n, char* str1) | |
| { | |
| plot(x, y, 3); | |
| fprintf(stream, "%lf %lf rmoveto\n", -(n+1)*9.0,-1.0/2.0*12.0); | |
| fprintf(stream, "(%s) show\n", str1); | |
| return; | |
| } | |
| void setchar(int ichar, int ip) | |
| { | |
| switch (ichar) { | |
| case 1:fprintf(stream, "/Times-Roman findfont %d scalefont setfont \n",ip); | |
| break; | |
| case 2:fprintf(stream, "/Times-Bold findfont %d scalefont setfont \n",ip); | |
| break; | |
| case 3:fprintf(stream, "/Times-Italic findfont %d scalefont setfont \n",ip); | |
| break; | |
| case 4:fprintf(stream, "/Times-BoldItalic findfont %d scalefont setfont \n",ip); | |
| break; | |
| case 5:fprintf(stream, "/Helvetica findfont %d scalefont setfont \n",ip); | |
| break; | |
| case 6:fprintf(stream, "/Helvetica-Bold findfont %d scalefont setfont \n",ip); | |
| break; | |
| case 7:fprintf(stream, "/Helvetica-Oblique findfont %d scalefont setfont \n",ip); | |
| break; | |
| case 8:fprintf(stream, "/Helvetica-BoldOblique findfont %d scalefont setfont \n",ip); | |
| break; | |
| case 9:fprintf(stream, "/Courier findfont %d scalefont setfont \n",ip); | |
| break; | |
| case 10:fprintf(stream, "/Courier-Bold findfont %d scalefont setfont \n",ip); | |
| break; | |
| case 11:fprintf(stream, "/Courier-Oblique findfont %d scalefont setfont \n",ip); | |
| break; | |
| case 12:fprintf(stream, "/Courier-BoldOblique findfont %d scalefont setfont \n",ip); | |
| break; | |
| case 13:fprintf(stream, "/Symbol findfont %d scalefont setfont \n",ip); | |
| break; | |
| } | |
| return; | |
| } | |
| void square(double x, double y) | |
| { | |
| double x1, y1, delta; | |
| x1 = ((x-xw1)/(xw2-xw1)*(xv2-xv1) + xv1)*xsize; | |
| y1 = ((y-yw1)/(yw2-yw1)*(yv2-yv1) + yv1)*ysize; | |
| delta = 0.1; | |
| fprintf(stream, "%lf cm %lf cm moveto\n", x1-delta,y1-delta); | |
| fprintf(stream, "%lf cm %lf cm lineto\n", x1+delta,y1-delta); | |
| fprintf(stream, "%lf cm %lf cm moveto\n", x1+delta,y1+delta); | |
| fprintf(stream, "%lf cm %lf cm lineto\n", x1-delta,y1+delta); | |
| closepath();stroke(); | |
| return; | |
| } | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment