From 002586642116a741d40c197b07191c63515d35dd Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sat, 23 May 2009 00:01:24 +0000 Subject: move metapost docs out of texmf-doc git-svn-id: svn://tug.org/texlive/trunk@13402 c570f23f-e606-0410-a88d-b1316a301751 --- .../doc/metapost/metapost-examples/Makefile | 21 + .../doc/metapost/metapost-examples/README | 21 + .../doc/metapost/metapost-examples/data1 | 11 + .../doc/metapost/metapost-examples/data2 | 11 + .../doc/metapost/metapost-examples/data3 | 11 + .../doc/metapost/metapost-examples/examples.mp | 4896 ++++++++++++++++++++ .../doc/metapost/metapost-examples/mp2html.pl | 170 + .../doc/english/metapost-examples/Makefile | 21 - .../texmf-doc/doc/english/metapost-examples/README | 21 - .../texmf-doc/doc/english/metapost-examples/data1 | 11 - .../texmf-doc/doc/english/metapost-examples/data2 | 11 - .../texmf-doc/doc/english/metapost-examples/data3 | 11 - .../doc/english/metapost-examples/examples.mp | 4896 -------------------- .../doc/english/metapost-examples/mp2html.pl | 170 - Master/tlpkg/tlpsrc/metapost-examples.tlpsrc | 2 - 15 files changed, 5141 insertions(+), 5143 deletions(-) create mode 100644 Master/texmf-dist/doc/metapost/metapost-examples/Makefile create mode 100644 Master/texmf-dist/doc/metapost/metapost-examples/README create mode 100644 Master/texmf-dist/doc/metapost/metapost-examples/data1 create mode 100644 Master/texmf-dist/doc/metapost/metapost-examples/data2 create mode 100644 Master/texmf-dist/doc/metapost/metapost-examples/data3 create mode 100644 Master/texmf-dist/doc/metapost/metapost-examples/examples.mp create mode 100644 Master/texmf-dist/doc/metapost/metapost-examples/mp2html.pl delete mode 100644 Master/texmf-doc/doc/english/metapost-examples/Makefile delete mode 100644 Master/texmf-doc/doc/english/metapost-examples/README delete mode 100644 Master/texmf-doc/doc/english/metapost-examples/data1 delete mode 100644 Master/texmf-doc/doc/english/metapost-examples/data2 delete mode 100644 Master/texmf-doc/doc/english/metapost-examples/data3 delete mode 100644 Master/texmf-doc/doc/english/metapost-examples/examples.mp delete mode 100644 Master/texmf-doc/doc/english/metapost-examples/mp2html.pl diff --git a/Master/texmf-dist/doc/metapost/metapost-examples/Makefile b/Master/texmf-dist/doc/metapost/metapost-examples/Makefile new file mode 100644 index 00000000000..f2300310718 --- /dev/null +++ b/Master/texmf-dist/doc/metapost/metapost-examples/Makefile @@ -0,0 +1,21 @@ +METAPOST = mpost --interaction=nonstopmode + +all: + perl mp2html.pl + +old_all: + TEX=latex $(METAPOST) examples.mp + +clean: + rm -f examples.[0-9] examples.[0-9][0-9] examples.[0-9][0-9][0-9] *.mps + rm -f examples.tex examples.ps examples.dvi examples.pdf + rm -f *.dvi *.aux *.log *\~ + rm -f mpxerr.* *.mpx mptextmp.* + rm -f nohup.out + +cleanse: clean + rm -f examples.[0-9].gif examples.[0-9][0-9].gif examples.[0-9][0-9][0-9].gif + rm -f examples.[0-9].eps examples.[0-9][0-9].eps examples.[0-9][0-9][0-9].eps + rm -f examples.[0-9].ps examples.[0-9][0-9].ps examples.[0-9][0-9][0-9].ps + rm -f examples.[0-9].tex examples.[0-9][0-9].tex examples.[0-9][0-9][0-9].tex + rm -f examples.html diff --git a/Master/texmf-dist/doc/metapost/metapost-examples/README b/Master/texmf-dist/doc/metapost/metapost-examples/README new file mode 100644 index 00000000000..a884163d656 --- /dev/null +++ b/Master/texmf-dist/doc/metapost/metapost-examples/README @@ -0,0 +1,21 @@ +These are a few (hundred) example pictures drawn with +metapost, ranging from very simple (lines and circles) +to rather intricate (uncommon geometric transformations, +fractals, bitmap, etc.). + +README this file +data1 sample data file (for plot drawings) +data2 +data3 +examples.mp The examples +mptohtml.pl A perl script that turns the examples into a PostScript + file and into an HTML file and GIF pictures + The resulting (huge) Web page may be seen here: + http://www.math.jussieu.fr/~zoonek/LaTeX/Metapost/metapost.html +Makefile runs the above script + +Vincent Zoonekynd +August 1999 +Updated august 2001 +Version 0.01 +Distributed under the GPL (see http://www.gnu.org/copyleft/gpl.html for details) diff --git a/Master/texmf-dist/doc/metapost/metapost-examples/data1 b/Master/texmf-dist/doc/metapost/metapost-examples/data1 new file mode 100644 index 00000000000..24092f087bb --- /dev/null +++ b/Master/texmf-dist/doc/metapost/metapost-examples/data1 @@ -0,0 +1,11 @@ +0 82 +1 90 +2 100 +3 97 +4 70 +5 75 +6 93 +7 103 +8 115 +9 121 +10 119 diff --git a/Master/texmf-dist/doc/metapost/metapost-examples/data2 b/Master/texmf-dist/doc/metapost/metapost-examples/data2 new file mode 100644 index 00000000000..c934e72a70b --- /dev/null +++ b/Master/texmf-dist/doc/metapost/metapost-examples/data2 @@ -0,0 +1,11 @@ +0 100 +1 95 +2 85 +3 80 +4 83 +5 90 +6 88 +7 96 +8 99 +9 100 +10 105 diff --git a/Master/texmf-dist/doc/metapost/metapost-examples/data3 b/Master/texmf-dist/doc/metapost/metapost-examples/data3 new file mode 100644 index 00000000000..7e54a066ff7 --- /dev/null +++ b/Master/texmf-dist/doc/metapost/metapost-examples/data3 @@ -0,0 +1,11 @@ +0 125 +1 119 +2 123 +3 104 +4 81 +5 94 +6 90 +7 88 +8 85 +9 89 +10 90 diff --git a/Master/texmf-dist/doc/metapost/metapost-examples/examples.mp b/Master/texmf-dist/doc/metapost/metapost-examples/examples.mp new file mode 100644 index 00000000000..7a156f03deb --- /dev/null +++ b/Master/texmf-dist/doc/metapost/metapost-examples/examples.mp @@ -0,0 +1,4896 @@ +warningcheck:=0; + +input rboxes; +input sarith; +input graph; + +verbatimtex +\documentclass[a4paper,12pt]{article} +\usepackage[T1]{fontenc} +\usepackage[latin1]{inputenc} +\begin{document} +etex + +vardef TEX primary s = + write "verbatimtex" to "mptextmp.mp"; + write "\documentclass[12pt]{article}" to "mptextmp.mp"; + write "\usepackage[T1]{fontenc}" to "mptextmp.mp"; + write "\usepackage{amsmath,amssymb}" to "mptextmp.mp"; + write "\begin{document}" to "mptextmp.mp"; + write "etex" to "mptextmp.mp"; + write "btex "&s&" etex" to "mptextmp.mp"; + write EOF to "mptextmp.mp"; + scantokens "input mptextmp" +enddef; + +vardef longueur(expr p) = + save l,i; + numeric l; + l:=0; + for i=0 step .01 until length(p): + l:=l+abs( (point i of p) - (point(i+.01) of p) ); + endfor; + l % Pas de point-virgule +enddef; + +vardef milieu(expr p) = + save l,i,tot,A,B; + numeric l,tot,i; + pair A,B; + tot := longueur(p); + l:=0; + B := point 0 of p; + for i:=0 step .01 until length(p): + A := B; + B := point i of p; + l := l+abs(B-A); + exitif l > 1/2 tot; + endfor; + show l; show tot; + 1/2[A,B] +enddef; + +vardef milieu_time(expr p) = + save l,i,tot,A,B,t; + numeric l,tot,i,t; + pair A,B; + tot := longueur(p); + l:=0; + B := point 0 of p; + for i:=0 step .01 until length(p): + t:=i; + A := B; + B := point i of p; + l := l+abs(B-A); + exitif l > 1/2 tot; + endfor; + t +enddef; + +beginfig(1) + pair A, B, C; + A:=(0,0); B:=(1cm,0); C:=(0,1cm); + draw A--B--C; + +endfig; +beginfig(2) + pair A, B, C; + A:=(0,0); B:=(1cm,0); C:=(0,1cm); + draw A--B--C--cycle; + +endfig; +beginfig(3) + pair A[]; + A[0]:=(-1cm, -1cm); + A[1]:=( 1cm, -1cm); + A[2]:=( 1cm, 1cm); + A[3]:=(-1cm, 1cm); + draw A[0]--A[1]--A[2]--A[3]--cycle; + draw A[0]--A[2]; + draw A[1]--A[3]; +endfig; +beginfig(4) + pair A; + A:=(0,0); B:=(1cm,0); C:=(0,1cm); + draw A withpen pencircle scaled 4bp; + +endfig; +beginfig(5) + pair A, B, C; + A:=(0,0); B:=(1cm,0); C:=(0,1cm); + draw A--B--C--cycle; + draw A withpen pencircle scaled 4bp; + draw B withpen pencircle scaled 4bp; + draw C withpen pencircle scaled 4bp; +endfig; +beginfig(6) + pair A, B, C, D; + A:=(0,0); B:=(1cm,0); + C:=(1cm,1cm); D:=(0,1cm); + draw A--B--C--D--cycle; + draw A--C; + draw B--D; + draw A withpen pencircle scaled 4bp; + draw B withpen pencircle scaled 4bp; + draw C withpen pencircle scaled 4bp; + draw D withpen pencircle scaled 4bp; +endfig; +beginfig(7) + pair A, B, C; + A:=(0,0); B:=(1cm,0); C:=(0,1cm); + draw A--B--C--cycle; + draw 1/2[A,B] -- C; + draw 1/2[B,C] -- A; + draw 1/2[C,A] -- B; +endfig; +beginfig(8) + pair A, B, C; + A:=(0,0); B:=(1cm,0); C:=(0,1cm); + draw A--B--C--cycle; + draw 1/2[A,B] -- C; + draw 1/2[B,C] -- A; + draw 1/2[C,A] -- B; + draw 1/3 A + 1/3 B + 1/3 C + withpen pencircle scaled 4bp; +endfig; +beginfig(9) + pair A, B, C; + A:=(0,0); B:=(1cm,0); C:=(0,1cm); + draw A--B--C--cycle; + draw A--B withpen pencircle scaled 2bp; + +endfig; +beginfig(10) + pair A, B, C; + A:=(0,0); B:=(1cm,0); C:=(0,1cm); + draw A--B--C--cycle; + draw A--B withcolor (green + red); + +endfig; +beginfig(11) + pair A, B, C; + A:=(0,0); B:=(1cm,0); C:=(0,1cm); + draw A--B; + draw B--C dashed evenly; + draw C--A dashed withdots; + +endfig; +beginfig(12) + pair A, B, C; + A:=(0,0); B:=(1cm,0); C:=(0,1cm); + draw A--B withpen pencircle scaled 2bp withcolor .8white; + draw B--C withpen pencircle scaled 2bp withcolor .6white; + draw C--A withpen pencircle scaled 2bp withcolor .4white; + +endfig; +beginfig(13) + pair A, B, C; + A:=(0,0); B:=(1cm,0); C:=(0,1cm); + draw A--B--C--cycle; + draw 1/2[A,B] -- C dashed evenly; + draw 1/2[B,C] -- A dashed evenly; + draw 1/2[C,A] -- B dashed evenly; + draw 1/3 A + 1/3 B + 1/3 C + withpen pencircle scaled 4bp + withcolor red; +endfig; +beginfig(14) + draw (0,0)--(3cm,0) dashed evenly scaled 2; + draw (0,-5mm)--(3cm,-5mm) dashed evenly; + +endfig; +beginfig(15) + draw (0,0)--(3cm,0) + dashed dashpattern(on 2bp off 3bp); + +endfig; +beginfig(16) + draw (0,0)--(3cm,0) dashed dashpattern(on 1bp off 2bp on 10bp off 2bp); +endfig; +beginfig(17) + pair A, B, C; + A:=(0,0); B:=(1cm,0); C:=(0,1cm); + drawarrow C--B--A; + drawarrow A--C withpen pencircle scaled 2bp; + +endfig; +beginfig(18) + pair A, B, C; + A:=(0,0); B:=(1cm,0); C:=(0,1cm); + draw C--B--A--cycle; + drawdblarrow A--C withpen pencircle scaled 2bp; + +endfig; +beginfig(19) + draw (-1.5cm,0)--(1.5cm,0); + draw (0,-1.5cm)--(0,1.5cm); + drawarrow (0,0)--(1cm,0) + withpen pencircle scaled 2bp; + drawarrow (0,0)--(0,1cm) + withpen pencircle scaled 2bp; +endfig; +beginfig(20) + pair A, B, C; + A:=(0,0); B:=(1cm,0); C:=(0,1cm); + fill A--B--C--cycle withcolor .8 white; + +endfig; +beginfig(21) + pair A, B, C; + A:=(0,0); B:=(1cm,0); C:=(0,1cm); + fill A--B--C--cycle withcolor .8 white; + draw A--B--C--cycle; + +endfig; +beginfig(22) + pair A, B, C; + A:=(0,0); B:=(1cm,0); C:=(0,1cm); + fill A--B--C--cycle withcolor .8 white; + draw A--B--C--cycle withpen pencircle scaled 2bp; +endfig; +beginfig(23) + pair A, B, C; + A:=(0,0); B:=(1cm,0); C:=(0,1cm); + draw A--B--C--cycle withpen pencircle scaled 2bp; + fill A--B--C--cycle withcolor .8 white; +endfig; +beginfig(24) + pair A, B, C, D; + A:=(0,0); B:=(1cm,0); + C:=(1cm,1cm); D:=(0,1cm); + fill A--C--B--D--cycle withcolor .8white; +endfig; +beginfig(25) + pair A, B, C, D; + A:=(0,0); B:=(1cm,0); + C:=(1cm,1cm); D:=(0,1cm); + path p; + p := A--C--B--D--cycle; + fill p withcolor .8white; + draw p; +endfig; +beginfig(26) + pair A, B, C, D; + A:=(-1.5cm,-1.5cm); B:=(1.5cm,-1.5cm); + C:=(1.5cm,1.5cm); D:=(-1.5cm,1.5cm); + fill A--C--B--D--cycle withcolor .8white; + draw (-1.5cm,0)--(1.5cm,0); + draw (0,-1.5cm)--(0,1.5cm); + drawarrow (0,0)--(1cm,0) + withpen pencircle scaled 2bp; + drawarrow (0,0)--(0,1cm) + withpen pencircle scaled 2bp; +endfig; +beginfig(27) + pair A; + A := (0,0); + draw A withpen pencircle scaled 4bp; + label.top(btex Au dessus etex, A); + label.bot(btex En dessous etex, A); + label.rt (btex À droite etex, A); + label.lft(btex À gauche etex, A); + +endfig; +beginfig(28) + pair A; + A := (0,0); + draw A withpen pencircle scaled 4bp; + label.ulft(btex En haut à gauche etex, A); + label.urt (btex En haut à droite etex, A); + label.llft(btex En bas à gauche etex, A); + label.lrt (btex En bas à droite etex, A); + +endfig; +beginfig(29) + pair A; + A := (0,0); + dotlabel.urt(btex $A$ etex, A); + +endfig; +beginfig(30) + pair A, B, C; + A:=(0,0); B:=(1cm,0); C:=(0,1cm); + draw A--B--C--cycle; + dotlabel.llft(btex $A$ etex, A); + dotlabel.lrt(btex $B$ etex, B); + dotlabel.top(btex $C$ etex, C); +endfig; +beginfig(31) + pair A, B, C; + A:=(0,0); B:=(1cm,0); C:=(0,1cm); + draw A--B--C--cycle; + label.bot(btex $1$ etex, 1/2[A,B]); + label.lft(btex $1$ etex, 1/2[A,C]); + label.urt(btex $\sqrt 2$ etex, 1/2[B,C]); +endfig; +beginfig(32) + u:=1cm; + pair A,B,C,D,E,F,G; + A := (-u,u); + B := (0,u); + C := (u,u); + D := (-u,0); + E := (0,0); + F := (u,0); + draw A--D; draw A--E; draw A--F; + draw B--D; draw B--E; draw B--F; + draw C--D; draw C--E; draw C--F; + dotlabel.top(btex $a$ etex, A); + dotlabel.top(btex $b$ etex, B); + dotlabel.top(btex $c$ etex, C); + dotlabel.bot(btex $a'$ etex, D); + dotlabel.bot(btex $b'$ etex, E); + dotlabel.bot(btex $c'$ etex, F); +endfig; +beginfig(33) + draw fullcircle; + +endfig; +beginfig(34) + draw (0,0) withpen pencircle scaled 4bp; + draw fullcircle scaled 1cm; + +endfig; +beginfig(35) + draw (0,0) withpen pencircle scaled 4bp; + draw fullcircle scaled 1cm shifted (1cm,1cm); + +endfig; +beginfig(36) + pair A, B, C; + A:=(0,0); B:=(1cm,0); C:=(0,1cm); + draw A--B--C--cycle; + fill fullcircle scaled 4bp shifted A withcolor white; + fill fullcircle scaled 4bp shifted B withcolor white; + fill fullcircle scaled 4bp shifted C withcolor white; + draw fullcircle scaled 4bp shifted A; + draw fullcircle scaled 4bp shifted B; + draw fullcircle scaled 4bp shifted C; +endfig; +beginfig(37) + draw (0,0) .. (0,1cm) .. (1cm,0) .. (1cm,1cm); + draw (0,0) withpen pencircle scaled 4bp; + draw (0,1cm) withpen pencircle scaled 4bp; + draw (1cm,0) withpen pencircle scaled 4bp; + draw (1cm,1cm) withpen pencircle scaled 4bp; + +endfig; +beginfig(38) + draw (0,0) -- (0,1cm) .. (1cm,0) .. (1cm,1cm); + +endfig; +beginfig(39) + draw (0,0) --- (0,1cm) .. (1cm,0) .. (1cm,1cm); + +endfig; +beginfig(40) + draw (0,0) .. (0,1cm) .. (1cm,0) .. (1cm,1cm) + .. cycle; + +endfig; +beginfig(41) + pair A, B, C, D; + A:=(0,0); B:=(1cm,0); + C:=(1cm,1cm); D:=(0,1cm); + draw A..B..C..D..cycle; +endfig; +beginfig(42) + draw (0,0) .. (1cm,1cm) .. cycle; +endfig; +beginfig(43) + draw (0,0){(0,1)} .. (2cm,0){(1,0)}; + +endfig; +beginfig(44) + draw (0,0){dir 90} .. (2cm,0){dir 0}; + +endfig; +beginfig(45) + draw (0,0){up} .. (2cm,0){right}; + +endfig; +beginfig(46) + draw (0,0){up} .. (2cm,0){up}; +endfig; +beginfig(47) + draw (0,0){up} .. (2cm,0){up} .. cycle; +endfig; +beginfig(48) + alpha := 30; + draw (0,0) -- 2cm*dir 0; + draw (0,0) -- 2cm*dir alpha; + draw 1cm * dir 0 {dir 90} .. + 1cm * dir alpha {dir(90+alpha)}; +endfig; +beginfig(49) + alpha := 30; + draw (0,0) -- 2cm*dir 0; + draw (0,0) -- 2cm*dir alpha; + draw 1cm * dir 0 {dir 90} .. + 1cm * dir alpha {dir(90+alpha)}; + draw 1.1cm * dir 0 {dir 90} .. + 1.1cm * dir alpha {dir(90+alpha)}; +endfig; +beginfig(50) + def draw_angle(expr A, O, B, n) = + draw_angle_(A,O,B,5mm); + if n>1 : draw_angle_(A,O,B,4.5mm); fi; + if n>2 : draw_angle_(A,O,B,4mm); fi; + if n>3 : draw_angle_(A,O,B,5.5mm); fi; + enddef; + def draw_angle_(expr A,O,B,d) = + draw (O + d*unitvector(A-O)) + { d*unitvector(A-O) rotated 90 } + .. + { d*unitvector(B-O) rotated 90 } + (O + d*unitvector(B-O)); + enddef; + pair A, B, C; + A := (0,0); + B := (3cm,0); + C := (1cm,2cm); + draw A--B--C--cycle; + draw_angle(B,A,C,1); + draw_angle(C,B,A,2); + draw_angle(A,C,B,3); +endfig; +beginfig(51) + u:=1cm; + path p; + p := (u,0){up}..(-u,0){down}--cycle; + fill p withcolor .8*white; + draw p withpen pencircle scaled 1bp; +endfig; +beginfig(52) + u:=1cm; + path p; + p := (u,0){up} .. + (-u,0){down} -- + (-.2u,0){up} .. + (.2u,0){down} -- + cycle; + fill p withcolor .8*white; + draw p withpen pencircle scaled 1bp; +endfig; +beginfig(53) + u:=1cm; + pair A,AA,B,BB,C,D; + A := ( .2u, .05u); + AA := ( .2u, -.05u); + B := ( u, .05u); + BB := ( u, -.05u); + C := (-.2u, 0); + D := ( -u, 0); + path p; + p:= B{up} .. D{down} .. BB{up} -- + AA{down} .. C{up} .. A{down} -- cycle; + fill p withcolor .8*white; + draw p withpen pencircle scaled 1bp; +endfig; +beginfig(54) + u:=1cm; + pair A,B,C,D; + A:=(0,0); + B:=u*dir 60; + C:=u*dir -60; + D:=(2u,0); + draw A withpen pencircle scaled 4bp; + draw B withpen pencircle scaled 4bp; + draw C withpen pencircle scaled 4bp; + draw D withpen pencircle scaled 4bp; + draw A--D--B--D--C; + draw A{up}..B; + draw A{down}..C; + draw A{dir 30}..B; + draw A{dir -30}..C; +endfig; +beginfig(55) + draw (0,0) .. (1cm,1cm) .. (2cm,0); + +endfig; +beginfig(56) + draw (0,0) .. tension 2 .. + (1cm,1cm) .. (2cm,0); + +endfig; +beginfig(57) + draw (0,u) {right} .. + ( u*dir -150 ){dir 120} .. + ( u*dir -30 ){dir -120} .. + cycle; +endfig; +beginfig(58) + draw (0,u) {right} .. tension 2 .. + ( u*dir -150 ){dir 120} .. tension 2 .. + ( u*dir -30 ){dir -120} .. tension 2 .. + cycle; +endfig; +beginfig(59) + draw (0,u) {right} .. tension 4 .. + ( u*dir -150 ){dir 120} .. tension 4 .. + ( u*dir -30 ){dir -120} .. tension 4 .. + cycle; +endfig; +beginfig(60) + u:=.5cm; + pair A,B,C,D; + A:=(0,0); B:=(-u,2u); + C:=(4u,3u); D:=(3u,0); + draw A.. controls B and C .. D + withpen pencircle scaled 2pt; + draw B--C dashed evenly; + drawarrow A--B; + drawarrow D--C; + +endfig; +beginfig(61) + pair A, B, C, D; + A = (0,0); + D = (2u,0); + B = (-u,2u); + C = (3u,3u); + + draw A withpen pencircle scaled 4bp; + draw B withpen pencircle scaled 4bp; + draw C withpen pencircle scaled 4bp; + draw D withpen pencircle scaled 4bp; + draw A .. controls B and C .. D; + + pair a[]; + a[1] := A; + a[2] := B; + a[3] := C; + a[4] := D; + + a[12] := 1/2 [ a[1], a[2] ]; + a[23] := 1/2 [ a[2], a[3] ]; + a[34] := 1/2 [ a[3], a[4] ]; + a[123] := 1/2 [ a[12], a[23] ]; + a[234] := 1/2 [ a[23], a[34] ]; + a[1234] := 1/2 [ a[123], a[234] ]; + + draw a[1234] withpen pencircle scaled 4bp; +endfig; +beginfig(62) +vardef bezier(expr n,A,B,C,D) = + save a; + pair a[]; + a[1] := A; + a[2] := B; + a[3] := C; + a[4] := D; + + a[12] := 1/2 [ a[1], a[2] ]; + a[23] := 1/2 [ a[2], a[3] ]; + a[34] := 1/2 [ a[3], a[4] ]; + a[123] := 1/2 [ a[12], a[23] ]; + a[234] := 1/2 [ a[23], a[34] ]; + a[1234] := 1/2 [ a[123], a[234] ]; + + if n>0: + bezier(n-1, a[1], a[12], a[123], a[1234]); + bezier(n-1, a[1234], a[234], a[34], a[4]); + else: + draw a[1234] withpen pencircle scaled 2bp; + fi; +enddef; + + pair A, B, C, D; + A = (0,0); + D = (2u,0); + B = (-u,2u); + C = (3u,3u); + + draw A withpen pencircle scaled 4bp; + draw B withpen pencircle scaled 4bp; + draw C withpen pencircle scaled 4bp; + draw D withpen pencircle scaled 4bp; + + bezier(5,A,B,C,D); +endfig; +beginfig(63) + draw (0,0){up} .. (1cm, 1mm) .. (2cm,0){down}; + +endfig; +beginfig(64) + draw (0,0){up} ... (1cm, 1mm) ... (2cm,0){down}; + +endfig; +beginfig(65) + draw (0,0){curl 0} .. (0,1cm)..(1cm,0)..(1cm,1cm); + +endfig; +beginfig(66) + draw (0,0){curl 1} .. (0,1cm)..(1cm,0)..(1cm,1cm); + +endfig; +beginfig(67) + draw (0,0){curl 2} .. (0,1cm)..(1cm,0)..(1cm,1cm); + +endfig; +beginfig(68) + pair A,B,C,D; + xpart A = ypart A = ypart B = xpart C = 0; + xpart B = ypart C = xpart D = ypart D = 2cm; + draw A--B--C--D--cycle withpen pencircle scaled 2bp; +endfig; +beginfig(69) + pair A,B,C,D,M; + numeric lambda, mu; + A=(0,0); B=(2cm,3cm); + C=(1cm,0); D=(-1cm,2cm); + M = lambda [A,B]; + M = mu [C,D]; + draw A--B; + draw C--D; + draw M withpen pencircle scaled 4bp; + +endfig; +beginfig(70) + pair A,B,C,D,M; + A=(0,0); B=(2cm,3cm); + C=(1cm,0); D=(-1cm,2cm); + M = whatever [A,B]; + M = whatever [C,D]; + draw A--B; + draw C--D; + draw M withpen pencircle scaled 4bp; + +endfig; +beginfig(71) + pair A,B,C,AA,BB,CC,G; + A=(0,0); B=(3cm,0); C=(1cm,2cm); + AA = 1/2 [B,C]; + BB = 1/2 [C,A]; + CC = 1/2 [A,B]; + G = whatever [A,AA]; + G = whatever [B,BB]; + draw A--B--C--cycle; + draw A--AA dashed withdots; + draw B--BB dashed withdots; + draw C--CC dashed withdots; + draw G withpen pencircle scaled 4bp; +endfig; +beginfig(72) + path p; + p := fullcircle scaled 5mm; + draw p; + draw p shifted (1mm,2mm); + draw p shifted 2(1mm,2mm); + draw p shifted 3(1mm,2mm); + draw p shifted 4(1mm,2mm); + draw p shifted 5(1mm,2mm); + +endfig; +beginfig(73) + path p; + p := (5mm,-5mm) {right} .. (2cm,0); + draw p; + draw p rotated 10; + draw p rotated 20; + draw p rotated 30; + draw p rotated 40; + draw p rotated 50; + draw p rotated 60; + draw p rotated 70; + draw p rotated 80; + draw p rotated 90; + +endfig; +beginfig(74) + path p; + p := fullcircle scaled 5mm; + draw p; + draw p xscaled 2; + draw p xscaled 3; + draw p xscaled 4; + +endfig; +beginfig(75) + pair A,B,C,D,E; + A := (1cm,0); + B := A rotated 72; + C := B rotated 72; + D := C rotated 72; + E := D rotated 72; + draw A--B--C--D--E--cycle; +endfig; +beginfig(76) + pair A,B,C,D,E; + A := (1cm,0); + B := A rotated 72; + C := B rotated 72; + D := C rotated 72; + E := D rotated 72; + draw A--C--E--B--D--cycle; +endfig; +beginfig(77) + pair A,B,C,D,E; + A := (1cm,0); + B := A rotated 72; + C := B rotated 72; + D := C rotated 72; + E := D rotated 72; + pair AA, BB, CC, DD, EE; + AA = whatever [A, C]; + AA = whatever [B, D]; + BB = whatever [B, D]; + BB = whatever [C, E]; + CC = whatever [C, E]; + CC = whatever [D, A]; + DD = whatever [D, A]; + DD = whatever [E, B]; + EE = whatever [E, B]; + EE = whatever [A, C]; + fill A--C--E--B--D--cycle withcolor .8white; + fill AA--BB--CC--DD--EE--cycle withcolor white; + draw A--C--E--B--D--cycle; +endfig; +beginfig(78) + path p; + p := (0,0) -- (1cm,0); + drawarrow p withpen pencircle scaled 2bp; + drawarrow p zscaled (1,2); + +endfig; +beginfig(79) + u:=1cm; + path p; p := (0,0) -- (u,0); + pair A; A := (u,-u); + numeric a; a := 90; + drawarrow p withpen pencircle scaled 1bp; + drawarrow p rotatedaround( A, a ); + drawarrow p shifted -A rotated a shifted A + withpen pencircle scaled 1bp dashed withdots; +endfig; +beginfig(80) + path p; p := (0,0) -- (u,0); + pair A; A := (u,-u); + numeric a; a := 90; + drawarrow p withpen pencircle scaled 1bp; + draw A withpen pencircle scaled 4bp; + label ulft ( btex $A$ etex, A ); + draw (0,0) withpen pencircle scaled 4bp; + label bot ( btex $O$ etex, (0,0) ); + for i=0 upto 10: + drawarrow p shifted -(i*A/10) withcolor red; + endfor; + for i=0 upto 10: + drawarrow p shifted -A rotated (i*a/10) withcolor green; + endfor; + for i=0 upto 10: + drawarrow p shifted -A rotated a shifted (i*A/10) withcolor blue; + endfor; +endfig; +beginfig(81) + pair A,B,C,AA,BB,CC,H; + A=(0,0); B=(3cm,0); C=(1cm,2cm); + AA - A = whatever * (B-C) rotated 90; + AA = whatever [B,C]; + BB - B = whatever * (A-C) rotated 90; + BB = whatever [A,C]; + CC - C = whatever * (A-B) rotated 90; + CC = whatever [A,B]; + H = whatever [A,AA]; + H = whatever [B,BB]; + draw A--B--C--cycle; + draw A--AA; + draw B--BB; + draw C--CC; + draw H withpen pencircle scaled 4bp; +endfig; +beginfig(82) + pair A,B,C,H; + A=(0,0); B=(3cm,0); C=(1cm,2cm); + H - A = whatever * (B-C) rotated 90; + H - B = whatever * (A-C) rotated 90; + draw A--B--C--cycle; + draw H withpen pencircle scaled 4bp; +endfig; +beginfig(83) + pair A,B,C,O; + A=(0,0); B=(3cm,0); C=(1cm,2cm); + O - 1/2[B,C] = whatever * (B-C) rotated 90; + O - 1/2[A,B] = whatever * (A-B) rotated 90; + draw A--B--C--cycle; + draw O withpen pencircle scaled 4bp; + draw fullcircle scaled 2abs(O-A) shifted O; +endfig; +beginfig(84) + pair A,B,C,D; + u:=2cm; + A=(0,0); B=(u,0); C=(u,u); D=(0,u); + + transform T; + A transformed T = 1/5[A,B]; + B transformed T = 1/5[B,C]; + C transformed T = 1/5[C,D]; + + path p; + p = A--B--C--D--cycle; + draw p; + draw p transformed T; + +endfig; +beginfig(85) + pair A,B,C,D; + u:=2cm; + A=(0,0); B=(u,0); C=(u,u); D=(0,u); + + transform T; + A transformed T = 1/5[A,B]; + B transformed T = 1/5[B,C]; + C transformed T = 1/5[C,D]; + + path p; + p = A--B--C--D--cycle; + for i=0 upto 100: + draw p; + p:= p transformed T; + endfor; + +endfig; +beginfig(86) + u:=1cm; + pair A,B,C,D,E; + A := (0,u); + B := A rotated 72; + C := B rotated 72; + D := C rotated 72; + E := D rotated 72; + transform T; + A transformed T = 1/5[A,B]; + B transformed T = 1/5[B,C]; + C transformed T = 1/5[C,D]; + path p; + p := A--B--C--D--E--cycle; + draw p; + p := p transformed T; draw p; + p := p transformed T; draw p; + p := p transformed T; draw p; +endfig; +beginfig(87) + u:=3mm; + fill fullcircle scaled 2u withcolor .8white; + fill fullcircle scaled u shifted (u*dir30) + withcolor .8white; + fill fullcircle scaled u shifted (u*dir150) + withcolor .8white; +endfig; +beginfig(88) + u:=3mm; + transform T; + (0,0) transformed T = (0,0); + (1,0) transformed T = (1,1); + (0,1) transformed T = (1,0); + + fill fullcircle scaled 2u transformed T withcolor .8white; + fill fullcircle scaled u shifted (u*dir30) transformed T + withcolor .8white; + fill fullcircle scaled u shifted (u*dir150) transformed T + withcolor .8white; +endfig; +beginfig(89) + u:=3mm; + transform T; + xpart T = ypart T = 0; + xxpart T = 1; + yxpart T = 2; + xypart T = 3; + yypart T = 4; + + fill fullcircle scaled 2u transformed T withcolor .8white; + fill fullcircle scaled u shifted (u*dir30) transformed T + withcolor .8white; + fill fullcircle scaled u shifted (u*dir150) transformed T + withcolor .8white; +endfig; +beginfig(90) + draw fullcircle scaled 1cm; + draw fullcircle scaled 5mm shifted (1cm*dir45); + draw fullcircle scaled 5mm shifted (1cm*dir135); + picture mypicture; + mypicture := currentpicture; + currentpicture := nullpicture; + draw mypicture; + draw mypicture shifted (1mm,1mm); + draw mypicture shifted (2mm,2mm); + +endfig; +beginfig(91) + picture pic; + pic := nullpicture; + addto pic contour fullcircle scaled 1cm + withcolor .8white; + addto pic doublepath fullcircle scaled 1cm + withpen pencircle scaled .5bp; + addto pic also pic shifted (1mm,1mm); + draw pic; + +endfig; +beginfig(92) + u:=3mm; + picture mickey; + mickey := nullpicture; + addto mickey contour fullcircle scaled 2u + withcolor .8white; + addto mickey contour fullcircle scaled u + shifted (u*dir30) withcolor .8white; + addto mickey contour fullcircle scaled u + shifted (u*dir150) + withcolor .8white; + draw mickey; +endfig; +beginfig(93) + u:=3mm; + picture mickey; + mickey := nullpicture; + addto mickey contour fullcircle scaled 2u + withcolor .8white; + addto mickey contour fullcircle scaled u + shifted (u*dir30) withcolor .8white; + addto mickey contour fullcircle scaled u + shifted (u*dir150) withcolor .8white; + + transform T; + (0,0) transformed T = (0,0); + (1,0) transformed T = (1,1); + (0,1) transformed T = (1,0); + + draw mickey transformed T; +endfig; +beginfig(94) + u:=3mm; + picture mickey; + fill fullcircle scaled 2u withcolor .8white; + fill fullcircle scaled u shifted (u*dir30) + withcolor .8white; + fill fullcircle scaled u shifted (u*dir150) + withcolor .8white; + mickey := currentpicture; + currentpicture := nullpicture; + + transform T; + (0,0) transformed T = (0,0); + (1,0) transformed T = (1,1); + (0,1) transformed T = (1,0); + + draw mickey transformed T; +endfig; +beginfig(95) + pair A,B; + path p; + A = (0,1cm); + B = A rotated 120; + p = A{dir 0} .. tension 2 .. B{dir 120}; + draw p; + draw p rotated 120; + draw p rotated -120; +endfig; +beginfig(96) + pair A,B; + path p; + numeric n; + n:=5; + A = (0,1cm); + B = A rotated (2*360/n); + p = A{dir 180} .. tension 4 .. B{dir (180+2*360/n)}; + draw p withcolor red; + draw p rotated (1*360/n); + draw p rotated (2*360/n); + draw p rotated (3*360/n); + draw p rotated (4*360/n); +endfig; +beginfig(97) + path c[], l[]; + c[0] = fullcircle xscaled 1cm yscaled .5cm + shifted (0,1cm); + c[1] = c[0] rotated 120; + c[2] = c[1] rotated 120; + pair A; + A = (-.5cm,1cm); + l[0] = A{down} .. + (A xscaled -1 rotated 120){-down rotated 120}; + l[1] = l[0] rotated 120; + l[2] = l[1] rotated 120; + draw c[0]; draw c[1]; draw c[2]; + draw l[0]; draw l[1]; draw l[2]; +endfig; +beginfig(98) + path c[], l[]; + c[0] = fullcircle xscaled 1cm yscaled .5cm + shifted (0,1cm); + c[1] = c[0] rotated (360/4); + c[2] = c[1] rotated (360/4); + c[3] = c[2] rotated (360/4); + pair A; + A = (-.5cm,1cm); + l[0] = A{down} .. + (A xscaled -1 rotated (360/4)) + {-down rotated (360/4)}; + l[1] = l[0] rotated (360/4); + l[2] = l[1] rotated (360/4); + l[3] = l[2] rotated (360/4); + draw c[0]; draw c[1]; draw c[2]; draw c[3]; + draw l[0]; draw l[1]; draw l[2]; draw l[3]; +endfig; +beginfig(99) + pair A, B; + A := (0,0); B := (2cm,1cm); + draw A withpen pencircle scaled 4bp; + draw B withpen pencircle scaled 4bp; + draw fullcircle scaled abs(B-A) shifted 1/2[A,B]; + +endfig; +beginfig(100) + pair A; + A:=(2cm,2cm); + drawarrow origin--A; + drawarrow (origin--A) rotated -1/3 angle(A); + drawarrow (origin--A) rotated -2/3 angle(A); + drawarrow (origin--A) rotated -angle(A); + +endfig; +beginfig(101) + pair A,B; + A:=(1cm,2cm); B:=(2cm,1cm); + numeric alpha; + alpha = angle(A) - angle(B); + drawarrow origin--A; + drawarrow origin--B; + drawarrow (origin--A) rotated -1/3 alpha; + drawarrow (origin--A) rotated -2/3 alpha; + drawarrow (origin--A) rotated -alpha; +endfig; +beginfig(102) + pair A,B,C; + A=(0,0); B=(3cm,0); C=(1cm,2cm); + draw A--B--C--cycle; + label.llft(TEX decimal(angle(C-A)-angle(B-A)), A); + label.lrt(TEX decimal(angle(A-B)-angle(C-B)), B); + label.urt(TEX decimal(angle(B-C)-angle(A-C)), C); +endfig; +beginfig(103) + pair A,AA,B,BB,C,CC,O,H; + A=(0,0); B=(3cm,0); C=(1cm,2cm); + AA = 1/2[B,C]; + BB = 1/2[A,C]; + CC = 1/2[A,B]; + O - 1/2[BB,CC] = whatever * (BB-CC) rotated 90; + O - 1/2[AA,BB] = whatever * (AA-BB) rotated 90; + draw A--B--C--cycle; + draw AA withpen pencircle scaled 4bp; + draw BB withpen pencircle scaled 4bp; + draw CC withpen pencircle scaled 4bp; + draw fullcircle scaled 2abs(O-AA) shifted O; + % Il faut aussi tracer les hauteurs + pair AA,BB,CC; + AA - A = whatever * (B-C) rotated 90; + AA = whatever [B,C]; + BB - B = whatever * (A-C) rotated 90; + BB = whatever [A,C]; + CC - C = whatever * (A-B) rotated 90; + CC = whatever [A,B]; + draw A--AA; draw B--BB; draw C--CC; + draw AA withpen pencircle scaled 4bp; + draw BB withpen pencircle scaled 4bp; + draw CC withpen pencircle scaled 4bp; + % Il passe aussi par le milieu de HA, HB, HC + H = whatever [A,AA]; + H = whatever [B,BB]; + draw 1/2 [A,H] withpen pencircle scaled 4bp; + draw 1/2 [B,H] withpen pencircle scaled 4bp; + draw 1/2 [C,H] withpen pencircle scaled 4bp; +endfig; +beginfig(104) + pair A,B,C,M,h; + u:=2cm; + A=(0,0); B=(2u,-.5u); C=(u,u); + draw A--B--C--cycle; + (M-A) = whatever * ( + (A-C) rotated 1/2( angle(B-A) - angle(C-A)) ); + (M-B) = whatever * ( + (B-A) rotated 1/2( angle(C-B) - angle(A-B)) ); + draw M--A; draw M--B; draw M--C; + M-h = whatever * (B-C) rotated 90; + h = whatever[B,C]; + draw fullcircle scaled 2 abs(M-h) shifted M; +endfig; +beginfig(105) + path p; + p = (0,0){up} .. (2cm,0){down}; + draw p; + draw point 0 of p withpen pencircle scaled 4bp; + draw point .5 of p withpen pencircle scaled 4bp; + draw point 1 of p withpen pencircle scaled 4bp; + +endfig; +beginfig(106) + path p; + p = (0,0){up} .. (2cm,0){down}; + draw p; + pair A; + A := point 0 of p; + B := A + 1cm*unitvector(direction 0 of p); + drawarrow A--B withpen pencircle scaled 1bp; + A := point .5 of p; + B := A + 1cm*unitvector(direction .5 of p); + drawarrow A--B withpen pencircle scaled 1bp; + A := point 1 of p; + B := A + 1cm*unitvector(direction 1 of p); + drawarrow A--B withpen pencircle scaled 1bp; + +endfig; +beginfig(107) + u:=5mm; + path p; + p = (0,0) {curl 0} .. (u,2u) .. (2u,1.5u) + .. (3u,2u) .. {curl 0} (4u,0); + draw subpath(0,1) of p withcolor red; + draw subpath(1,2) of p withcolor green; + draw subpath(2,3) of p withcolor blue; + draw subpath(3,3.5) of p dashed evenly; + draw subpath(3.5,4) of p dashed withdots; + +endfig; +beginfig(108) + u:=1cm; + path p,q; + p := (0,0){up} .. (u,2u){up}; + q := (u,0){up} .. (0,2u){up}; + draw p; + draw subpath(0,.4) of q withpen pencircle scaled 1bp; + draw subpath(.6,1) of q withpen pencircle scaled 1bp; +endfig; +beginfig(109) + u:=1cm; + path a,b,c,d; + a = (-u,-.2u){up} .. tension 1.2 .. (u,-.2u){down}; + b = a rotated 90; + c = b rotated 90; + d = c rotated 90; + fill buildcycle(a,b,c,d) withcolor .8white; + draw a; draw b; draw c; draw d; + +endfig; +beginfig(110) + u:=1cm; + path c[]; + c[1] := fullcircle scaled u; + c[2] := c[1] shifted (0,.5u); + draw c[1] dashed evenly; + draw c[2] dashed evenly; + draw buildcycle(c[1],c[2]) withpen pencircle scaled 1bp; +endfig; +beginfig(111) + path a,b,c; + a = fullcircle scaled 2u shifted (.5u,0); + b = a rotated (360/3); + c = b rotated (360/3); + fill a withcolor red; + fill b withcolor green; + fill c withcolor blue; + fill buildcycle(a,b) withcolor red + green; + fill buildcycle(b,c) withcolor green + blue; + fill buildcycle(c,a) withcolor blue + red; + fill buildcycle(a,b,c) withcolor white; + draw a; draw b; draw c; +endfig; +beginfig(112) + def compute_curve(suffix f)(expr xmin, xmax, xinc) = + ( (xmin,f(xmin)) + for x=xmin+xinc step xinc until xmax: + .. (x,f(x)) + endfor ) + enddef; + vardef f(expr x) = x**2 + 1 enddef; + vardef g(expr x) = 2 - (x-1)**2 enddef; + path p, q; + p := compute_curve(f, -1, 1.5, .1) scaled 1cm; + q := compute_curve(g, -.5, 2, .1) scaled 1cm; + fill buildcycle(p,reverse q) withcolor red+green; + draw p withpen pencircle scaled 1bp; + draw q withpen pencircle scaled 1bp; + draw (-1cm,0) -- (2cm,0); + draw (0,g(-.5)*1cm) -- (0,f(1.5)*1cm); +endfig; +beginfig(113) + path p, q; + p = (0,0){up} .. (2cm,0){up}; + q = (0,1cm){dir -60}..(1cm,-1cm)..{dir 60}(2cm,1cm); + draw p; draw q; + draw p intersectionpoint q withpen pencircle scaled 4bp; + +endfig; +beginfig(114) + path p, q; + p = (0,0){up} .. (2cm,0){up}; + q = (0,1cm){dir -60}..(1cm,-1cm)..{dir 60}(2cm,1cm); + draw p; draw q; + numeric a,b; + (a,whatever) = p intersectiontimes q; + draw point a of p withpen pencircle scaled 4bp; + +endfig; +beginfig(115) + pair A,B; + path p; + A = (0,1cm); + B = A rotated 120; + p = A{dir 0} .. tension 2 .. B{dir 120}; + numeric a; + (a,whatever) = p intersectiontimes (p rotated 120); + draw subpath(0,a-.02) of p; + draw subpath(a+.02,1) of p; + draw subpath(0,a-.02) of p rotated 120; + draw subpath(a+.02,1) of p rotated 120; + draw subpath(0,a-.02) of p rotated -120; + draw subpath(a+.02,1) of p rotated -120; +endfig; +beginfig(116) + u:=2cm; + pair A[], B[], C[], D[], E[]; + path p[]; + + A[0] = u*up; + for i=1 upto 10: + A[i] := A[i-1] rotated 72; + endfor; + for i=0 upto 4: + p[i] := A[i]--A[i+1]; + draw p[i]; + draw (point 1 of p[i]) -- + ( (point 1 of p[i]) + 4mm*unitvector(direction 1 of p[i])); + draw (point 0 of p[i]) -- + ( (point 0 of p[i]) - 4mm*unitvector(direction 0 of p[i])); + endfor + + for i=0 upto 9: + B[i] := 1/2[ A[i], A[i+1] ]; + endfor; + B[5]:=B[0]; + + for i=0 upto 9: + C[i] := .8*B[i]; + endfor; + + for i=0 upto 4: + p[i] := B[i] --- C[i] .. C[i+2]{dir 72i}; + draw p[i]; + draw (point 2 of p[i]) -- + ( (point 2 of p[i]) + 4mm*unitvector(direction 2 of p[i])); + draw (point 0 of p[i]) -- + ( (point 0 of p[i]) - 4mm*unitvector(direction 0 of p[i])); + endfor; + for i=0 upto 4: + draw subpath(1,1.4) of p[i] withpen pencircle scaled 4bp withcolor white; + draw subpath(0,1.5) of p[i]; + endfor; + + for i=0 upto 4: + draw A[i] withpen pencircle scaled 4bp; + draw B[i] withpen pencircle scaled 4bp; + draw C[i] withpen pencircle scaled 4bp; + endfor; +endfig; +beginfig(117) + u:=2cm; + pair A, B, C, D, E; + path p, q, r; + + A = u*up; + p := (-.2)[ A, A rotated 72 ] -- (1.2)[ A, A rotated 72 ]; + for i=0 upto 5: + draw p rotated 72i; + endfor; + B := 1/2[ A, A rotated 72 ]; + C := .8*B; + + p := B --- C .. (C rotated (2*72)){right}; + % On allonge le chemin p + p := ( (point 0 of p) - 4mm*unitvector(direction 0 of p)) + -- + (point 0 of p) + & p & + (point 2 of p) + -- + ( (point 2 of p) + 4mm*unitvector(direction 2 of p)); + + E = p intersectionpoint (p rotated 72); + q := p cutbefore fullcircle scaled -2mm shifted E; + r := p cutafter fullcircle scaled 2mm shifted E; + + for i=0 upto 4: + draw q rotated 72i; + draw r rotated 72i; + draw A rotated 72i withpen pencircle scaled 4bp; + draw B rotated 72i withpen pencircle scaled 4bp; + draw C rotated 72i withpen pencircle scaled 4bp; + endfor; +endfig; +beginfig(118) + for i=0 step 1 until 3: + draw 1cm*right rotated (i*90) + withpen pencircle scaled 4bp; + endfor; + +endfig; +beginfig(119) + draw for i=0 step 1 until 3: + 1cm*right rotated (i*90) -- + endfor cycle; + +endfig; +beginfig(120) + n:=5; + draw for i=0 step 1 until n-1: + 1cm*up rotated (i*360/n) -- + endfor cycle; +endfig; +beginfig(121) + n:=7; + draw for i=0 step 1 until n-1: + 1cm*up rotated (i*360/n) -- + endfor cycle; +endfig; +beginfig(122) + path p; + p = (0,0) .. (-1cm,2cm) .. (2cm,1cm) .. (1cm,0); + draw p; + n:=10; + for i=0 step 1 until n: + draw point (i/n*length(p)) of p + withpen pencircle scaled 4bp; + endfor; +endfig; +beginfig(123) + path p; + p = (0,0) .. (-1cm,2cm) .. (2cm,1cm) .. (1cm,0); + draw p; + n:=10; + for i=0 step length(p)/n until length(p): + drawarrow (point i of p) -- + 1cm * unitvector(direction i of p) + shifted point i of p; + endfor; +endfig; +beginfig(124) + u:=1cm; + draw (-2u,0)--(2u,0); + draw (0,-2u)--(0,2u); + for i=-2u step u until 2u: + draw (i,u/20)--(i,-u/20); + draw (u/20,i)--(-u/20,i); + endfor; +endfig; +beginfig(125) + u:=1cm; + draw (-2u,0)--(2u,0); + draw (0,-2u)--(0,2u); + for i=-2u step u until 2u: + draw (i,u/10)--(i,-u/10); + draw (u/10,i)--(-u/10,i); + endfor; + for i=-2u step u/5 until 2u: + draw (i,u/20)--(i,-u/20); + draw (u/20,i)--(-u/20,i); + endfor; +endfig; +beginfig(126) + u:=1cm; + draw (-2u,0)--(2u,0); + draw (0,-2u)--(0,2u); + for i=-2u step u until 2u: + draw (i,2u)--(i,-2u); + draw (2u,i)--(-2u,i); + endfor; +endfig; +beginfig(127) + u:=1cm; + draw (-2u,0)--(2u,0); + draw (0,-2u)--(0,2u); + for i=-2u step u until 2u: + draw (i,2u)--(i,-2u); + draw (2u,i)--(-2u,i); + endfor; + for i=-2u step u/5 until 2u: + draw (i,2u)--(i,-2u) withpen pencircle scaled .2bp; + draw (2u,i)--(-2u,i) withpen pencircle scaled .2bp; + endfor; +endfig; +beginfig(128) + u := 5mm; + % vardef est nécessaire pour pouvoir passer f en argument + vardef f(expr x) = x**2 -.1 enddef; + def axes(expr xmin,xmax,ymin,ymax) = + draw ( (xmin,0) -- (xmax,0) ) scaled u; + draw ( (0,ymin) -- (0,ymax) ) scaled u; + enddef; + def courbe(suffix f)(expr xmin, xmax, M) = + draw ( ( xmin, f(xmin) ) + for i=1 upto M: + -- ( xmin + (i/M)*(xmax - xmin), f( xmin + (i/M)*(xmax - xmin) )) + endfor ) scaled u; + enddef; + vardef newton(suffix f)(expr y, h, M) = + save x,t; + numeric x,t; x:=y; + for i=1 upto M: + t := x - f(x)/( (f(x+h) - f(x))/h ); + draw ( (x,f(x)) -- (t,0) -- (t,f(t)) ) scaled u; + x := t; + endfor; + enddef; + axes(-.5,2,-.5,4); + courbe(f,-.5,2, 100); + newton(f, 2, .01, 10); +endfig; +beginfig(129) + transform T; + u:=1cm; + z0=(0,0); z1=(2u,0); z3 = z1 rotated 90; z2 = z1+z3; + z0 transformed T = .1[z0,z1]; + z1 transformed T = .1[z1,z2]; + z2 transformed T = .1[z2,z3]; + path p; + p = z0--z1--z2--z3--cycle; + fill p withcolor .8*white; + fill p transformed T withcolor white; +endfig; +beginfig(130) + transform T; + u:=1cm; + z0=(0,0); z1=(2u,0); z3 = z1 rotated 90; z2 = z1+z3; + z0 transformed T = .1[z0,z1]; + z1 transformed T = .1[z1,z2]; + z2 transformed T = .1[z2,z3]; + path p; + p = z0--z1--z2--z3--cycle; + for i=0 upto 100: + fill p withcolor .8*white; + p := p transformed T; + fill p withcolor white; + p := p transformed T; + endfor; +endfig; +beginfig(131) + transform T; + u:=1cm; + z1=(0,2u); + n := 5; + for i=1 upto n-1: + z[i+1] = z1 rotated (360*i/n); + endfor; + z1 transformed T = .1[z1,z2]; + z2 transformed T = .1[z2,z3]; + z3 transformed T = .1[z3,z4]; + path p; + p = for i=1 upto n: z[i] -- endfor cycle; + for i=0 upto 100: + fill p withcolor .8*white; + p := p transformed T; + fill p withcolor white; + p := p transformed T; + endfor; +endfig; +beginfig(132) + u:=1cm; + pair A[]; + numeric n; n:=7; + A[0] = (u,0); + for i=1 upto n-1: + A[i] = A[0] rotated (360/n*i); + endfor; + for i=0 upto n-1: + draw A[i] withpen pencircle scaled 4bp; + for j=0 upto n-1: + if i<>j: draw A[i]--A[j] fi; + endfor; + endfor; +endfig; +beginfig(133) + u:=2cm; + numeric n,m; n:=4; m:=5; + pair A[], B[]; + for i=1 upto n-1: A[i+1]-A[i] = (0,.2u); endfor; + for j=1 upto m-1: B[j+1]-B[j] = (0,.2u); endfor; + (0,0) for i=1 upto n: + A[i] endfor = (0,0); + (0,0) for j=1 upto m: + B[j] endfor = (4u,0); + for i=1 upto n: + draw A[i] withpen pencircle scaled 4bp; + endfor; + for j=1 upto m: + draw B[j] withpen pencircle scaled 4bp; + endfor; + for i=1 upto n: + for j=1 upto m: + draw A[i]--B[j]; + endfor; + endfor; +endfig; +beginfig(134) + u:=1cm; + numeric n,m; n:=3; m:=3; + pair A[], B[]; + for i=1 upto n-1: A[i+1]-A[i] = (.5u,0); endfor; + for j=1 upto m-1: B[j+1]-B[j] = (.5u,0); endfor; + (0,0) for i=1 upto n: + A[i] endfor = (0,0); + (0,0) for j=1 upto m: + B[j] endfor = (0,4u); + for i=1 upto n: + draw A[i] withpen pencircle scaled 4bp; + endfor; + for j=1 upto m: + draw B[j] withpen pencircle scaled 4bp; + endfor; + for i=1 upto n: + for j=1 upto m: + draw A[i]--B[j]; + endfor; + endfor; +endfig; +beginfig(135) + pair A[], B[]; + numeric n; n:=6; + for i=0 upto n-1: + A[i] = 1cm * right rotated (i*360/n); + B[i] = 2cm * right rotated (i*360/n); + endfor; + A[n] = A[0]; B[n] = B[0]; + for i=0 upto n-1: + draw A[i] -- A[i+1] -- B[i+1] -- B[i]; + draw A[i] withpen pencircle scaled 4bp; + draw B[i] withpen pencircle scaled 4bp; + endfor; +endfig; +beginfig(136) + numeric n; n:=5; + pair O,A,B,C,D; + O = (0,0); + A = 1cm*up; + B = 2cm*up rotatedabout(A,30); + C = 2cm*up; + D = 2cm*up rotatedabout(A,-30); + for i=0 upto n-1: + draw (O--A--C) rotated (i*360/n); + draw (B--A--D) rotated (i*360/n); + draw A rotated (i*360/n) withpen pencircle scaled 4bp; + draw B rotated (i*360/n) withpen pencircle scaled 4bp; + draw C rotated (i*360/n) withpen pencircle scaled 4bp; + draw D rotated (i*360/n) withpen pencircle scaled 4bp; + endfor; + draw O withpen pencircle scaled 4bp; +endfig; +beginfig(137) + path p; u:=1cm; + p = fullcircle xscaled -u yscaled 3u; + draw p; + for i=2 step .5 until 6: + draw (point 2 of p){down} .. (point i of p); + endfor; +endfig; +beginfig(138) + pair P[], Q[], R[], S[]; + u:=.5cm; + for i=0 upto 4: + P[i] = u* down rotated (i*360/5); + endfor; + P[5] = P[0]; + for i=0 upto 4: + Q[i] = 3*( 1/2[ P[i], P[i+1] ] ); + endfor; + Q[5] = Q[0]; + for i=0 upto 4: + R[i] = 1/3( Q[i] + Q[i+1] + P[i+1] ); + endfor; + R[5] = R[0]; + for i=0 upto 5: + S[i] = 1.5*Q[i]; + endfor; + for i=0 upto 4: + draw P[i] -- P[i+1]; + draw P[i+1] -- R[i]; + draw Q[i] -- R[i]; + draw R[i] -- Q[i+1]; + draw Q[i] -- S[i]; + draw S[i] -- S[i+1]; + endfor; +endfig; +beginfig(139) + pair P[], Q[], R[], S[]; + u:=.5cm; + for i=0 upto 4: + P[i] = u* down rotated (i*360/5); + endfor; + P[5] = P[0]; + for i=0 upto 4: + Q[i] = 3*( 1/2[ P[i], P[i+1] ] ); + endfor; + Q[5] = Q[0]; + for i=0 upto 4: + R[i] = 1/3( Q[i] + Q[i+1] + P[i+1] ); + endfor; + R[5] = R[0]; + for i=0 upto 5: + S[i] = 1.5*Q[i]; + endfor; + for i=0 upto 4: + draw P[i] -- P[i+1]; + draw P[i+1] -- R[i]; + draw Q[i] -- R[i]; + draw R[i] -- Q[i+1]; + draw Q[i] -- S[i]; + draw S[i] -- S[i+1]; + endfor; + draw P[2] -- P[3] -- P[4] -- P[0] -- P[1] -- + R[0] -- Q[0] -- R[4] -- Q[4] -- R[3] + -- Q[3] -- R[2] -- Q[2] -- + S[2] -- S[3] -- S[4] -- S[0] -- S[1] -- + Q[1] -- R[1] -- cycle + withpen pencircle scaled 2bp; +endfig; +beginfig(140) + for i=1 step -.01 until 0: + fill fullcircle scaled (i*2cm) withcolor i*white; + endfor; + draw fullcircle scaled 2cm withpen pencircle scaled 2bp; +endfig; +beginfig(141) + u:=5mm; + path p; + p = (0,0) .. (-1,1) .. (2,0) .. (0,-3) .. cycle; + p := p shifted (-1,0); + for i=1 step -.01 until 0: + fill p scaled (i*u) withcolor i*white; + endfor; + draw p scaled u withpen pencircle scaled 2bp; +endfig; +beginfig(142) + z0 = (50,50); + z1 = z0 rotated 90; + z2 = z1 rotated 90; + z3 = z2 rotated 90; + path carre; + carre = z0--z1--z2--z3--cycle; + s := .01; + path rect; + z4 = s [z2,z3]; z5 = s [z1,z0]; + rect = z1--z2--z4--z5--cycle; + for i=0 step s until 1: + fill rect shifted (i*(z0-z1)) withcolor i*white; + endfor; + draw carre withpen pencircle scaled 2bp; +endfig; +beginfig(143) + z0 = (50,50); + z1 = z0 rotated 90; + z2 = z1 rotated 90; + z3 = z2 rotated 90; + path carre; + carre = z0--z1--z2--z3--cycle; + s := .01; + for i=1 step -s until s: + fill carre scaled i withcolor i*white; + endfor; +endfig; +beginfig(144) + u:=1cm; + vardef degrade(expr p,q,M,N) = + save a,b; + numeric a,b; + a := length(p); + b := length(q); + for i=0 upto M: + draw (i/M) [ point 0 of p, point 0 of q ] + for j=1 upto N: + .. (i/M) [ point (j/N*a) of p, point (j/N*b) of q ] + endfor; + endfor; + enddef; + degrade( + (-.1u,-.1u) .. (.1u,.1u) .. cycle, + (-u,-u) -- (u,-u) -- (u,u) -- (-u,u) -- cycle, + 10, + 100); +endfig; +beginfig(145) + u:=1cm; + def couleur(expr c) = c*white enddef; + vardef degrade(expr p,q,M,N) = + save a,b; + numeric a,b; + a := length(p); + b := length(q); + for i=0 upto M: + draw (i/M) [ point 0 of p, point 0 of q ] + for j=1 upto N: + .. (i/M) [ point (j/N*a) of p, point (j/N*b) of q ] + endfor + withcolor couleur(i/M); + endfor; + enddef; + degrade( + (-.5u,-.5u) .. (.5u,.5u) .. cycle, + (-u,-u) -- (u,-u) -- (u,u) -- (-u,u) -- cycle, + 255, + 100); +endfig; +beginfig(146) + def degrade(expr p, q, N) = + begingroup + save n, m, M; + numeric n, m, M; + n := length(p); + m := length(q); + M := n*m; % Il faudrait prendre le ppcm + for i=0 upto N: + draw + (i/N)[ point 0 of p, point 0 of q ] + { (i/N)[ direction 0 of p, direction 0 of q ] } + for j=1 upto M-1: + .. + { (i/N) [ direction 1 of subpath((j-1)*n/M,j*n/M) of p, + direction 1 of subpath((j-1)*m/M,j*m/M) of q ] } + (i/N)[ point (j*n/M) of p, point (j*m/M) of q ] + { (i/N) [ direction 0 of subpath(j*n/M,(j+1)*n/M) of p, + direction 0 of subpath(j*m/M,(j+1)*m/M) of q ] } + endfor + .. + { (i/N)[ direction n of p, direction m of q ] } + (i/N)[ point n of p, point m of q ] + ; + endfor; + endgroup; + enddef; + numeric u; + u := 2cm; + path p, q; + p := fullcircle scaled u; + q := (-u,-u)--(u,-u)--(u,u)--(-u,u)--cycle; + degrade(p,q,10); +endfig; +beginfig(147) + draw for i=0 step 10 until 360: + 2cm* (sind(2*i), cosd(3*i)) .. + endfor cycle; +endfig; +beginfig(148) + for i=0 step .1 until 360: + col := i/360; + draw 2cm* (sind(2*i), cosd(3*i)) + withpen pencircle scaled 2bp + withcolor + if col>.5: (2*(1-col)) [red, blue] + else: (1-2col) [blue, red] + fi; + endfor; +endfig; +beginfig(149) + def couleur(expr x) = + if x>.5: (2*(1-x)) [red, blue]; + else: (1-2x) [blue, red] + fi + enddef; + for i=0 step .1 until 360: + draw 2cm* (sind(2*i), cosd(3*i)) + withpen pencircle scaled 2bp + withcolor couleur(i/360); + endfor; +endfig; +beginfig(150) + for i=0 step 1 until 360: + pair P; + P = 2cm* (sind(2*i), cosd(3*i)); + fill fullcircle scaled 4mm shifted P withcolor white; + draw fullcircle scaled 4mm shifted P; + endfor; +endfig; +beginfig(151) + for i=0 step 1 until 360: + pair P; + P = 2cm* (sind(2*i), cosd(3*i)); + fill fullcircle scaled 4mm shifted P withcolor white; + draw fullcircle scaled 4mm shifted P; + endfor; + picture p; + p:=nullpicture; + for i=-180 step 1 until 180: + pair P; + P = 2cm* (sind(2*i), cosd(3*i)); + addto p contour fullcircle scaled 4mm shifted P withcolor white; + addto p doublepath fullcircle scaled 4mm shifted P + withpen pencircle scaled .5bp; + endfor; + clip p to (.5cm,2.5cm) -- (.5cm,1.5cm)-- + (-.5cm,1.5cm) -- (-.5cm,2.5cm)--cycle; + draw p; +endfig; +beginfig(152) + u:=5mm; + vardef project(expr x,y,z) = + x*(-1,-1) + y*(1,0) + z*(0,1) + enddef; + vardef f(expr x,y) = sind(x/u*180)*sind(y/u*180)*u enddef; + numeric m,M; + m:=-2u; M:=2u; + for i=m step .1u until M: + path p; + p = + for j=m step .1u until M: + project(i,j,f(i,j)) -- + endfor + project(i,M,f(i,M)); + fill (project(i,m,f(i,m)) - (0,3u)) -- p -- + (project(i,M,f(i,M)) - (0,3u)) -- cycle + withcolor white; + draw (project(i,m,f(i,m)) - (0,3u)) -- p -- + (project(i,M,f(i,M)) - (0,3u)) -- cycle; + draw p; + endfor; +endfig; +beginfig(153) + vardef project(expr x,y,z) = + x*(-1,-1) + y*(1,0) + z*(0,1) + enddef; + vardef f(expr x,y) = sind(x/u*180)*sind(y/u*180)*u enddef; + m:=-2u; M:=2u; inc:=.1u; + for i=m step inc until M: + for j=m step inc until M: + path p; + p = project(i,j,f(i,j)) -- + project(i,j+inc,f(i,j+inc)) -- + project(i+inc,j+inc,f(i+inc,j+inc)) -- + project(i+inc,j,f(i+inc,j)) -- + cycle; + fill p withcolor white; + draw p; + endfor + endfor; +endfig; +beginfig(154) + vardef project(expr x,y,z) = + x*(-1,-1) + y*(1,0) + z*(0,1) + enddef; + vardef f(expr x,y) = sind(x/u*180)*sind(y/u*180)*u enddef; + numeric m,M,inc,couleur; + m:=-2u; M:=2u; inc:=.1u; + for i=m step inc until M: + for j=m step inc until M: + path p; + p = project(i,j,f(i,j)) -- + project(i,j+inc,f(i,j+inc)) -- + project(i+inc,j+inc,f(i+inc,j+inc)) -- + project(i+inc,j,f(i+inc,j)) -- + cycle; + dfdx := (f(i,j) - f(i+inc,j))/inc; + dfdy := (f(i,j) - f(i,j+inc))/inc; + couleur := 1/sqrt( dfdx**2 + dfdy**2 + 1); + fill p withcolor couleur*(red+green); + endfor + endfor; +endfig; +beginfig(155) +vardef f(expr x,y) = sind(x/u*180)*sind(y/u*180)*u enddef; + +boolean dessine_fil_de_fer; dessine_fil_de_fer := false; +color dessine_couleur; dessine_couleur := red+green; + +vardef dessine(suffix f)(expr xmin, xmax, xinc, ymin, ymax, yinc) = + save i,j,p,dfdx,dfdy,project; + vardef project(expr x,y,z) = + x*(-1,-1) + y*(1,0) + z*(0,1) + enddef; + for i=m step inc until M: + for j=m step inc until M: + path p; + p = project(i,j,f(i,j)) -- + project(i,j+inc,f(i,j+inc)) -- + project(i+inc,j+inc,f(i+inc,j+inc)) -- + project(i+inc,j,f(i+inc,j)) -- + cycle; + dfdx := (f(i,j) - f(i+inc,j))/inc; + dfdy := (f(i,j) - f(i,j+inc))/inc; + couleur := 1/sqrt( dfdx**2 + dfdy**2 + 1); + fill p withcolor couleur*dessine_couleur; + if dessine_fil_de_fer: draw p fi; + endfor + endfor; +enddef; + + % Il faudrait pouvoir choisir différents + % types d'« éclairage ». + vardef f(expr x,y) = sind(x/u*180)*sind(y/u*180)*u enddef; + dessine(f,-2u,2u,.1u, -2u,2u,.1u); +endfig; +beginfig(156) + vardef random_path (expr n) = + save i, A ; numeric i; pair A[]; + for i=0 upto n: + A[i] = (uniformdeviate(2u), uniformdeviate(2u)); + endfor; + A[0] + for i=1 upto n: + .. A[i] + endfor + enddef; + + vardef intersections(expr p,q) = + save a,b,N,i,j; + numeric N,i,j; + N:=10; + for i=0 step length(p)/N until length(p): + for j=0 step length(q)/N until length(p): + numeric a,b; + pair A; + (a,b) = (subpath(i,i+length(p)/N) of p) + intersectiontimes + (subpath(j,j+length(q)/N) of q); + if a <> -1: + A = point a of subpath(i,i+length(p)/N) of p; + show A; + draw A withpen pencircle scaled 4bp; + fi; + endfor; + endfor; + enddef; + + path p,q; + p:=random_path(4); + q:=random_path(4); + draw p withcolor red; + draw q withcolor blue; + intersections(p,q); +endfig; +beginfig(157) + vardef auto_intersections(expr p) = + save a,b,N,i,j; + numeric N,i,j; + N:=100; + for i=0 step length(p)/N until length(p): + for j=i+2*length(p)/N + step length(p)/N + until length(p): + numeric a,b; + pair A; + (a,b) = (subpath(i,i+length(p)/N) of p) + intersectiontimes + (subpath(j,j+length(p)/N) of p); + if a <> -1: + A = point a of subpath(i,i+length(p)/N) of p; + show A; + draw A withpen pencircle scaled 4bp; + fi; + endfor; + endfor; + enddef; + + u:=2cm; + path p,q; + p:=random_path(12); + draw p; + auto_intersections(p); +endfig; +beginfig(158) + path p; + p := (0,0){up} .. (1cm,1cm) .. (1cm,0); + draw p; + draw point 1/2length(p) of p + withpen pencircle scaled 4bp withcolor red; + draw point (arctime (1/2 arclength(p)) of p) of p + withpen pencircle scaled 4bp; + +endfig; +beginfig(159) + vardef milieu(expr p) = + save l,i,tot,A,B; + numeric l,tot,i; + pair A,B; + tot := longueur(p); + l:=0; + B := point 0 of p; + for i:=0 step .01 until length(p): + A := B; + B := point i of p; + l := l+abs(B-A); + exitif l > 1/2 tot; + endfor; + 1/2[A,B] + enddef; + + path p; + p := (0,0){up} .. (1cm,1cm) .. (1cm,0); + draw p; + draw point 1/2length(p) of p withpen pencircle scaled 4bp withcolor red; + draw milieu(p) withpen pencircle scaled 4bp; +endfig; +beginfig(160) + vardef milieu_time(expr p) = + save l,i,tot,A,B,t; + numeric l,tot,i,t; + pair A,B; + tot := longueur(p); + l:=0; + B := point 0 of p; + for i:=0 step .01 until length(p): + t:=i; + A := B; + B := point i of p; + l := l+abs(B-A); + exitif l > 1/2 tot; + endfor; + t % Pas de point-virgule + enddef; + + save arrowhead; + vardef arrowhead expr p = + save A,u; pair A,u; + A := milieu(p); + u := unitvector(direction milieu_time(p) of p); + A -- (A - ahlength*u rotated 15) -- + (A - ahlength*u rotated -15) -- cycle + enddef; + + u:=1cm; + drawarrow (0,0) .. (-u,u) .. (u,u); +endfig; +beginfig(161) + save arrowhead; + vardef arrowhead expr p = + save A,B,u; pair A,B,u; + A := milieu(p); + B := p intersectionpoint + (fullcircle scaled ahlength shifted A); + u := unitvector(direction milieu_time(p) of p); + A -- (A - ahlength*u rotated 30) -- B -- + (A - ahlength*u rotated -30) -- cycle + enddef; + + u:=1cm; + drawarrow (0,0) .. (-u,u) .. (u,u); +endfig; +beginfig(162) + save arrowhead; + vardef arrowhead expr p = + save A,u; pair A,u; + A := milieu(p); + u := unitvector(direction milieu_time(p) of p); + A -- (A - ahlength*u rotated 30) -- A -- + (A - ahlength*u rotated -30) -- cycle + enddef; + + u:=1cm; + drawarrow (0,0) .. (-u,u) .. (u,u); +endfig; +beginfig(163) + save arrowhead; + vardef arrowhead expr p = + save A,u,a,b; pair A,u; path a,b; + A := milieu(p); + u := unitvector(direction milieu_time(p) of p); + a := A{-u} .. (A - ahlength*u rotated 30); + b := A{-u} .. (A - ahlength*u rotated -30); + ( a & reverse(a) & b & reverse(b) ) --cycle + enddef; + + u:=1cm; + drawarrow (0,0) .. (-u,u) .. (u,u); +endfig; +beginfig(164) + pair A,B,C; + C = 3mm*up; + A = C rotated 120; + B = C rotated -120; + picture pic ; + pic:=nullpicture; + addto pic doublepath A--B--C--cycle withpen currentpen; + addto pic doublepath A withpen pencircle scaled 4bp; + addto pic doublepath B withpen pencircle scaled 4bp; + addto pic doublepath C withpen pencircle scaled 4bp; + for i=-3 upto 3: + for j=-3 upto 3: + draw pic shifted( i*(B-A) + j*(C-A) ); + endfor; + endfor; + clip currentpicture to (-2cm,-2cm)--(2cm,-2cm)--(2cm,2cm)--(-2cm,2cm)--cycle; +endfig; +beginfig(165) + pair A,B,C; + C = 3mm*up; + A = C rotated 120; + B = C rotated -120; + picture pic ; + pic:=nullpicture; + path p; + p := A{(C-A) rotated 30} .. C{(C-A) rotated 30}; + addto pic doublepath p withpen currentpen; + addto pic doublepath p rotated 120 withpen currentpen; + addto pic doublepath p rotated -120 withpen currentpen; + for i=-3 upto 3: + for j=-3 upto 3: + draw pic shifted( i*(B-A) + j*(C-A) ); + endfor; + endfor; + clip currentpicture to (-2cm,-2cm)--(2cm,-2cm)--(2cm,2cm)--(-2cm,2cm)--cycle; +endfig; +beginfig(166) + ux:=2mm; + uy:=5mm; + numeric xmin, xmax, ymin, ymax, M; + xmin := -6.3; xmax := 12.6; + ymin := -2; ymax := 2; + M := 100; + draw (ux*xmin,0) -- (ux*xmax,0); + draw (0,uy*ymin) -- (0,uy*ymax); + pair a[]; + for i=0 upto M: + a[i] := ( + xmin + (i/M)*(xmax-xmin), + sind(180/3.14*( xmin + (i/M)*(xmax-xmin) )) + ) xscaled ux yscaled uy; + endfor; + draw a[0] for i=1 upto M: --a[i] endfor; +endfig; +beginfig(167) + ux:=5mm; + uy:=2mm; + numeric xmin, xmax, ymin, ymax, M; + xmin := -2; xmax := 2; + ymin := -.1; ymax := 8; + M := 100; + draw (ux*xmin,0) -- (ux*xmax,0); + draw (0,uy*ymin) -- (0,uy*ymax); + pair a[]; + for i=0 upto M: + a[i] := ( + xmin + (i/M)*(xmax-xmin), + mexp(256*( xmin + (i/M)*(xmax-xmin) )) + ) xscaled ux yscaled uy; + endfor; + draw a[0] for i=1 upto M: --a[i] endfor; +endfig; +beginfig(168) + ux:=5mm; + uy:=5mm; + numeric xmin, xmax, ymin, ymax, M; + xmin := .2; xmax := 3; + ymin := -1.6; ymax := 1.2; + M := 100; + draw (ux*-.1,0) -- (ux*xmax,0); + draw (0,uy*ymin) -- (0,uy*ymax); + pair a[]; + for i=0 upto M: + a[i] := ( + xmin + (i/M)*(xmax-xmin), + (1/256)*mlog(( xmin + (i/M)*(xmax-xmin) )) + ) xscaled ux yscaled uy; + endfor; + draw a[0] for i=1 upto M: --a[i] endfor; +endfig; +beginfig(169) + path p; + p = fullcircle scaled 2cm; + z0 = (-1cm,0); + draw p; + draw z0 withpen pencircle scaled 2pt; + + pair A[]; + for i=0 step length(p)/100 until length(p): + pair M,N; + M = point i of p; + N-M = whatever * direction i of p; + N-z0 = whatever * direction i of p rotated 90; + A[i] := N; + endfor; + draw for i=0 step length(p)/100 until length(p): + A[i] .. + endfor cycle; +endfig; +beginfig(170) +vardef cardiodide(expr p, O) = + save i,M,N; + numeric i; + for i=0 step length(p)/100 until length(p): + hide( + pair M,N; + M = point i of p; + N-M = whatever * direction i of p; + N-O = whatever * direction i of p rotated 90; + ) + N .. + endfor cycle +enddef; + + path p; + p = fullcircle scaled 2cm; + z0 = (-1cm,0); + draw p; + draw z0 withpen pencircle scaled 2pt; + draw cardiodide(p,z0); +endfig; +beginfig(171) +vardef cardiodide(expr p, O) = + save i,M,N; + numeric i; + for i=0 step length(p)/100 until length(p): + hide( + pair M,N; + M = point i of p; + N-M = whatever * direction i of p; + N-O = whatever * direction i of p rotated 90; + ) + N .. + endfor cycle +enddef; + + path p; + p = fullcircle scaled 2cm; + z0 = (-1cm,0); + pickup pencircle scaled 1pt + draw p; + draw z0 withpen pencircle scaled 3pt; + draw cardiodide(p,z0); + pickup pencircle scaled .4pt + pair M,N; + i:=1.5; + M = point i of p; + N-M = whatever * direction i of p; + N-z0 = whatever * direction i of p rotated 90; + draw z0--N; + draw (-1/2)[N,M]--(3/2)[N,M]; + draw N withpen pencircle scaled 3pt; + draw M withpen pencircle scaled 3pt; +endfig; +beginfig(172) + path p; + p := (-1cm,0) .. (1cm,-1cm) .. (8mm,0) + .. (1cm,1cm) .. (-1cm,1cm) .. cycle; + z0 = (-2cm,0); + draw p withpen pencircle scaled 1bp; + draw z0 withpen pencircle scaled 3pt; + draw cardiodide(p,z0); +endfig; +beginfig(173) +vardef inversion (expr O,k,M) = + if pair M: + (O + k*unitvector(M-O)/abs(M-O)) + elseif path M: + for i=0 step length(M)/100 until length(M): + inversion(O,k,point i of M) .. + endfor + cycle + fi +enddef; + + u:=4cm; + path p[],A,B; + + z0 = (5u,0) rotated 10; + + A = fullcircle scaled 2u; + B = A scaled 3; + draw inversion( z0, 2 (u**2), A ) + withpen pencircle scaled 1pt; + draw inversion( z0, 2 (u**2), B ) + withpen pencircle scaled 1pt; + + p0 = fullcircle scaled 2u shifted (2u,0); + for i=0 upto 5: + if i<>0: + p[i] = p[i-1] rotated (360/6); + fi; + draw inversion( z0, 2 (u**2), p[i] ); + endfor; +endfig; +beginfig(174) + def curve(expr p,i,q,j,t) = + point i of p {direction i of p} .. + tension t .. + point j of q {direction j of q} + enddef; + + vardef sphere_with_holes (expr n) = + save i; + c[0] = fullcircle xscaled u yscaled 2u + shifted (4u,0) rotated (360/(2n)) ; + draw c[0]; + for i=1 upto n-1: + c[i] = c[i-1] rotated (360/n); + draw c[i]; + endfor; + l[0] = curve(c[0], 2, c[1], -2, 1); + draw l[0]; + for i=1 upto n-1: + l[i] = l[i-1] rotated (360/n); + draw l[i]; + endfor; + enddef; + + u:=3mm; + path c[], l[]; + sphere_with_holes(5); +endfig; +beginfig(175) + def curve(expr p,i,q,j,t) = + point i of p {direction i of p} .. + tension t .. + point j of q {direction j of q} + enddef; + + vardef sphere_with_holes (expr n) = + save i; + c[0] = fullcircle xscaled u yscaled 2u + shifted (4u,0) rotated (360/(2n)) ; + for i=1 upto n-1: + c[i] = c[i-1] rotated (360/n); + endfor; + l[0] = curve(c[0], 2, c[1], -2, 1); + for i=1 upto n-1: + l[i] = l[i-1] rotated (360/n); + endfor; + fill for i=0 upto n-1: + ( reverse subpath(2,6) of c[i] ) & + l[i] & + endfor + % To turn it into a cycle (ugly) + point length(l[n-1]) of l[n-1] -- cycle + withcolor .8white; + for i=0 upto n-1: + draw c[i]; draw l[i]; + endfor; + enddef; + + u:=3mm; + path c[], l[]; + sphere_with_holes(5); +endfig; +beginfig(176) + path c[], l[]; + sphere_with_holes(6); + def ellipse(expr a,b,c,d,e) = + draw curve(a,b,c,d,e) ; + draw curve(c,d,a,b,e) dashed evenly; + enddef; + + ellipse (l[0], 2/3, l[2], 1/3, 4); + ellipse (l[1], 2/3, l[3], 1/3, 4); + ellipse (l[2], 2/3, l[4], 1/3, 4); + ellipse (l[3], 2/3, l[5], 1/3, 4); + ellipse (l[4], 2/3, l[0], 1/3, 4); + ellipse (l[5], 2/3, l[1], 1/3, 4); +endfig; +beginfig(177) + vardef bar(expr m,a,b,c) = + m = 1/3a + 1/3b + 1/3c + enddef; + vardef dbar(expr m,a,b,c) = + draw m--a; draw m--b; draw m--c; + draw m withpen pencircle scaled 4bp; + enddef; + + pair P[], A,B,C; + for i=0 upto 4: + P[i] = 1cm * up rotated (i*360/5); + draw P[i] withpen pencircle scaled 4bp; + endfor; + bar(A, P[0], P[4], B); + bar(B, A, P[1], C); + bar(C, B, P[2], P[3]); + draw fullcircle scaled 2cm dashed evenly; + dbar(A, P[0], P[4], B); + dbar(B, A, P[1], C); + dbar(C, B, P[2], P[3]); +endfig; +beginfig(178) +% M est sur la bissectrice de l'angle A +vardef bissectrice(expr M,A,B,C) = + (M-A) = whatever * ( + (A-C) rotated 1/2(angle(B-A) - angle(C-A))) +enddef; + +% Le cercle inscrit +vardef cercle_inscrit(expr A,B,C) = + save M, h; pair M, h; + bissectrice(M,A,B,C); + bissectrice(M,B,C,A); + M-h = whatever * (B-C) rotated 90; + h = whatever[B,C]; + fullcircle scaled 2 length(M-h) shifted M +enddef; + + pair A,B,C,M; + u:=2cm; + A=(0,0); B=(2u,-.5u); C=(u,u); + draw A--B--C--cycle; + bissectrice(M, A,B,C); + bissectrice(M, B,C,A); + draw M--A; draw M--B; draw M--C; + draw cercle_inscrit(A,B,C); +endfig; +beginfig(179) +vardef premiere_trisectrice (expr M, A,B,C) = + (M-A) = whatever * ( (A-B) rotated 1/3 (angle(C-A) - angle(B-A)) ) +enddef; + +vardef deuxieme_trisectrice (expr M, A,B,C) = + (M-A) = whatever * ( (A-B) rotated 2/3 (angle(C-A) - angle(B-A)) ) +enddef; + + pair A,B,C,M[]; + u:=2cm; + A=(0,0); B=(2u,-.5u); C=(u,u); + draw A--B--C--cycle; + + premiere_trisectrice(M1,A,B,C); + deuxieme_trisectrice(M1,B,C,A); + premiere_trisectrice(M2,B,C,A); + deuxieme_trisectrice(M2,C,A,B); + premiere_trisectrice(M3,C,A,B); + deuxieme_trisectrice(M3,A,B,C); + + draw M1--A; draw M1--B; + draw M2--B; draw M2--C; + draw M3--C; draw M3--A; + + draw M1--M2--M3--cycle; +endfig; +beginfig(180) + save arrowhead; + vardef arrowhead expr p = + save A,u; pair A,u; + A := point length(p) of p; + u := unitvector(direction length(p) of p); + A -- (A - ahlength*u rotated 15) -- + (A - ahlength*u rotated -15) -- cycle + enddef; + + u:=1cm; + drawarrow (0,0) .. (-u,u) .. (u,u); +endfig; +beginfig(181) + save arrowhead; + vardef arrowhead expr p = + save A,B,u; pair A,B,u; + A := point length(p) of p; + B := p intersectionpoint + (fullcircle scaled ahlength shifted A); + u := unitvector(direction length(p) of p); + A -- (A - ahlength*u rotated 30) -- B -- + (A - ahlength*u rotated -30) -- cycle + enddef; + + u:=1cm; + drawarrow (0,0) .. (-u,u) .. (u,u); +endfig; +beginfig(182) + save arrowhead; + vardef arrowhead expr p = + save A,u; pair A,u; + A := point length(p) of p; + u := unitvector(direction length(p) of p); + A -- (A - ahlength*u rotated 30) -- A -- + (A - ahlength*u rotated -30) -- cycle + enddef; + + u:=1cm; + drawarrow (0,0) .. (-u,u) .. (u,u); +endfig; +beginfig(183) + save arrowhead; + vardef arrowhead expr p = + save A,u,a,b; pair A,u; path a,b; + A := point length(p) of p; + u := unitvector(direction length(p) of p); + a := A{-u} .. (A - ahlength*u rotated 30); + b := A{-u} .. (A - ahlength*u rotated -30); + ( a & reverse(a) & b & reverse(b) ) --cycle + enddef; + + u:=1cm; + drawarrow (0,0) .. (-u,u) .. (u,u); +endfig; +beginfig(184) + save arrowhead; + vardef arrowhead expr p = + save A,u; pair A,u; + A := point 1/2length(p) of p; + u := unitvector(direction 1/2length(p) of p); + A -- (A - ahlength*u rotated 15) -- + (A - ahlength*u rotated -15) -- cycle + enddef; + + u:=1cm; + drawarrow (0,0) .. (-u,u) .. (u,u); +endfig; +beginfig(185) + save arrowhead; + vardef arrowhead expr p = + save A,B,u; pair A,B,u; + A := point 1/2length(p) of p; + B := p intersectionpoint + (fullcircle scaled ahlength shifted A); + u := unitvector(direction 1/2length(p) of p); + A -- (A - ahlength*u rotated 30) -- B -- + (A - ahlength*u rotated -30) -- cycle + enddef; + + u:=1cm; + drawarrow (0,0) .. (-u,u) .. (u,u); +endfig; +beginfig(186) + save arrowhead; + vardef arrowhead expr p = + save A,u; pair A,u; + A := point 1/2length(p) of p; + u := unitvector(direction 1/2length(p) of p); + A -- (A - ahlength*u rotated 30) -- A -- + (A - ahlength*u rotated -30) -- cycle + enddef; + + u:=1cm; + drawarrow (0,0) .. (-u,u) .. (u,u); +endfig; +beginfig(187) + save arrowhead; + vardef arrowhead expr p = + save A,u,a,b; pair A,u; path a,b; + A := point 1/2length(p) of p; + u := unitvector(direction 1/2length(p) of p); + a := A{-u} .. (A - ahlength*u rotated 30); + b := A{-u} .. (A - ahlength*u rotated -30); + ( a & reverse(a) & b & reverse(b) ) --cycle + enddef; + + u:=1cm; + drawarrow (0,0) .. (-u,u) .. (u,u); +endfig; +beginfig(188) + def drawwhitearrow expr p = _apth:=p; _finwhitearr enddef; + + def _finwhitearr text t = + draw _apth t; + fill arrowhead _apth t withcolor white; + draw arrowhead _apth t + enddef; + + u:=1cm; + drawwhitearrow (0,0) .. (-u,u) .. (u,u); +endfig; +beginfig(189) + def draw_white_arrow expr p = _apth:=p; _fin_white_arr enddef; + def _fin_white_arr text t = + draw _apth t; + fill arrowhead _apth withcolor white; + draw arrowhead _apth t + enddef; + + def draw_middle_arrow expr p = _apth:=p; _fin_middle_arr enddef; + def _fin_middle_arr text t = + draw _apth t; + filldraw arrowhead_middle _apth t + enddef; + vardef arrowhead_middle expr p = + save A,u; pair A,u; + A := point (arctime (.5arclength p) of p) of p; + u := unitvector(direction (arctime (.5arclength p) of p) of p); + A -- (A - ahlength*u rotated (.5ahangle) ) -- + (A - ahlength*u rotated (-.5ahangle) ) -- cycle + enddef; + + def draw_middle_white_arrow expr p = _apth:=p; _fin_middle_white_arr enddef; + let draw_white_middle_arrow = draw_middle_white_arrow; + def _fin_middle_white_arr text t = + draw _apth t; + fill arrowhead_middle _apth t withcolor white; + draw arrowhead_middle _apth t + enddef; + + def draw_other_arrow expr p = _apth:=p; _fin_other_arr enddef; + def _fin_other_arr text t = + draw _apth t; + draw arrowhead_other _apth t + enddef; + vardef arrowhead_other expr p = + save A,u,a,b; pair A,u; path a,b; + A := point (length p) of p; + u := unitvector(direction (length p) of p); + a := A{-u} .. (A - ahlength*u rotated 30); + b := A{-u} .. (A - ahlength*u rotated -30); + ( a & reverse(a) & b & reverse(b) ) --cycle + enddef; + + def draw_other_middle_arrow expr p = _apth:=p; _fin_other_middle_arr enddef; + let draw_middle_other_arrow = draw_other_middle_arrow; + def _fin_other_middle_arr text t = + draw _apth t; + draw arrowhead_other_middle _apth t + enddef; + vardef arrowhead_other_middle expr p = + save A,u,a,b; pair A,u; path a,b; + A := point (arctime (.5arclength p) of p) of p; + u := unitvector(direction (arctime (.5arclength p) of p) of p); + a := A{-u} .. (A - ahlength*u rotated 30); + b := A{-u} .. (A - ahlength*u rotated -30); + ( a & reverse(a) & b & reverse(b) ) --cycle + enddef; + + path p; + p := halfcircle scaled 2cm; + p := (0,0) .. (3cm,1cm) .. (-1cm,3cm); + p := p scaled .3; + draw_middle_arrow p; + draw_white_arrow p scaled 1.3 withpen pencircle scaled 1bp; + draw_white_middle_arrow p scaled 1.6; + draw_other_middle_arrow p scaled 1.8 withpen pencircle scaled 1bp; + draw_other_arrow p scaled 2 withpen pencircle scaled 1bp; +endfig; +beginfig(190) + vardef mylabel(expr pic, p, t) = + save A; pair A; + A = point t of p + + 8bp * unitvector(direction t of p) rotated 90; + label(pic, A); + enddef; + path p; u:=1cm; + p = (0,0)..(-u,u)..(u,u); + draw p; + for i=0 step .2 until length(p): + draw point i of p withpen pencircle scaled 4bp; + mylabel(btex $A$ etex,p,i); + endfor; +endfig; +beginfig(191) + vardef mylabel(expr pic, p, t) = + save A; pair A; + A = point t of p + + 8bp * unitvector(direction t of p) rotated 90; + label(pic, A); + enddef; + path p; u:=1cm; + p = (0,0)..(-u,u)..(u,u); + draw p; + for i=0 step .2 until length(p): + draw point i of p withpen pencircle scaled 4bp; + mylabel(TEX decimal(i),p,i); + endfor; +endfig; +beginfig(192) + vardef mylabel(expr pic, p, t) = + save A,a; pair A; numeric a; + a := angle(direction t of p rotated 90); + show(a); + a := a + 45/2; + if a>180: a := a - 360 fi; + save ll, lr, ul, ur; + pair ul,ur,ll,lr; + ll := llcorner pic; + lr := lrcorner pic; + ul := ulcorner pic; + ur := urcorner pic; + A = point t of p + + 8bp * unitvector(direction t of p) rotated 90; + label(pic shifted ll, A + + if (a >= 0) and (a <= 45): 1/2(ur-ul) + elseif (a >= 45) and (a <= 90): 1/2(ur-ul) + 1/2(ur-lr) + elseif (a >= 90) and (a <= 135): 1/2(ur-lr) + elseif (a >= 135) and (a <= 180): 1/2(ll-lr) + 1/2(ur-lr) + elseif (a >= -180) and (a <= -135): 1/2(ll-lr) + elseif (a >= -135) and (a <= -90): 1/2(ll-ul) + 1/2(ll-lr) + elseif (a >= -90) and (a <= -45): 1/2(ll-ul) + elseif (a >= -45) and (a <= 0): 1/2(ll-ul) - 1/2(ll-lr) + else: hide(show "BUG") (0,0) + fi); + draw A withpen pencircle scaled 2bp withcolor red; + enddef; + path p; u:=1cm; + p = (0,0)..(-u,u)..(u,u); + p := reverse fullcircle scaled 2u; + draw p; + for i=0 step length(p)/10 until length(p): + draw point i of p withpen pencircle scaled 4bp; + mylabel(TEX decimal(i),p,i); + endfor; +endfig; +beginfig(193) + n:=8; + u:=5mm; + for i=0 upto n-1: + for j=0 upto n-1: + if odd(i+j): + fill (0,0)--(u,0)--(u,u)--(0,u)--cycle + shifted (i*u,j*u) withcolor .8white; + fi; + endfor; + endfor; + for i=0 upto n: + draw (0,i*u)--(n*u,i*u); + draw (i*u,0)--(i*u,n*u); + endfor; +endfig; +beginfig(194) + n:=8; + u:=5mm; + for i=0 upto n-1: + for j=0 upto n-1: + if odd(i+j): + for k=0 step u/5 until u: + draw ( (k,0)--(u,u-k) ) + shifted (i*u,j*u); + draw ( (0,k)--(u-k,u) ) + shifted (i*u,j*u); + endfor; + fi; + endfor; + endfor; + for i=0 upto n: + draw (0,i*u)--(n*u,i*u); + draw (i*u,0)--(i*u,n*u); + endfor; +endfig; +beginfig(195) + n:=8; + u:=5mm; + for i=0 upto n-1: + for j=0 upto n-1: + if odd(i+j): + for k=0 step u/5 until 4/5 u: + if odd(k*5/u): + fill ( (k,0)--(u,u-k)--(u,u-k-u/5)-- + (k+u/5,0)--cycle ) + shifted (i*u,j*u) withcolor .8white; + else: + fill ( (0,k)--(u-k,u)--(u-k-u/5,u)-- + (0,k+u/5)--cycle ) + shifted (i*u,j*u) withcolor .8white; + fi; + endfor; + fi; + endfor; + endfor; + for i=0 upto n: + draw (0,i*u)--(n*u,i*u); + draw (i*u,0)--(i*u,n*u); + endfor; +endfig; +beginfig(196) + vardef trace (suffix f)(expr a,b,inc) = + save i; numeric i; + for i=a step inc until b: + (i*1cm, f(i)*1cm) .. + endfor (b*1cm, f(b)*1cm) + enddef; + + vardef axes = + save p; picture p; + p:=nullpicture; + addto p doublepath (-infinity,0)--(infinity,0) withpen currentpen; + addto p doublepath (0,-infinity)--(0,infinity) withpen currentpen; + clip p to bbox currentpicture; + draw p; + enddef; + + vardef trace_rectangles_left (suffix f)(expr a,b,inc) = + save i; numeric i; + for i=a step inc until b-inc: + path p; + p = (i,0)--(i+inc,0)--(i+inc,f(i))--(i,f(i))--cycle; + p := p scaled 1cm; + fill p withcolor .8*white; + draw p; + endfor; + enddef; + + vardef f(expr x) = 2 ** x enddef; + + trace_rectangles_left(f,-2,2,.5); + draw trace(f, -2,2,.1); + axes; +endfig; +beginfig(197) + vardef trace_trapezes (suffix f)(expr a,b,inc) = + save i; numeric i; + for i=a step inc until b-inc: + path p; + p = (i,0)--(i+inc,0)--(i+inc,f(i+inc))--(i,f(i))--cycle; + p := p scaled 1cm; + fill p withcolor .8*white; + draw p; + endfor; + enddef; + + vardef f(expr x) = 4 - x**2 enddef; + + trace_trapezes(f,-2,2,.5); + draw trace(f, -2,2,.1); + axes; +endfig; +beginfig(198) + vardef trace_rectangles_right (suffix f)(expr a,b,inc) = + save i; numeric i; + for i=a step inc until b-inc: + path p; + p = (i,0)--(i+inc,0)--(i+inc,f(i+inc))--(i,f(i+inc))--cycle; + p := p scaled 1cm; + fill p withcolor .8*white; + draw p; + endfor; + enddef; + + trace_rectangles_right(f,-2,2,.5); + draw trace(f, -2,2,.1); + axes; +endfig; +beginfig(199) + vardef maxf(suffix f)(expr a,b) = + save m,i; numeric m,i; + m:=f(a); + for i=a step (b-a)/100 until b: + if mf(i): m:=f(i); fi; + endfor; + m + enddef; + + vardef trace_rectangles_min (suffix f)(expr a,b,inc) = + save i; numeric i; + for i=a step inc until b-inc: + path p; numeric m; + m:=minf(f,i,i+inc); + p = (i,0)--(i+inc,0)--(i+inc,m)--(i,m)--cycle; + p := p scaled 1cm; + fill p withcolor .8*white; + draw p; + endfor; + enddef; + + vardef f(expr x) = 4 - x**2 enddef; + + trace_rectangles_min(f,-2,2,.5); + draw trace(f, -2,2,.1); + axes; +endfig; +beginfig(201) + u:=2cm; + vardef koch(expr A,B,n) = + save C; pair C; + C = A rotatedaround(1/3[A,B], 120); + if n>0: + koch( A, 1/3[A,B], n-1); + koch( 1/3[A,B], C, n-1); + koch( C, 2/3[A,B], n-1); + koch( 2/3[A,B], B, n-1); + else: + draw A--1/3[A,B]--C--2/3[A,B]--B; + fi; + enddef; + z0=(u,0); + z1=z0 rotated 120; + z2=z1 rotated 120; + koch( z0, z1, 4 ); + koch( z1, z2, 4 ); + koch( z2, z0, 4 ); +endfig; +beginfig(202) + u:=2cm; + vardef koch(expr A,B,n) = + save C; pair C; + C = A rotatedaround(1/3[A,B], -120); + if n>0: + koch( A, 1/3[A,B], n-1); + koch( 1/3[A,B], C, n-1); + koch( C, 2/3[A,B], n-1); + koch( 2/3[A,B], B, n-1); + else: + draw A--1/3[A,B]--C--2/3[A,B]--B; + fi; + enddef; + z0=(u,0); + z1=z0 rotated 120; + z2=z1 rotated 120; + koch( z0, z1, 4 ); + koch( z1, z2, 4 ); + koch( z2, z0, 4 ); +endfig; +beginfig(203) + pair A,B,C,D; + u := 3cm; + A := (0,0); + B := (u,0); + D := B rotated 72; + C := (u,0) + D; + draw A--B--C--D--cycle; + draw A--C; + draw btex $B'$ etex shifted 1/3 (A+B+C); + draw btex $B$ etex shifted 1/3 (A+D+C); + +endfig; +beginfig(204) + pair A,B,C,D,E,F; + numeric d[]; + u := 3cm; + A := (0,0); + B := (u,0); + D := B rotated 72; + C := (u,0) + D; + d[0] := 1; + d[1] := sqrt( 2*(1+cosd(72)) ); + d[2] := sqrt( 2*(1-cosd(36)) ); + A := A; + B := C; + C := D; + draw A--B--C--cycle; + E := (d1/(d0+d1)) [A,C]; + F := (d0/(d0+d2)) [A,B]; + draw E--C--F--cycle; + draw btex $A$ etex shifted 1/3(E+C+F); + draw B--C--F--cycle; + draw btex $B$ etex shifted 1/3(B+C+E); + draw E--F--A--cycle; + draw btex $B'$ etex shifted 1/3(E+F+A); +endfig; +beginfig(205) + pair A,B,C,D,E,F; + numeric d[]; + u := 3cm; + A := (0,0); + B := (u,0); + D := B rotated 72; + C := (u,0) + D; + draw A--B--C--cycle; + d[0] := 1; + d[1] := sqrt( 2*(1+cosd(72)) ); + d[2] := sqrt( 2*(1-cosd(36)) ); + E := (d1/(d0+d1)) [A,C]; + F := (d0/(d0+d2)) [A,B]; + draw E--F--B--cycle; + draw btex $A'$ etex shifted 1/3(E+F+B); + draw E--A--F--cycle; + draw btex $B$ etex shifted 1/3(E+A+F); + draw C--E--B--cycle; + draw btex $B'$ etex shifted 1/3(C+E+B); +endfig; +beginfig(206) + pair A,B,C,D,E,F; + numeric d[]; + u := 3cm; + A := (0,0); + B := (u,0); + D := B rotated 72; + C := (u,0) + D; + d[0] := 1; + d[1] := sqrt( 2*(1+cosd(72)) ); + d[2] := sqrt( 2*(1-cosd(36)) ); + A := A; + B := C; + C := D; + E := (d1/(d0+d1)) [A,C]; + F := (d0/(d0+d2)) [A,B]; + B := 3*(C-E); + C := 3*(F-E); + + draw A--B--C--cycle; + + D := (d0/(d0+d2)) [C,A]; + draw B--C--D--cycle; + draw btex $A$ etex shifted 1/3(B+C+D); + draw B--D--A--cycle; + draw btex $B'$ etex shifted 1/3(B+D+A); +endfig; +beginfig(207) + pair A,B,C,D,E,F; + numeric d[]; + u := 3cm; + A := (0,0); + B := (u,0); + D := B rotated 72; + C := (u,0) + D; + d[0] := 1; + d[1] := sqrt( 2*(1+cosd(72)) ); + d[2] := sqrt( 2*(1-cosd(36)) ); + + % B' + E := (d1/(d0+d1)) [A,C]; + F := (d0/(d0+d2)) [A,B]; + + % A' + A := 2*(E-E); + C := 2*(B-E); + B := 2*(F-E); + + draw A--B--C--cycle; + D := (d0/(d0+d2)) [A,B]; + draw C--D--B--cycle; + draw btex $A'$ etex shifted 1/3(C+D+B); + draw C--A--D--cycle; + draw btex $B$ etex shifted 1/3(C+A+D); +endfig; +beginfig(208) + vardef pave(expr t, A, B, C, n) = + save D, E, d; + pair D,E; + numeric d[]; + d[0] := 1; + d[1] := sqrt( 2*(1+cosd(72)) ); + d[2] := sqrt( 2*(1-cosd(36)) ); + if n>0: + if t=1: + D := (d0/(d0+d2)) [A,C]; + pave(1,B,C,D,n-1); + pave(4,B,D,A,n-1); + elseif t=2: + D := (d0/(d0+d2)) [A,B]; + pave(2,C,D,B,n-1); + pave(3,C,A,D,n-1); + elseif t=3: + D := (d1/(d0+d1)) [A,B]; + E := (d0/(d0+d2)) [A,C]; + pave(1,D,C,E,n-1); + pave(3,B,C,D,n-1); + pave(4,D,E,A,n-1); + elseif t=4: + D := (d1/(d0+d1)) [A,C]; + E := (d0/(d0+d2)) [A,B]; + pave(2,D,E,B,n-1); + pave(3,D,A,E,n-1); + pave(4,C,D,B,n-1); + fi; + else: + draw A--B--C--cycle; + if t=1: + fill A--B--C--cycle withcolor green + blue; + draw A--C withpen pencircle scaled 1bp; + draw A--B withpen pencircle scaled 1bp; + elseif t=2: + fill A--B--C--cycle withcolor green + blue; + draw A--B withpen pencircle scaled 1bp; + draw A--B withpen pencircle scaled 1bp; + elseif t=3: + fill A--B--C--cycle withcolor green + red; + draw A--C withpen pencircle scaled 1bp; + draw C--B withpen pencircle scaled 1bp; + elseif t=4: + fill A--B--C--cycle withcolor green + red; + draw B--C withpen pencircle scaled 1bp; + draw A--B withpen pencircle scaled 1bp; + fi; + fi; + enddef; + numeric M; + M := 6; + pair A,B,C,D; + u := 3cm; + A := (0,0); + B := (u,0); + D := B rotated 72; + C := (u,0) + D; + pave(3,A,C,D,M); + pave(4,A,B,C,M); +endfig; +beginfig(209) +u:=1cm; + +def milieu (expr s, ss, n) = + if n<>0: + for i="A","BA","BBA": + milieu(s&i, ss, n-1); + endfor; + else: + dessine(s&ss); + fi; +enddef; + +def doit(expr N) = + for n=1 upto N: + for i="A","BA","BBA": + for j="","B","BB": + milieu(i,j,n-1); + endfor; + endfor; + endfor; + milieu("","",0); +enddef; + +vardef A(expr a) = + save x,y,n; + numeric x,y,n; + x := xpart a; + y := ypart a; + n:=x*x+y*y; + (-x/n, y/n) +enddef; + +vardef B(expr a) = + save x,y,n; + numeric x,y,n; + x := 1 + xpart a; + y := ypart a; + n := x*x+y*y; + (-x/n, y/n) +enddef; + +def dessine(expr s) = + _dessine(s, dir(60), up, dir(120)); + _dessine(s, dir(60), dir(31), dir(2)); + _dessine(s, dir(120), dir(149), dir(178)); +enddef; + +def _dessine(expr s, a,b,c) = + pair p[]; + p[0] := a; + p[1] := b; + p[2] := c; + + for i=0 upto length(s)-1: + if (substring(i,i+1) of s) = "A": + for j=0 upto 2: p[j] := A( p[j] ); endfor; + elseif (substring(i,i+1) of s) = "B": + for j=0 upto 2: p[j] := B( p[j] ); endfor; + else: show("Ceci n'est pas un générateur : "&substring(i,i+1) of s) + fi; + endfor; + if (xpart p[0] < 2) and (xpart p[0] > -2) and + (xpart p[2] > -2) and (xpart p[2] < 2) and + (ypart p[0] < 2) and (ypart p[2] < 2): + draw ( p[0] .. p[1] .. p[2] ) scaled u; + fi; + +enddef; + + fill (dir(60) .. up .. dir(120) -- + (dir120+up) -- (dir60+up) -- cycle) scaled u + withcolor red+green; + doit(7); + draw (u*dir(60)) withpen pencircle scaled 4bp; + draw (0,u) withpen pencircle scaled 4bp; + draw (u*dir(60) -- u*dir(60)+u*up) shifted (0u,0); + draw (u*dir(60) -- u*dir(60)+u*up) shifted (1u,0); + draw (u*dir(60) -- u*dir(60)+u*up) shifted (-u,0); + draw (u*dir(60) -- u*dir(60)+u*up) shifted (-2u,0); +endfig; +beginfig(210) + u:=5mm; + pickup pencircle scaled 1pt; + for i=0 upto 500: + draw (u*normaldeviate, u*normaldeviate); + endfor; +endfig; +beginfig(211) + u:=2cm; + pickup pencircle scaled 1pt; + for i=0 upto 500: + draw (u*uniformdeviate(1), u*uniformdeviate(1)); + endfor; +endfig; +beginfig(212) + numeric n; + n:=10; + path p; + p := for i=0 upto n-1: + ((1cm + 3mm*normaldeviate,0) rotated (i*360/n)) .. + endfor cycle; + fill p withcolor .8white; + draw p; +endfig; +beginfig(213) + m:=500; + u:=1cm; + pair A,B; + A:=(0,0); + for i=0 upto m: + B:=(i/m*3u, (ypart A)+normaldeviate/m*30u); + draw A--B; + A:=B; + endfor; + draw (0,0)--(3u,0); +endfig; +beginfig(214) + m:=50; + pair A[], B[]; + A[0]=(0,0); + for i=0 upto m: + A[i+1]=(i/m*3u, (ypart A[i])+(uniformdeviate(2)-1)/m*30u); + endfor; + B[0]=A[0]; + B[1]=A[1]; + B[2]=A[2]; + B[3]=A[3]; + for i=4 upto m+1: + B[i] = ( A[i-4] + A[i-3] + A[i-2] + A[i-1] + A[i])/5; + endfor; + for i=0 upto m: + draw B[i]--B[i+1] withpen pencircle scaled 2pt + withcolor .5*white; + endfor; + for i=0 upto m: + draw A[i]--A[i+1]; + endfor; + draw (0,0)--(3u,0); +endfig; +def rescale_currentpic := + if xpart (lrcorner currentpicture - llcorner currentpicture) > 4cm: + currentpicture := currentpicture scaled ( 4cm / + xpart (lrcorner currentpicture - llcorner currentpicture) ); + fi; +enddef; +beginfig(215) +vardef check_pascal = + save again; + boolean again; + again := false; + % Distance entre deux points sur le cercle : au moins 1mm + for i=0 upto 5: + for j=i+1 upto 5: + show( decimal(i) &" "& decimal(j) &" "& decimal(abs(A[i]-A[j])/2mm) ); + if abs(A[i]-A[j]) < 2mm: + again := true; + fi; + endfor; + endfor; + % Distance entre deux des M[i] : au moins 2mm, au plus 10cm + for i=0 upto 2: + for j=i+1 upto 2: + if (abs(M[i]-M[j]) > 10cm) or (abs(M[i]-M[j]) < 2mm): + again := true; + fi; + endfor; + endfor; + % Distance entre un A[i] et un M[i] : au moins 2mm + for i=0 upto 5: + for j=0 upto 2: + if abs(A[i]-M[j]) < 2mm: + again := true; + fi; + endfor; + endfor; + % Distance entre le cercle et l'un des M[i] : au plus 10cm + if abs(M[0])>10cm: + again:=true; + fi; + show again; + not again +enddef; + + forever: + path C; + C := fullcircle scaled 6cm; + pair A[], M[]; + for i=0 upto 5: + A[i] := point uniformdeviate(length(C)) of C; + endfor; + M[0] = whatever[ A[0], A[1] ]; + M[0] = whatever[ A[3], A[4] ]; + M[1] = whatever[ A[1], A[2] ]; + M[1] = whatever[ A[4], A[5] ]; + M[2] = whatever[ A[2], A[3] ]; + M[2] = whatever[ A[5], A[0] ]; + exitif check_pascal; + endfor; + + draw C; + draw A[0]--A[1] withcolor red; + draw A[3]--A[4] withcolor red; + draw A[0]--M[0] withcolor red dashed evenly; + draw A[3]--M[0] withcolor red dashed evenly; + + draw A[1]--A[2] withcolor green; + draw A[4]--A[5] withcolor green; + draw A[1]--M[1] withcolor green dashed evenly; + draw A[4]--M[1] withcolor green dashed evenly; + + draw A[2]--A[3] withcolor blue; + draw A[5]--A[0] withcolor blue; + draw A[2]--M[2] withcolor blue dashed evenly; + draw A[5]--M[2] withcolor blue dashed evenly; + + draw M[0]--M[1]--M[2]--cycle withpen pencircle scaled 2bp; + for i=0 upto 2: + draw M[i] withpen pencircle scaled 6bp; + endfor; + for i=0 upto 5: + draw A[i] withpen pencircle scaled 6bp; + endfor; + rescale_currentpic; +endfig; +beginfig(216) +vardef pascal(expr C) = + forever: + pair A[], M[]; + for i=0 upto 5: + A[i] := point uniformdeviate(length(C)) of C; + endfor; + M[0] = whatever[ A[0], A[1] ]; + M[0] = whatever[ A[3], A[4] ]; + M[1] = whatever[ A[1], A[2] ]; + M[1] = whatever[ A[4], A[5] ]; + M[2] = whatever[ A[2], A[3] ]; + M[2] = whatever[ A[5], A[0] ]; + exitif check_pascal; + endfor; + + draw C; + draw A[0]--A[1] withcolor red; + draw A[3]--A[4] withcolor red; + draw A[0]--M[0] withcolor red dashed evenly; + draw A[3]--M[0] withcolor red dashed evenly; + + draw A[1]--A[2] withcolor green; + draw A[4]--A[5] withcolor green; + draw A[1]--M[1] withcolor green dashed evenly; + draw A[4]--M[1] withcolor green dashed evenly; + + draw A[2]--A[3] withcolor blue; + draw A[5]--A[0] withcolor blue; + draw A[2]--M[2] withcolor blue dashed evenly; + draw A[5]--M[2] withcolor blue dashed evenly; + + draw M[0]--M[1]--M[2]--cycle withpen pencircle scaled 2bp; + for i=0 upto 2: + draw M[i] withpen pencircle scaled 6bp; + endfor; + for i=0 upto 5: + draw A[i] withpen pencircle scaled 6bp; + endfor; +enddef; + + pascal(fullcircle xscaled 6cm yscaled 3cm); + rescale_currentpic; +endfig; +beginfig(217) + pascal((for i=-2cm step .1cm until 2cm: + (i, (i/1cm)**2 *1cm) .. + endfor (2.1cm,4.41cm)) rotated 30); + rescale_currentpic; +endfig; +beginfig(218) +vardef pascal(expr C) = + forever: + pair A[], M[]; + + numeric t[]; + for i=0 upto 5: + t[i] = uniformdeviate(length(C)); + endfor; + for i=0 upto 5: + for j=0 upto 4: + if t[j]>t[j+1]: + tt:=t[j]; t[j]:=t[j+1]; t[j+1]:=tt; + fi; + endfor; + endfor; + for i=0 upto 5: + A[i] = point t[i] of C; + endfor; + + M[0] = whatever[ A[0], A[1] ]; + M[0] = whatever[ A[3], A[4] ]; + M[1] = whatever[ A[1], A[2] ]; + M[1] = whatever[ A[4], A[5] ]; + M[2] = whatever[ A[2], A[3] ]; + M[2] = whatever[ A[5], A[0] ]; + exitif check_pascal; + endfor; + + draw C; + draw A[0]--A[1] withcolor red; + draw A[3]--A[4] withcolor red; + draw A[0]--M[0] withcolor red dashed evenly; + draw A[3]--M[0] withcolor red dashed evenly; + + draw A[1]--A[2] withcolor green; + draw A[4]--A[5] withcolor green; + draw A[1]--M[1] withcolor green dashed evenly; + draw A[4]--M[1] withcolor green dashed evenly; + + draw A[2]--A[3] withcolor blue; + draw A[5]--A[0] withcolor blue; + draw A[2]--M[2] withcolor blue dashed evenly; + draw A[5]--M[2] withcolor blue dashed evenly; + + draw M[0]--M[1]--M[2]--cycle withpen pencircle scaled 2bp; + for i=0 upto 2: + draw M[i] withpen pencircle scaled 6bp; + endfor; + for i=0 upto 5: + draw A[i] withpen pencircle scaled 6bp; + endfor; +enddef; + + pascal(fullcircle scaled 6cm); + rescale_currentpic; +endfig; +beginfig(219) + pascal(fullcircle xscaled 6cm yscaled 3cm); + rescale_currentpic; +endfig; +beginfig(220) + pascal(fullcircle xscaled 6cm yscaled 3cm); + rescale_currentpic; +endfig; +beginfig(221) + vardef barycentre(text t) = + save n, G; + pair G; numeric n; + G := origin; n:=0; + for a=t: + G:=G+a; + n:=n+1; + endfor; + G/n + enddef; + + pair A[]; + n:=10; + for i=0 upto n: + A[i] = 1cm*(normaldeviate, normaldeviate); + draw A[i] withpen pencircle scaled 4bp; + endfor; + draw barycentre(A[0] for i=1 upto 10: ,A[i] endfor) + withpen pencircle scaled 4bp withcolor red; +endfig; +beginfig(222) + vardef barycentre(text t) = + save a, i, n, G, X; + pair G,X; numeric n,i; + G := origin; n:=0; i:=0; + for a=t: + show("i = "& decimal(i)); + show a; + if odd(i): + show("odd"); + n:=n+a; + G:= G + a*X; + else: + show("even"); + X:=a; + fi; + i:=i+1; + endfor; + G/n + enddef; + + pair A[]; + n:=10; + for i=0 upto n: + A[i] = 1cm*(normaldeviate, normaldeviate); + draw A[i] withpen pencircle scaled 4bp; + endfor; + draw barycentre(A[0],0 for i=1 upto 10: ,A[i],i endfor) + withpen pencircle scaled 4bp withcolor red; +endfig; +beginfig(223) + numeric n; + n:=10; + path p; + p := for i=0 upto n-1: + ((1cm + 3mm*normaldeviate,0) rotated (i*360/n)) .. + endfor cycle; + for i=0 step 2mm until 3cm: + draw fullcircle scaled i; + endfor; + clip currentpicture to p; + draw p; + +endfig; +beginfig(224) + u := 5mm; + draw (-2u,0) -- (2u,0); + draw (0,-u) -- (0,4u); + draw (-2u,4u) for i=-1.9 step .1 until 2.01: .. (i*u, i*i*u) endfor + withpen pencircle scaled 1bp; + draw bbox currentpicture withpen pensquare scaled 2bp withcolor .8white; + draw bbox currentpicture withpen pensquare scaled 2bp withcolor .8white; +endfig; +beginfig(225) + path p; + p := (0,0) -- (2cm,0); + def doit (suffix p)(expr t) = + begingroup + interim linecap := t; + draw p withpen pencircle scaled 5mm withcolor .8white; + endgroup; + draw point 0 of p withpen pencircle scaled 4bp; + draw point 1 of p withpen pencircle scaled 4bp; + p := p shifted (0,-7mm) + enddef; + doit(p,rounded); + doit(p,butt); + doit(p,squared); + +endfig; +beginfig(226) + path p; + p := (0,0) -- (1cm,5mm) -- (2cm,0); + def doit (suffix p)(expr t) = + begingroup + interim linejoin := t; + draw p withpen pencircle scaled 5mm withcolor .8white; + endgroup; + draw point 0 of p withpen pencircle scaled 4bp; + draw point 1 of p withpen pencircle scaled 4bp; + draw point 2 of p withpen pencircle scaled 4bp; + p := p shifted (0,-7mm) + enddef; + doit(p,rounded); + doit(p,mitered); + doit(p,beveled); + +endfig; +beginfig(227) + path p; + p := (0,0) -- (2cm,0); + vardef doit (suffix p)(expr t) = + interim linecap := t; + draw p withpen pencircle scaled 5mm withcolor .8white; + draw point 0 of p withpen pencircle scaled 4bp; + draw point 1 of p withpen pencircle scaled 4bp; + draw point 2 of p withpen pencircle scaled 4bp; + p := p shifted (0,-7mm) + enddef; + doit(p,rounded); + doit(p,butt); + doit(p,squared); + +endfig; +beginfig(228) + draw fullcircle scaled 2cm; + special("0 0 moveto 10 10 rlineto -10 10 rlineto stroke"); + +endfig; +beginfig(229) + draw fullcircle shifted (.5,.5) xscaled 18.2cm yscaled 4cm; + special( + "/Times-Roman findfont 150 scalefont setfont " & + "0 0 moveto (ABCabc) false charpath clip stroke " & + "gsave 300 0 translate " & + " 2 4 600 {dup 0 moveto 0 exch 0 exch 0 360 arc stroke} for " & + "grestore " + ); + +endfig; +beginfig(230) + draw fullcircle shifted (.5,.5) xscaled 18.2cm yscaled 4cm; + special( + "gsave " & + "/Times-Roman findfont 150 scalefont setfont " & + "0 0 moveto (ABCabc) false charpath clip stroke " & + "gsave 300 0 translate " & + " 2 4 600 {dup 0 moveto 0 exch 0 exch 0 360 arc stroke} for " & + "grestore " & + "grestore " + ); + +endfig; +beginfig(231) + path p; + p = + (0,u) + for i=.1 step .1 until 10: + hide( pair A; A = (i*u, (sind (i*180/3.14))/i *u); + draw A withpen pencircle scaled 2pt ) + .. A + endfor; + draw p; +endfig; +beginfig(232) +vardef inversion (expr O,k,M) = + if pair M: + (O + k*unitvector(M-O)/abs(M-O)) + elseif path M: + for i=0 step length(M)/10 until length(M): + hide( + draw O--inversion(O,k,point i of M)--(point i of M); + draw inversion(O,k,point i of M) withpen pencircle scaled 2pt; + draw point i of M withpen pencircle scaled 2pt withcolor red; + draw O withpen pencircle scaled 2pt; + ) + inversion(O,k,point i of M) .. + endfor + cycle + fi +enddef; + + path p[]; + p1=fullcircle scaled 2u shifted (u,0); + p2=fullcircle scaled 2u shifted (-u,0); + draw p1 dashed withdots scaled .25; + draw p2 dashed withdots scaled .25; + z0 = (.5u,2u); + draw inversion( z0, 2 (u**2), p1 ); + draw inversion( z0, 2 (u**2), p2 ); +endfig; +beginfig(233) + path p; + p := (0,0) -- (1cm,0); + show ahangle; + begingroup + interim ahangle := 30; + interim linejoin := mitered; + interim linecap := butt; + drawarrow p withpen pencircle scaled 2bp; + endgroup; + begingroup + interim ahangle := 60; + drawarrow p shifted (0,-5mm) withpen pencircle scaled 2bp; + endgroup; + +endfig; +beginfig(234) + numeric x; + x = sind(60); + draw TEX("$\sin 60 = " & decimal(x) & "$"); + +endfig; +beginfig(235) +picture _TEX_pic; + +def largeur(expr p) = + if picture p: + xpart( lrcorner(p) - llcorner(p) ) + elseif string p: + hide(_TEX_pic := TEX(p);) + xpart( lrcorner(_TEX_pic) - llcorner(_TEX_pic) ) + else: + hide( errmessage("largeur: wrong type"); 0) + fi +enddef; + +def hauteur(expr p) = + if picture p: + ypart(ulcorner(p)) + elseif string p: + hide(_TEX_pic := TEX(p);) + ypart(ulcorner(_TEX_pic)) + else: + hide( errmessage("hauteur: wrong type"); 0) + fi +enddef; + +def profondeur (expr p) = + if picture p: + -ypart(llcorner(p)) + elseif string p: + hide(_TEX_pic := TEX(p);) + -ypart(llcorner(_TEX_pic)) + else: + hide( errmessage("profondeur: wrong type"); 0) + fi +enddef; + + picture p; + string s; + s := "\huge\LaTeX"; + p := TEX(s); + drawarrow (0,0) -- (largeur(s),0) withcolor red; + drawarrow (0,0) -- (0,hauteur(s)) withcolor green; + drawarrow (0,0) -- (0,-profondeur(s)) withcolor blue; + draw p; + draw bbox p; +endfig; +beginfig(236) + def reddraw text t = draw t withcolor red enddef; + draw (0,0) -- (2cm,0); + reddraw (0,0) -- (2cm,5mm) withpen pencircle scaled 2bp; + +endfig; +beginfig(237) +path _myfill_p; + +def myfill expr p = + _myfill_p := p; + _myfill +enddef; + +def _myfill text t = + fill _myfill_p t; + draw _myfill_p t withcolor red; +enddef; + + myfill fullcircle scaled 1cm withcolor .8white withpen pencircle scaled 2bp; +endfig; +beginfig(238) + boxit.a(btex Essai etex); + a.c = (0,0); + drawboxed(a); + +endfig; +beginfig(239) + circleit.a(btex Essai etex); + a.c = (0,0); + drawboxed(a); + +endfig; +beginfig(240) + rboxit.a(btex Essai etex); + a.c = (0,0); + drawboxed(a); + +endfig; +beginfig(241) + boxit.a(btex Essai etex); + a.c = (0,0); + drawunboxed(a); + +endfig; +beginfig(242) + circleit.a(btex Essai etex); + a.c = (0,0); + a.dx = a.dy; + drawboxed(a); +endfig; +beginfig(243) + circleit.a(btex Essai etex); + a.c = (0,0); + a.dx = a.dy; + drawunboxed(a); + for i=0 step 10 until 360: + draw (0,0) -- 1cm*right rotated i cutbefore bpath.a; + endfor; +endfig; +beginfig(244) + circleit.a(btex Début etex); + a.c = (0,0); + a.dx = a.dy; + circleit.b(btex Fin etex); + b.c = (2cm,0); + b.dx = b.dy; + drawboxed(a,b); + drawarrow a.c {dir 45} .. b.c {dir -45} + cutbefore bpath.a cutafter bpath.b; + drawarrow b.c {dir -135} .. a.c {dir 135} + cutbefore bpath.b cutafter bpath.a; +endfig; +beginfig(245) + circleit.a(btex Début etex); + a.c = (0,0); + a.dx = a.dy; + circleit.b(btex Fin etex); + b.c = (2cm,0); + b.dx = b.dy; + drawunboxed(a,b); + drawarrow a.c {dir 45} .. b.c {dir -45} + cutbefore bpath.a cutafter bpath.b; + drawarrow b.c {dir -135} .. a.c {dir 135} + cutbefore bpath.b cutafter bpath.a; +endfig; +beginfig(246) + boxjoin( + a.dx = a.dy; + b.dx = b.dy; + a.e + (5mm,0) = b.w; + ); + circleit.a(btex Début etex); + a.c = (0,0); + circleit.b(btex Fin etex); + drawboxed(a,b); + drawarrow a.c {dir 45} .. b.c {dir -45} + cutbefore bpath.a cutafter bpath.b; + drawarrow b.c {dir -135} .. a.c {dir 135} + cutbefore bpath.b cutafter bpath.a; +endfig; +beginfig(247) + % Toujours mettre la commande boxjoin au début. + boxjoin(a.e = b.w); + boxit.a(btex A etex); + boxit.b(btex B etex); + boxit.c(btex C etex); + boxit.d(btex D etex); + drawboxed(a,b,c,d); +endfig; +beginfig(248) + boxjoin(a.e = b.w); + boxit.a(btex a etex); + boxit.b(btex b etex); + boxit.c(btex c etex); + boxit.d(btex d etex); + drawboxed(a,b,c,d); +endfig; +beginfig(249) + boxjoin(a.se = b.sw; a.ne = b.nw); + boxit.a(btex a etex); + boxit.b(btex b etex); + boxit.c(btex c etex); + boxit.d(btex d etex); + drawboxed(a,b,c,d); +endfig; +beginfig(250) + boxjoin(a.se = b.sw; a.ne = b.nw); + boxit.a1(btex a etex); + boxit.a2(btex b etex); + boxit.a3(btex c etex); + boxit.a4(btex d etex); + drawboxed(a1,a2,a3,a4); +endfig; +beginfig(251) + draw (0,0) -- (5cm,0) withcolor red; + draw btex a etex ; + draw btex b etex shifted (1cm,0); + draw btex c etex shifted (2cm,0); + draw btex d etex shifted (3cm,0); + draw btex e etex shifted (4cm,0); +endfig; +beginfig(252) + draw (0,0) -- (5cm,0) withcolor red; + boxjoin(b.c - a.c = (1cm,0)); + boxit a (btex a etex); + boxit b (btex b etex); + boxit c (btex c etex); + boxit d (btex d etex); + boxit e (btex e etex); + drawunboxed(a,b,c,d,e); +endfig; +beginfig(253) + vardef boxTEX expr s = + save p,h,l; + picture p; + numeric h,l; + p := TEX(s); + h := max(ypart ulcorner(p), abs(ypart llcorner(p))); + l := xpart lrcorner(p); + setbounds p to (0,-h)--(l,-h)--(l,h)--(0,h)--cycle; + p + enddef; + + draw (0,0) -- (5cm,0) withcolor red; + boxjoin(b.c - a.c = (1cm,0)); + boxit a (boxTEX "a"); + boxit b (boxTEX "b"); + boxit c (boxTEX "c"); + boxit d (boxTEX "d"); + boxit e (boxTEX "e"); + drawunboxed(a,b,c,d,e); +endfig; +beginfig(254) + draw (0,0) -- (5cm,0) withcolor red; + boxjoin(b.c - a.c = (1cm,0)); + boxit a (boxTEX "a"); + boxit b (boxTEX "b"); + boxit c (boxTEX "c"); + boxit d (boxTEX "d"); + boxit e (boxTEX "e"); + drawboxed(a,b,c,d,e); +endfig; +beginfig(255) + let OLD_beginbox_ = beginbox_; + def beginbox_(expr pp,sp)(suffix $)(text t) = + _n_ := str $; + generic_declare(pair) _n.off, _n.c; + generic_declare(string) pproc_._n, sproc_._n; + generic_declare(picture) pic_._n; + pproc_$:=pp; sproc_$:=sp; + pic_$ = nullpicture; + for _p_=t: + pic_$:= + if picture _p_: _p_ + else: _p_ infont defaultfont scaled defaultscale + fi; + endfor + $c = $off + (.5[xpart llcorner pic_$, xpart urcorner pic_$], 0) + enddef; + + draw (0,0) -- (5cm,0) withcolor red; + boxjoin(b.c - a.c = (1cm,0)); + boxit a (btex a etex); + boxit b (btex b etex); + boxit c (btex c etex); + boxit d (btex d etex); + boxit e (btex e etex); + drawunboxed(a,b,c,d,e); +endfig; +beginfig(256) + draw (0,0) -- (5cm,0) withcolor red; + boxjoin(b.c - a.c = (1cm,0)); + boxit a (btex a etex); + boxit b (btex b etex); + boxit c (btex c etex); + boxit d (btex d etex); + boxit e (btex e etex); + drawboxed(a,b,c,d,e); +endfig; +beginfig(257) +let OLD_boxit = boxit; +let OLD_sizebox_ = sizebox_; +let OLD_clearb_ = clearb_; + +vardef boxit@#(text tt) = + beginbox_("boxpath_","sizebox_",@#,tt); + generic_declare(pair) _n.sw, _n.s, _n.se, _n.e, _n.ne, _n.n, _n.nw, _n.w; + 0 = xpart (@#nw-@#sw) = ypart(@#se-@#sw); + 0 = xpart(@#ne-@#se) = ypart(@#ne-@#nw); + @#s = .5[@#sw,@#se]; + @#n = .5[@#ne,@#nw]; + xpart @#w = xpart @#nw; + xpart @#e = xpart @#ne; + ypart @#w = ypart @#c = ypart @#e; + @#ne-@#c = (@#dx,@#dy) + + (xpart(.5*(urcorner pic_@# - llcorner pic_@#)), ypart urcorner pic_@#); + @#c-@#sw = (@#dx,@#dy) + + (xpart(.5*(urcorner pic_@# - llcorner pic_@#)), -ypart lrcorner pic_@#); + endbox_(clearb_,@#); +enddef; + + draw (0,0) -- (5cm,0) withcolor red; + boxjoin(b.c - a.c = (1cm,0)); + boxit a (btex a etex); + boxit b (btex b etex); + boxit c (btex c etex); + boxit d (btex d etex); + boxit e (btex e etex); + drawboxed(a,b,c,d,e); +endfig; +beginfig(258) + draw (0,0) -- (5cm,0) withcolor red; + boxjoin(b.c - a.c = (1cm,0); b.ne - b.se = a.nw - a.sw); + boxit a (btex a etex); + boxit b (btex b etex); + boxit c (btex c etex); + boxit d (btex d etex); + boxit e (btex e etex); + drawboxed(a,b,c,d,e); +endfig; +beginfig(259) +vardef boxit@#(text tt) = + beginbox_("boxpath_","sizebox_",@#,tt); + generic_declare(pair) _n.sw, _n.s, _n.se, _n.e, _n.ne, _n.n, _n.nw, _n.w; + 0 = xpart (@#nw-@#sw) = ypart(@#se-@#sw); + 0 = xpart(@#ne-@#se) = ypart(@#ne-@#nw); + @#s = .5[@#sw,@#se]; + @#n = .5[@#ne,@#nw]; + xpart @#w = xpart @#nw; + xpart @#e = xpart @#ne; + ypart @#w = ypart @#c = ypart @#e; + @#ne-@#c = (@#dx,@#dyup) + + (xpart(.5*(urcorner pic_@# - llcorner pic_@#)), ypart urcorner pic_@#); + @#c-@#sw = (@#dx,@#dydown) + + (xpart(.5*(urcorner pic_@# - llcorner pic_@#)), -ypart lrcorner pic_@#); + endbox_(clearb_,@#); +enddef; + +def sizebox_(suffix $) = + if unknown $.dx: $.dx=defaultdx; fi + if unknown $.dyup: + if unknown $.dy: + $.dyup=defaultdy + else: + $.dyup=$.dy + fi; + fi; + if unknown $.dydown: + if unknown $.dy: + $.dydown=defaultdy + else: + $.dydown=$.dy + fi; + fi; +enddef; + +vardef clearb_(suffix $) = + _n_ := str $; + generic_redeclare(numeric) _n.sw, _n.s, _n.se, _n.e, _n.ne, _n.n, _n.nw, _n.w, + _n.c, _n.off, _n.dx, _n.dy, _n.dyup, _n.dy_down; +enddef; + + draw (0,0) -- (5cm,0) withcolor red; + boxjoin(b.c - a.c = (1cm,0); ypart( b.ne - a.ne ) = 0; ypart( b.se - a.se ) = 0;); + boxit a (btex a etex); + boxit b (btex b etex); + boxit c (btex c etex); + boxit d (btex d etex); + boxit e (btex e etex); + drawboxed(a,b,c,d,e); +endfig; +beginfig(260) + draw (0,0) -- (5cm,0) withcolor red; + picture p; + numeric h; + p := btex b etex; + h = ypart ( ulcorner p - llcorner p ); + boxjoin( + b.c - a.c = (1cm,0); + ypart( b.ne - a.ne ) = 0; + ypart( a.ne - a.se ) = h+2defaultdy; + ); + boxit a (btex a etex); + boxit b (btex b etex); + boxit c (btex c etex); + boxit d (btex d etex); + boxit e (btex e etex); + drawboxed(a,b,c,d,e); +endfig; +beginfig(261) + % Les lignes suivantes n'ont pas l'effet escompté... + let beginbox_ = OLD_beginbox_; + let boxit = OLD_boxit; + let sizebox_ = OLD_sizebox_; + let clearb_ = OLD_clearb_; + + % On recopie donc les définitions initiales des macros que l'on a modifiées... + extra_beginfig := ""; + extra_endfig := ""; + input boxes; + + % Et on regarde sur un exemple si ça marche... + draw (0,0) -- (5cm,0) withcolor red; + boxjoin(b.c - a.c = (1cm,0)); + boxit a (btex a etex); + boxit b (btex b etex); + boxit c (btex c etex); + boxit d (btex d etex); + boxit e (btex e etex); + drawboxed(a,b,c,d,e); +endfig; +beginfig(262) + boxit.a1(btex $a$ etex); + boxit.b1(btex etex); + boxit.a2(btex $b$ etex); + boxit.b2(btex etex); + boxit.a3(btex $c$ etex); + boxit.b3(btex etex); + boxit.a4(btex $d$ etex); + boxit.b4(btex etex); + for i=1 upto 4: + % Les boites a[i] et b[i] sont collées + a[i].e = b[i].w; + % Il y a un peu d'espace entre b[i] et a[i+1] + b[i].e + (5mm,0) = a[i+1].w; + % La hauteur des boites est la même + a[i].n - a[i].s = a[i+1].n - a[i+1].s = b[i].n - b[i].s ; + % Les b[i] ne sont pas très larges + b[i].e - b[i].w = (2mm,0); + endfor; + drawboxed(a1,b1,a2,b2,a3,b3,a4,b4); + for i=1 upto 3: + drawarrow b[i].c {up} .. a[i+1].c {down} + cutafter bpath.a[i+1]; + endfor; +endfig; +beginfig(263) + boxit.a(btex A etex); + boxit.b(btex B etex); + boxit.c(btex C etex); + boxit.d(btex D etex); + boxit.e(btex E etex); + + b.c-a.c = (1cm,0); + c.c-b.c = (b.c-a.c) rotated 72; + d.c-c.c = (c.c-b.c) rotated 72; + e.c-d.c = (d.c-c.c) rotated 72; + a.c-e.c = (e.c-d.c) rotated 72; + b.c-a.c = (a.c-e.c) rotated 72; + + drawboxed(a,b,c,d,e); + + drawarrow a.c -- b.c cutbefore bpath.a cutafter bpath.b; + drawarrow b.c -- c.c cutbefore bpath.b cutafter bpath.c; + drawarrow c.c -- d.c cutbefore bpath.c cutafter bpath.d; + drawarrow d.c -- e.c cutbefore bpath.d cutafter bpath.e; + drawarrow e.c -- a.c cutbefore bpath.e cutafter bpath.a; +endfig; +beginfig(264) + boxit.a(btex A etex); + boxit.b(btex B etex); + boxit.c(btex C etex); + boxit.d(btex D etex); + boxit.e(btex E etex); + + d.c = 1cm*up; + e.c = 1cm*up rotated (1*72); + a.c = 1cm*up rotated (2*72); + b.c = 1cm*up rotated (3*72); + c.c = 1cm*up rotated (4*72); + + drawunboxed(a,b,c,d,e); + + drawarrow a.c -- b.c cutbefore bpath.a cutafter bpath.b; + drawarrow b.c -- c.c cutbefore bpath.b cutafter bpath.c; + drawarrow c.c -- d.c cutbefore bpath.c cutafter bpath.d; + drawarrow d.c -- e.c cutbefore bpath.d cutafter bpath.e; + drawarrow e.c -- a.c cutbefore bpath.e cutafter bpath.a; +endfig; +beginfig(265) + def linkboxes(suffix a,b) = + drawarrow a.c -- b.c cutbefore bpath.a cutafter bpath.b; + enddef; + + boxit.a(btex A etex); + boxit.b(btex B etex); + boxit.c(btex C etex); + boxit.d(btex D etex); + boxit.e(btex E etex); + + d.c = 1cm*up; + e.c = 1cm*up rotated (1*72); + a.c = 1cm*up rotated (2*72); + b.c = 1cm*up rotated (3*72); + c.c = 1cm*up rotated (4*72); + + drawunboxed(a,b,c,d,e); + + linkboxes(a,b); + linkboxes(b,c); + linkboxes(c,d); + linkboxes(d,e); + linkboxes(e,a); +endfig; +beginfig(266) + boxit a(btex Essai etex); + fill bpath a withcolor .5[red,white]; + drawboxed(a); + +endfig; +beginfig(267) + def drawredboxed(text t) = + forsuffixes a=t: + fill bpath a withcolor .5[red,white]; + endfor; + drawboxed(t); + enddef; + + circleit.a(btex Début etex); + a.c = (0,0); + a.dx = a.dy; + circleit.b(btex Fin etex); + b.c = (2cm,0); + b.dx = b.dy; + drawredboxed(a,b); + drawarrow a.c {dir 45} .. b.c {dir -45} + cutbefore bpath.a cutafter bpath.b; + drawarrow b.c {dir -135} .. a.c {dir 135} + cutbefore bpath.b cutafter bpath.a; + +endfig; +beginfig(268) + def drawcoloredboxed(expr c)(text t) = + forsuffixes a=t: + fill bpath a withcolor c; + endfor; + drawboxed(t); + enddef; + + circleit.a(btex Début etex); + a.c = (0,0); + a.dx = a.dy; + circleit.b(btex Fin etex); + b.c = (2cm,0); + b.dx = b.dy; + drawcoloredboxed(.5[red,white], a); + drawcoloredboxed(.5[blue,white], b); + drawarrow a.c {dir 45} .. b.c {dir -45} + cutbefore bpath.a cutafter bpath.b; + drawarrow b.c {dir -135} .. a.c {dir 135} + cutbefore bpath.b cutafter bpath.a; + +endfig; +beginfig(269) +def begindiag = + begingroup; + save _diag_x, _diag_x_max, _diag_y, _diag_y_max, _diag; + numeric _diag_x, _diag_x_max, _diag_y, _diag_y_max; + string _diag[][]; + % Numéro de ligne et de colonne courrants + _diag_x = -1; _diag_y = 0; + % Numéro de ligne et de colonne maximaux + _diag_x_max = _diag_y_max = 0; + save _diag_ar_n, _diag_ar_source, _diag_ar_but, _diag_ar_up, _diag_ar_down; + % Nombre de flèches + numeric _diag_ar_n; _diag_ar_n=-1; + % Source et but de la flèche + pair _diag_ar_source[], _diag_ar_but[]; + % Ce qu'il faut écrire au dessus ou au dessous + string _diag_ar_up[], _diag_ar_down[]; + save _diag_ar_curved, _diag_ar_shape, _diag_ar_color, _diag_ar_width; + % « courbure » (c'est une distance) + numeric _diag_ar_curved[]; + % Forme de la flèche + string _diag_ar_shape[]; + % Couleur, épaisseur, pointillés + color _diag_ar_color[]; + numeric _diag_ar_width[]; + picture _diag_ar_dashed[]; +enddef; + +def node expr A = + _diag_x := _diag_x + 1; + _diag_x_max := max(_diag_x,_diag_x_max); + _diag[_diag_x][_diag_y] := A; +enddef; + +def nextline = + _diag_x := -1; + _diag_y := _diag_y + 1; + _diag_y_max := max(_diag_y, _diag_y_max); +enddef; + +tertiarydef a => b = a, b enddef; +def even (expr a) = not odd(a) enddef; + +vardef rarrowto(expr a,b)(text t) = + save i,p; + _diag_ar_n := _diag_ar_n + 1; + _diag_ar_source[_diag_ar_n] = (_diag_x, _diag_y); + _diag_ar_but[_diag_ar_n] = (_diag_x + a, _diag_y + b); + + numeric i; i:=0; + string current; + for p=t: + if even(i): + current := p; + else: + if current = "above": + _diag_ar_up[_diag_ar_n] = p; + elseif current = "below": + _diag_ar_down[_diag_ar_n] = p; + elseif current = "shape": + _diag_ar_shape[_diag_ar_n] = p; + elseif current = "curved": + _diag_ar_curved[_diag_ar_n] = p; + elseif current = "color": + _diag_ar_color[_diag_ar_n] = p; + elseif current = "width": + _diag_ar_width[_diag_ar_n] = p; + elseif current = "dashed": + _diag_ar_dashed[_diag_ar_n] = p; + else: + errmessage("rarrowto: Wrong argument "&ditto¤t&ditto); + fi; + fi; + i := i + 1; + endfor; + if odd i: + errmessage("rarrowto: Odd number of arguments "&decimal(i)); + fi; +enddef; + +%% Les têtes de flèches + +picture withsmalldots, notdashed; +withsmalldots := withdots scaled .3; +notdashed := dashpattern(on 50cm); + +vardef diag_arrow_head (expr p, t) = + save A,B,C,u; pair A,B,C,u; + B := point t of p; + u := -unitvector(direction t of p); + A := B + ahlength*u rotated(-ahangle); + C := B + ahlength*u rotated(+ahangle); + A .. {-u} B {u} .. C +enddef; + +vardef diag_arrow_bar (expr p, t) = + save A,B,C,u; pair A,B,C,u; + B := point t of p; + u := unitvector(direction t of p); + A := B + ahlength*sind(ahangle)*u rotated(90); + C := B + ahlength*sind(ahangle)*u rotated(-90); + A .. B .. C +enddef; + +%% Les flèches + +def diag_draw_arrow_default(suffix a,b)(expr curved, w, col, dash) = + p = a.c .. + (1/2 [a.c,b.c] + curved*unitvector(b.c-a.c) rotated 90) + .. b.c; + pp := p cutbefore bpath.a cutafter bpath.b; + draw pp + withcolor col withpen pencircle scaled w dashed dash; + draw diag_arrow_head (pp, length(pp)) + withcolor col withpen pencircle scaled w; +enddef; + +def diag_draw_arrow_middle(suffix a,b)(expr curved, w, col, dash) = + p = a.c .. + (1/2 [a.c,b.c] + curved*unitvector(b.c-a.c) rotated 90) + .. b.c; + pp := p cutbefore bpath.a cutafter bpath.b; + draw pp + withcolor col withpen pencircle scaled w dashed dash; + draw diag_arrow_head(p,1) + withcolor col withpen pencircle scaled w; +enddef; + +def diag_draw_arrow_epi(suffix a,b)(expr curved, w, col, dash) = + p = a.c .. + (1/2 [a.c,b.c] + curved*unitvector(b.c-a.c) rotated 90) + .. b.c; + pp := p cutbefore bpath.a cutafter bpath.b; + draw pp + withcolor col withpen pencircle scaled w dashed dash; + draw diag_arrow_head (pp, length(pp)) + withcolor col withpen pencircle scaled w; + path ppp; + ppp := pp cutafter (fullcircle scaled 1mm shifted point length(pp) of pp); + draw diag_arrow_head(ppp, length(ppp)) + withcolor col withpen pencircle scaled w; +enddef; + +def diag_draw_arrow_mono(suffix a,b)(expr curved, w, col, dash) = + p = a.c .. + (1/2 [a.c,b.c] + curved*unitvector(b.c-a.c) rotated 90) + .. b.c; + pp := p cutbefore bpath.a cutafter bpath.b; + path ppp; + ppp := pp cutbefore (fullcircle scaled 1mm shifted point 0 of pp); + draw ppp + withcolor col withpen pencircle scaled w dashed dash; + draw diag_arrow_head (pp, length(pp)) + withcolor col withpen pencircle scaled w; + draw diag_arrow_head(ppp, 0) + withcolor col withpen pencircle scaled w; +enddef; + +vardef diag_draw_arrow_inj(suffix a,b)(expr curved, w, col, dash) = + p = a.c .. + (1/2 [a.c,b.c] + curved*unitvector(b.c-a.c) rotated 90) + .. b.c; + pp := p cutbefore bpath.a cutafter bpath.b; + path ppp; + ppp := pp cutbefore (fullcircle scaled 1mm shifted point 0 of pp); + draw ppp + withcolor col withpen pencircle scaled w dashed dash; + draw diag_arrow_head (pp, length(pp)) + withcolor col withpen pencircle scaled w; + save u,A,B,C; + pair u,A,B,C; + A := point 0 of ppp; + u := unitvector(direction 0 of ppp); + B := A + ahlength*(-u) rotated (-ahangle); + C := A + 2 ahlength*sind(ahangle)*u rotated 90; + draw C {-u} .. B .. A {u} + withcolor col withpen pencircle scaled w dashed dash; +enddef; + +def diag_draw_arrow_mapsto(suffix a,b)(expr curved, w, col, dash) = + p = a.c .. + (1/2 [a.c,b.c] + curved*unitvector(b.c-a.c) rotated 90) + .. b.c; + pp := p cutbefore bpath.a cutafter bpath.b; + draw pp + withcolor col withpen pencircle scaled w dashed dash; + draw diag_arrow_head (pp, length(pp)) + withcolor col withpen pencircle scaled w; + draw diag_arrow_bar (pp, 0) + withcolor col withpen pencircle scaled w; +enddef; + +def diag_draw_arrow_half_dotted(suffix a,b)(expr curved, w, col, dash) = + p = a.c .. + (1/2 [a.c,b.c] + curved*unitvector(b.c-a.c) rotated 90) + .. b.c; + pp := p cutbefore bpath.a cutafter bpath.b; + draw subpath(0,1) of pp + withcolor col withpen pencircle scaled w dashed withsmalldots; + draw subpath(1,2) of pp + withcolor col withpen pencircle scaled w; + draw diag_arrow_head (pp, length(pp)) + withcolor col withpen pencircle scaled w; +enddef; + +%% Fin des flèches + +def color_to_string (expr a) = + "("& + decimal(redpart a) + &","& + decimal(greenpart a) + &","& + decimal(bluepart a) + &")" +enddef; + +def enddiag = + save i,j,k,l,mm,a,A,p,b; + for i=0 upto _diag_x_max: + for j=0 upto _diag_y_max: + if known _diag[i][j]: + circleit.a[i][j]( _diag[i][j] ); + a[i][j].dx = a[i][j].dy; + a[i][j].c = 1cm * (i,-j); + drawunboxed( a[i][j] ); + fi; + endfor; + endfor; + for m=0 upto _diag_ar_n: + % Vérifier que le but existe + i := xpart _diag_ar_source[m]; + j := ypart _diag_ar_source[m]; + k := xpart _diag_ar_but[m]; + l := ypart _diag_ar_but[m]; + + % On trace la flèche. Le chemin est mis dans la variable p. + path p,pp; + if unknown _diag_ar_shape[m]: _diag_ar_shape[m] := "default" fi; + if unknown _diag_ar_color[m]: _diag_ar_color[m] := black fi; + if unknown _diag_ar_width[m]: _diag_ar_width[m] := .5bp fi; + if unknown _diag_ar_curved[m]: _diag_ar_curved[m] := 0 fi; + if unknown _diag_ar_dashed[m]: _diag_ar_dashed[m] := notdashed fi; + % On ne peut PAS utiliser m dans une chaîne ce caractères que l'on donne + % à scantokens, car m est une variable de boucle. C'est vraiment spécial, + % une variable de boucle. + mm := m; + scantokens( + "diag_draw_arrow_"& _diag_ar_shape[m] + &"(" + &"a[i][j], a[k][l],_diag_ar_curved[mm],_diag_ar_width[mm]," + &"_diag_ar_color[mm],_diag_ar_dashed[mm]" + &");" + ); + + % On écrit des choses au dessus ou au dessous des flèches + pair A; + A = point 1/2 length(p) of p; + if known _diag_ar_up[m]: + boxit.b[m](_diag_ar_up[m]); + b[m].c = A + 4bp*unitvector(direction 1/2 length(p) of p rotated 90); + drawunboxed(b[m]); + fi; + if known _diag_ar_down[m]: + boxit.c[m](_diag_ar_down[m]); + c[m].c = A + 4bp*unitvector(direction 1/2 length(p) of p rotated -90); + drawunboxed(c[m]); + fi; + endfor; + endgroup; +enddef; + + begindiag; + node "A"; + rarrowto(1,0, "above" => "a", + "shape" => "middle", + "curved" => 3mm, + "dashed" => withsmalldots); + rarrowto(0,1, "below" => "b", + "color" => blue, + "shape" => "mapsto", + "dashed" => evenly); + node "A"; + rarrowto(1,0, "above" => "c", "width" => 1bp, "shape" => "inj"); + rarrowto(0,1, "below" => "d", "shape" => "mono"); + node "A"; + nextline; + node "A"; + rarrowto(1,0, "below" => "e", "shape" => "epi"); + node "A"; + rarrowto(1,-1, "below" => "f", "curved" => -3mm, "shape" => "half_dotted"); + enddiag; +endfig; +beginfig(270) + draw begingraph(3cm,2cm) + gdraw "data1"; + endgraph; + +endfig; +beginfig(271) + draw begingraph(3cm,2cm) + gdraw "data1" withpen pencircle scaled 2bp; + endgraph; +endfig; +beginfig(272) + draw begingraph(3cm,2cm) + gdraw "data1" dashed evenly; + endgraph; +endfig; +beginfig(273) + draw begingraph(3cm,2cm) + gdraw "data1" withcolor red; + endgraph; +endfig; +beginfig(274) + draw begingraph(3cm,2cm) + gdraw "data1" withpen pencircle scaled 2bp; + gdraw "data2" ; + endgraph; +endfig; +beginfig(275) + draw begingraph(3cm,2cm) + gdraw "data1" ; + gdraw "data2" dashed evenly; + gdraw "data3" dashed withdots; + endgraph; +endfig; +beginfig(276) + draw begingraph(3cm,2cm) + gdraw "data1" withcolor red; + gdraw "data2" withcolor blue; + endgraph; +endfig; +beginfig(277) + draw begingraph(3cm,2cm) + gdraw "data1" plot btex $\bullet$ etex; + endgraph; + +endfig; +beginfig(278) + picture gros_point; + draw (0,0) withpen pencircle scaled 4bp; + gros_point := currentpicture; + currentpicture := nullpicture; + draw begingraph(3cm,2cm) + gdraw "data1" plot gros_point; + endgraph; +endfig; +beginfig(279) + picture gros_point; + gros_point := nullpicture; + addto gros_point doublepath (0,0) + withpen pencircle scaled 4bp; + draw begingraph(3cm,2cm) + gdraw "data1" plot gros_point; + endgraph; +endfig; +beginfig(280) + picture croix; + croix := nullpicture; + addto croix doublepath (-2bp,2bp)--(2bp,-2bp) + withpen pencircle scaled 1bp; + addto croix doublepath (-2bp,-2bp)--(2bp,2bp) + withpen pencircle scaled 1bp; + picture gros_carre; + gros_carre := nullpicture; + addto gros_carre contour unitsquare shifted (-.5,-.5) scaled 2bp; + + draw begingraph(3cm,2cm) + gdraw "data1"; + gdraw "data1" plot croix; + gdraw "data2"; + gdraw "data2" plot gros_carre; + endgraph; +endfig; +beginfig(281) + draw begingraph(3cm,2cm) + gdata("data1", + v, + glabel(gros_point, v1, v2); + ); + endgraph; + +endfig; +beginfig(282) + draw begingraph(3cm,2cm) + path p; + gdata("data1", + v, + augment.p(v1,v2); + ); + gdraw p; + endgraph; + +endfig; +beginfig(283) + interim linecap := squared; + interim linejoin := mitered; + draw begingraph(3cm,2cm) + path p; + gdata("data1", + v, + augment.p(v1,v2); + ); + gdraw p withpen pencircle scaled 2bp; + gdraw p withpen pencircle scaled 1bp withcolor .8white; + endgraph; +endfig; +beginfig(284) + draw begingraph(3cm,2cm) + gdata("data1", + v, + path p; + augment p (v1,0); + augment p (v1,v2); + gdraw p; + ); + endgraph; +endfig; +beginfig(285) + draw begingraph(3cm,2cm) + gdata("data1", + v, + path p; + augment p (v1,0); + augment p (v1,v2); + gdraw p withpen pencircle scaled 4bp; + ); + endgraph; +endfig; +beginfig(286) + interim linecap:=2; + draw begingraph(3cm,2cm) + gdata("data1", + v, + path p; + augment p (v1,0); + augment p (v1,v2); + gdraw p withpen pencircle scaled 4bp; + ); + endgraph; +endfig; +beginfig(287) + draw begingraph(3cm,2cm) + gdata("data1", v, + path p; + augment p (v1,0); + augment p (v1,v2); + augment p (v1 Sadd "1",v2); + augment p (v1 Sadd "1",0); + gdraw p--cycle; + ); + endgraph; +endfig; +beginfig(288) + draw begingraph(3cm,2cm) + gdata("data1", v, + path p; + augment p (v1,0); + augment p (v1,v2); + augment p (v1 Sadd "1",v2); + augment p (v1 Sadd "1",0); + gfill p--cycle withcolor .8white; + gdraw p--cycle; + ); + endgraph; +endfig; +beginfig(289) + draw begingraph(3cm,2cm) + gdata("data1", v, + + % Le dessus + path p; + augment p (v1,v2); + augment p (v1 Sadd "1",v2); + augment p (v1 Sadd "1.5", v2 Sadd "10"); + augment p (v1 Sadd ".5", v2 Sadd "10"); + gfill p--cycle withcolor white; + gdraw p--cycle; + + % Le côté + path p; + augment p (v1 Sadd "1",0); + augment p (v1 Sadd "1",v2); + augment p (v1 Sadd "1.5", v2 Sadd "10"); + augment p (v1 Sadd "1.5", "10"); + gfill p--cycle withcolor .5white; + gdraw p--cycle; + + % Le devant + path p; + augment p (v1,0); + augment p (v1,v2); + augment p (v1 Sadd "1",v2); + augment p (v1 Sadd "1",0); + gfill p--cycle withcolor .8white; + gdraw p--cycle; + + ); + endgraph; +endfig; +beginfig(290) + draw begingraph(3cm,2cm) + path p,q; + gdata("data1", v, + augment.p(v1,v2); + ); + q:= (xpart point 0 of p, 0) -- p -- + (xpart point length(p) of p, 0) -- cycle; + gfill q withcolor .8white; + gdraw p withpen pencircle scaled 2bp; + endgraph; +endfig; +beginfig(291) + draw begingraph(3cm,2cm) + gdata("data1", + v, + path p; + augment p ("0", i); + augment p (v2, i); + augment p (v2, i Sadd ".5"); + augment p (0, i Sadd ".5"); + gfill p--cycle withcolor .8white; + gdraw p--cycle; + ); + autogrid(otick.bot,); + endgraph; +endfig; +beginfig(292) + draw begingraph(3cm,2cm) + gdraw "data1"; + glabel.bot(btex Abscisse etex, OUT); + glabel.lft(btex Ordonnée etex, OUT); + endgraph; + +endfig; +beginfig(293) + draw begingraph(3cm,2cm) + gdraw "data1" withcolor red; + glabel.lft(btex 1 etex, 8); + gdraw "data2" withcolor blue; + glabel.bot(btex 2 etex, 9); + endgraph; + +endfig; +beginfig(294) + draw begingraph(3cm,2cm) + gdraw "data1"; + glabel.bot(btex Abscisse etex, OUT); + glabel.lft(btex Ordonnée etex rotated 90, OUT); + endgraph; +endfig; +beginfig(295) + % La légende + color couleur[]; + couleur[0] := red; + couleur[1] := green; + couleur[2] := blue; + picture p[], legende; + legende := nullpicture; + for i=0 upto 2: + p[i] := nullpicture; + addto p[i] also TEX("Courbe " & decimal(i+1)) + withcolor couleur[i]; + addto legende doublepath ( (0,0)--(5mm,0) ) + shifted (0, -5mm*i) + withpen currentpen withcolor couleur[i]; + addto legende also p[i] + shifted 1/2(lrcorner p[i] - ulcorner p[i]) + shifted (0, -5mm*i); + endfor; + % Les courbes + draw begingraph(3cm,2cm) + for i=1 upto 3: + gdraw "data" & decimal(i) withcolor couleur[i-1]; + endfor; + glabel.top(legende,OUT); + endgraph; +endfig; +beginfig(296) + draw begingraph(3cm,2cm) + setcoords(-linear,log); + gdraw "data1"; + endgraph; + +endfig; +beginfig(297) + draw begingraph(3cm,2cm) + gdraw "data1"; + endgraph; + +endfig; +beginfig(298) + draw begingraph(3cm,2cm) + setrange( (whatever,0), (whatever,whatever) ); + gdraw "data1"; + endgraph; + +endfig; +beginfig(299) + draw begingraph(3cm,2cm) + setrange(whatever, 0, whatever, whatever); + gdraw "data1"; + endgraph; + +endfig; +beginfig(300) + vardef TEX primary s = + write "verbatimtex" to "mptextmp.mp"; + write "\documentclass[12pt]{article}" to "mptextmp.mp"; + write "\usepackage[T1]{fontenc}" to "mptextmp.mp"; + write "\usepackage{amsmath,amssymb}" to "mptextmp.mp"; + write "\begin{document}" to "mptextmp.mp"; + write "etex" to "mptextmp.mp"; + write "btex "&s&" etex" to "mptextmp.mp"; + write EOF to "mptextmp.mp"; + scantokens "input mptextmp" + enddef; + vardef mylabel(expr pic, p, t) = + save A; pair A; + A = point t of p + + 8bp * unitvector(direction t of p) rotated 90; + label(pic, A); + enddef; + path p; u:=1cm; + p = (0,0)..(-u,u)..(u,u); + draw p; + for i=0 step .2 until length(p): + draw point i of p withpen pencircle scaled 4bp; + mylabel(TEX("$"&decimal(round(5*i))&"$"),p,i); + endfor; + +endfig; +beginfig(301) + path p; + p := subpath(1,3) of fullcircle scaled 2cm; + interim linejoin := mitered; + interim linecap := butt; + + interim ahangle := 30; + drawarrow p withpen pencircle scaled 2bp; + + interim ahangle := 45; + drawarrow p shifted (0,-5mm) withpen pencircle scaled 2bp; + + interim ahangle := 60; + drawarrow p shifted (0,-10mm) withpen pencircle scaled 2bp; + +endfig; +beginfig(302) + path p; + p := subpath(1,3) of fullcircle scaled 2cm; + interim linejoin := mitered; + interim linecap := butt; + interim ahangle := 30; + + interim ahlength := 2bp; + drawarrow p withpen pencircle scaled 2bp; + + interim ahlength := 4bp; + drawarrow p shifted (0,-5mm) withpen pencircle scaled 2bp; + + interim ahlength := 6bp; + drawarrow p shifted (0,-10mm) withpen pencircle scaled 2bp; + +endfig; +beginfig(303) + draw TEX( "Nous sommes le "& + decimal(day) &"/"& + decimal(month) &"/"& + decimal(year) &"." ); + +endfig; +beginfig(304) + path p; + p := (0,0) -- (2cm,0); + def doit (suffix p)(expr t) = + begingroup + interim linecap := t; + draw p withpen pencircle scaled 5mm withcolor .8white; + endgroup; + draw point 0 of p withpen pencircle scaled 4bp; + draw point 1 of p withpen pencircle scaled 4bp; + p := p shifted (0,-7mm) + enddef; + doit(p,rounded); + doit(p,butt); + doit(p,squared); + +endfig; +beginfig(305) + path p; + p := (0,0) -- (1cm,5mm) -- (2cm,0); + def doit (suffix p)(expr t) = + begingroup + interim linejoin := t; + draw p withpen pencircle scaled 5mm withcolor .8white; + endgroup; + draw point 0 of p withpen pencircle scaled 4bp; + draw point 1 of p withpen pencircle scaled 4bp; + draw point 2 of p withpen pencircle scaled 4bp; + p := p shifted (0,-7mm) + enddef; + doit(p,rounded); + doit(p,mitered); + doit(p,beveled); + +endfig; +bye; diff --git a/Master/texmf-dist/doc/metapost/metapost-examples/mp2html.pl b/Master/texmf-dist/doc/metapost/metapost-examples/mp2html.pl new file mode 100644 index 00000000000..143e2314e0a --- /dev/null +++ b/Master/texmf-dist/doc/metapost/metapost-examples/mp2html.pl @@ -0,0 +1,170 @@ +#! perl -w + +# +# Builds an HTML file and a bunch of GIF files from a Metapost file +# Also creates a PS file +# +# (c) Vincent Zoonekynd +# August 1999 +# modified in august 2001 +# distributed under the GPL +# + +$main = $ARGV[0] || "examples"; +$main =~ s/\.mp$//i; + +# On crée les images GIF +# BUG : à chaque fois qu'il y a des fontes, ça plante. +# C'est normal pour deux raisons : +# - si j'utilisais prologuse:=2, il ne trouverait pas les fontes. +# - Comme j'utilise prologues:=0, c'est encore pire... +# L'idéal serait de créer un fichier LaTeX pour chaque fichier postscript, +# de lancer later puis dvips dessus et de récupérer le fichier postscript. + +# 1. Compile the examples + +system "TEX=latex mpost --interaction=nonstopmode $main"; + +# 2. Create a LaTeX file encompassing the examples and compile it + +open(LATEX,'>', "$main.tex") || die "Cannot open examples.tex for writing: $!"; +print LATEX '\documentclass[a4paper]{article}' ."\n"; +print LATEX '\usepackage{graphicx}' ."\n"; +print LATEX '\begin{document}' ."\n"; +print LATEX '\begin{verbatim}' ."\n"; +open(MP, "<", "$main.mp") || die "cannot open $main.mp for reading: $!"; +while(){ + if (m/^\s*beginfig\s*\((.*)\)/) { + print LATEX '\end{verbatim}' . "\n"; + print LATEX "\\includegraphics{${main}_$1.mps}\n"; + print LATEX '\begin{verbatim}' . "\n"; + print LATEX $_; + } elsif (m/^\s*endfig/) { + print LATEX $_; + print LATEX '\end{verbatim}' ."\n"; + print LATEX '\hrulefill' . "\n"; + print LATEX '\begin{verbatim}' . "\n"; + } else { + print LATEX $_; + } +} +print LATEX '\end{verbatim}' . "\n"; +print LATEX '\end{document}' ."\n"; +close MP; +close LATEX; + +opendir(DIR,"./") || die "Cannot open ./ directory for reading : $!"; +foreach $file (readdir DIR) { + if ($file =~ m/^$main.[0-9]+$/) { + my $new = $file; + $new =~ s/\./_/g; + $new .= ".mps"; + symlink $file, $new; + } +} +closedir(DIR); + +system "latex --interaction=nonstopmode $main.tex"; +system "dvips -o $main.ps $main.dvi"; +#system "pdflatex --interaction=nonstopmode $main.tex"; + +# 3. Create the GIF pictures + +opendir(DIR,"./") || die "Cannot open ./ directory for reading : $!"; +foreach $file (readdir DIR) { + if ($file =~ m/^$main.[0-9]+$/) { + + ## Création du fichier PS + symlink "$file", "$file.eps"; + open(TEX,">$file.tex") || die "cannot open $file.tex for writing : $!"; + print TEX '\nonstopmode' ."\n" ; + print TEX '\documentclass[a4paper,10pt]{article}' ."\n" ; + print TEX '\usepackage[T1]{fontenc}\usepackage[latin1]{inputenc}' ."\n" ; + print TEX '\usepackage{graphicx,amsmath,amssymb}' ."\n" ; + print TEX '\pagestyle{empty}' ."\n" ; + print TEX '\begin{document}' ."\n" ; + print TEX '\includegraphics{'. "$file.eps" .'}' ."\n" ; + print TEX '\end{document}' ."\n" ; + close TEX; + system "latex $file.tex"; + system "dvips -E -f $file.dvi -o $file.ps"; + + ## Transformation en GIF + my ($bbx,$bby,$bbw,$bbh); + open(PS,"$file.ps"); + while () { + if (/^%%BoundingBox:\s+(-?\d+)\s+(-?\d+)\s+(-?\d+)\s+(-?\d+)/) { + $bbx = 0-$1; $bby = 0-$2; + $bbw = $3+$bbx; $bbh = $4+$bby; +# print "*** Seen BBOX\n"; + } + last if /^%%EndComments/; + } + close(PS); + + my $scale = 3; + my $density = 72*$scale; + $bbw = $scale * $bbw; + $bbh = $scale * $bbh; +# print "*** gs -q -dNOPAUSE -dNO_PAUSE -sDEVICE=ppmraw -g${bbw}x${bbh} -r$density -sOutputFile=$file.ppm\n"; + open(GS, "|gs -q -dNOPAUSE -dNO_PAUSE -sDEVICE=ppmraw -g${bbw}x${bbh} -r$density -sOutputFile=$file.ppm"); + print GS "$bbx $bby translate\n"; + print GS "($file.ps) run\n"; + print GS "showpage\n"; + print GS "quit\n"; + close(GS); + + system("pnmcrop $file.ppm | ppmquant 256 | ppmtogif > $file.gif"); + + unlink "$file.ppm"; + } +} + + +# 4. Create the HTML file +open(MP,"$main.mp") || die "cannot open $main.mp for reading: $!"; +open(HTML,">$main.html") || die "cannot open $main.html for writing: $!"; +select HTML; +print "Metapost : exemples\n"; +print "

Métapost : exemples

\n"; +print "
\n";
+while(){
+  if (m/^\s*beginfig\s*\((.*)\)/) {
+    print "
\n";
+    print ;
+  } elsif (m/^\s*endfig/) {
+    print;
+    print "

\n";
+  } else {
+    print;
+  }
+}
+print "
\n"; +print "\n"; +close HTML; +close MP; + +# 5. Remove unnecessary files + +opendir(DIR,"./") || die "Cannot open ./ directory for reading : $!"; +foreach $file (readdir DIR) { + if ($file =~ m/^$main.[0-9]+$/) { + unlink $file; + unlink "$file.tex"; + unlink "$file.dvi"; + unlink "$file.aux"; + unlink "$file.log"; + unlink "$file.eps"; + unlink "$file.ps"; + my $new = $file; + $new =~ s/\./_/g; + $new .= ".mps"; + unlink $new; + } elsif( $file =~ m/\.mpx$/ ) { + unlink $file; + } +} +closedir DIR; +unlink "$main.aux"; +unlink "$main.log"; + diff --git a/Master/texmf-doc/doc/english/metapost-examples/Makefile b/Master/texmf-doc/doc/english/metapost-examples/Makefile deleted file mode 100644 index f2300310718..00000000000 --- a/Master/texmf-doc/doc/english/metapost-examples/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -METAPOST = mpost --interaction=nonstopmode - -all: - perl mp2html.pl - -old_all: - TEX=latex $(METAPOST) examples.mp - -clean: - rm -f examples.[0-9] examples.[0-9][0-9] examples.[0-9][0-9][0-9] *.mps - rm -f examples.tex examples.ps examples.dvi examples.pdf - rm -f *.dvi *.aux *.log *\~ - rm -f mpxerr.* *.mpx mptextmp.* - rm -f nohup.out - -cleanse: clean - rm -f examples.[0-9].gif examples.[0-9][0-9].gif examples.[0-9][0-9][0-9].gif - rm -f examples.[0-9].eps examples.[0-9][0-9].eps examples.[0-9][0-9][0-9].eps - rm -f examples.[0-9].ps examples.[0-9][0-9].ps examples.[0-9][0-9][0-9].ps - rm -f examples.[0-9].tex examples.[0-9][0-9].tex examples.[0-9][0-9][0-9].tex - rm -f examples.html diff --git a/Master/texmf-doc/doc/english/metapost-examples/README b/Master/texmf-doc/doc/english/metapost-examples/README deleted file mode 100644 index a884163d656..00000000000 --- a/Master/texmf-doc/doc/english/metapost-examples/README +++ /dev/null @@ -1,21 +0,0 @@ -These are a few (hundred) example pictures drawn with -metapost, ranging from very simple (lines and circles) -to rather intricate (uncommon geometric transformations, -fractals, bitmap, etc.). - -README this file -data1 sample data file (for plot drawings) -data2 -data3 -examples.mp The examples -mptohtml.pl A perl script that turns the examples into a PostScript - file and into an HTML file and GIF pictures - The resulting (huge) Web page may be seen here: - http://www.math.jussieu.fr/~zoonek/LaTeX/Metapost/metapost.html -Makefile runs the above script - -Vincent Zoonekynd -August 1999 -Updated august 2001 -Version 0.01 -Distributed under the GPL (see http://www.gnu.org/copyleft/gpl.html for details) diff --git a/Master/texmf-doc/doc/english/metapost-examples/data1 b/Master/texmf-doc/doc/english/metapost-examples/data1 deleted file mode 100644 index 24092f087bb..00000000000 --- a/Master/texmf-doc/doc/english/metapost-examples/data1 +++ /dev/null @@ -1,11 +0,0 @@ -0 82 -1 90 -2 100 -3 97 -4 70 -5 75 -6 93 -7 103 -8 115 -9 121 -10 119 diff --git a/Master/texmf-doc/doc/english/metapost-examples/data2 b/Master/texmf-doc/doc/english/metapost-examples/data2 deleted file mode 100644 index c934e72a70b..00000000000 --- a/Master/texmf-doc/doc/english/metapost-examples/data2 +++ /dev/null @@ -1,11 +0,0 @@ -0 100 -1 95 -2 85 -3 80 -4 83 -5 90 -6 88 -7 96 -8 99 -9 100 -10 105 diff --git a/Master/texmf-doc/doc/english/metapost-examples/data3 b/Master/texmf-doc/doc/english/metapost-examples/data3 deleted file mode 100644 index 7e54a066ff7..00000000000 --- a/Master/texmf-doc/doc/english/metapost-examples/data3 +++ /dev/null @@ -1,11 +0,0 @@ -0 125 -1 119 -2 123 -3 104 -4 81 -5 94 -6 90 -7 88 -8 85 -9 89 -10 90 diff --git a/Master/texmf-doc/doc/english/metapost-examples/examples.mp b/Master/texmf-doc/doc/english/metapost-examples/examples.mp deleted file mode 100644 index 7a156f03deb..00000000000 --- a/Master/texmf-doc/doc/english/metapost-examples/examples.mp +++ /dev/null @@ -1,4896 +0,0 @@ -warningcheck:=0; - -input rboxes; -input sarith; -input graph; - -verbatimtex -\documentclass[a4paper,12pt]{article} -\usepackage[T1]{fontenc} -\usepackage[latin1]{inputenc} -\begin{document} -etex - -vardef TEX primary s = - write "verbatimtex" to "mptextmp.mp"; - write "\documentclass[12pt]{article}" to "mptextmp.mp"; - write "\usepackage[T1]{fontenc}" to "mptextmp.mp"; - write "\usepackage{amsmath,amssymb}" to "mptextmp.mp"; - write "\begin{document}" to "mptextmp.mp"; - write "etex" to "mptextmp.mp"; - write "btex "&s&" etex" to "mptextmp.mp"; - write EOF to "mptextmp.mp"; - scantokens "input mptextmp" -enddef; - -vardef longueur(expr p) = - save l,i; - numeric l; - l:=0; - for i=0 step .01 until length(p): - l:=l+abs( (point i of p) - (point(i+.01) of p) ); - endfor; - l % Pas de point-virgule -enddef; - -vardef milieu(expr p) = - save l,i,tot,A,B; - numeric l,tot,i; - pair A,B; - tot := longueur(p); - l:=0; - B := point 0 of p; - for i:=0 step .01 until length(p): - A := B; - B := point i of p; - l := l+abs(B-A); - exitif l > 1/2 tot; - endfor; - show l; show tot; - 1/2[A,B] -enddef; - -vardef milieu_time(expr p) = - save l,i,tot,A,B,t; - numeric l,tot,i,t; - pair A,B; - tot := longueur(p); - l:=0; - B := point 0 of p; - for i:=0 step .01 until length(p): - t:=i; - A := B; - B := point i of p; - l := l+abs(B-A); - exitif l > 1/2 tot; - endfor; - t -enddef; - -beginfig(1) - pair A, B, C; - A:=(0,0); B:=(1cm,0); C:=(0,1cm); - draw A--B--C; - -endfig; -beginfig(2) - pair A, B, C; - A:=(0,0); B:=(1cm,0); C:=(0,1cm); - draw A--B--C--cycle; - -endfig; -beginfig(3) - pair A[]; - A[0]:=(-1cm, -1cm); - A[1]:=( 1cm, -1cm); - A[2]:=( 1cm, 1cm); - A[3]:=(-1cm, 1cm); - draw A[0]--A[1]--A[2]--A[3]--cycle; - draw A[0]--A[2]; - draw A[1]--A[3]; -endfig; -beginfig(4) - pair A; - A:=(0,0); B:=(1cm,0); C:=(0,1cm); - draw A withpen pencircle scaled 4bp; - -endfig; -beginfig(5) - pair A, B, C; - A:=(0,0); B:=(1cm,0); C:=(0,1cm); - draw A--B--C--cycle; - draw A withpen pencircle scaled 4bp; - draw B withpen pencircle scaled 4bp; - draw C withpen pencircle scaled 4bp; -endfig; -beginfig(6) - pair A, B, C, D; - A:=(0,0); B:=(1cm,0); - C:=(1cm,1cm); D:=(0,1cm); - draw A--B--C--D--cycle; - draw A--C; - draw B--D; - draw A withpen pencircle scaled 4bp; - draw B withpen pencircle scaled 4bp; - draw C withpen pencircle scaled 4bp; - draw D withpen pencircle scaled 4bp; -endfig; -beginfig(7) - pair A, B, C; - A:=(0,0); B:=(1cm,0); C:=(0,1cm); - draw A--B--C--cycle; - draw 1/2[A,B] -- C; - draw 1/2[B,C] -- A; - draw 1/2[C,A] -- B; -endfig; -beginfig(8) - pair A, B, C; - A:=(0,0); B:=(1cm,0); C:=(0,1cm); - draw A--B--C--cycle; - draw 1/2[A,B] -- C; - draw 1/2[B,C] -- A; - draw 1/2[C,A] -- B; - draw 1/3 A + 1/3 B + 1/3 C - withpen pencircle scaled 4bp; -endfig; -beginfig(9) - pair A, B, C; - A:=(0,0); B:=(1cm,0); C:=(0,1cm); - draw A--B--C--cycle; - draw A--B withpen pencircle scaled 2bp; - -endfig; -beginfig(10) - pair A, B, C; - A:=(0,0); B:=(1cm,0); C:=(0,1cm); - draw A--B--C--cycle; - draw A--B withcolor (green + red); - -endfig; -beginfig(11) - pair A, B, C; - A:=(0,0); B:=(1cm,0); C:=(0,1cm); - draw A--B; - draw B--C dashed evenly; - draw C--A dashed withdots; - -endfig; -beginfig(12) - pair A, B, C; - A:=(0,0); B:=(1cm,0); C:=(0,1cm); - draw A--B withpen pencircle scaled 2bp withcolor .8white; - draw B--C withpen pencircle scaled 2bp withcolor .6white; - draw C--A withpen pencircle scaled 2bp withcolor .4white; - -endfig; -beginfig(13) - pair A, B, C; - A:=(0,0); B:=(1cm,0); C:=(0,1cm); - draw A--B--C--cycle; - draw 1/2[A,B] -- C dashed evenly; - draw 1/2[B,C] -- A dashed evenly; - draw 1/2[C,A] -- B dashed evenly; - draw 1/3 A + 1/3 B + 1/3 C - withpen pencircle scaled 4bp - withcolor red; -endfig; -beginfig(14) - draw (0,0)--(3cm,0) dashed evenly scaled 2; - draw (0,-5mm)--(3cm,-5mm) dashed evenly; - -endfig; -beginfig(15) - draw (0,0)--(3cm,0) - dashed dashpattern(on 2bp off 3bp); - -endfig; -beginfig(16) - draw (0,0)--(3cm,0) dashed dashpattern(on 1bp off 2bp on 10bp off 2bp); -endfig; -beginfig(17) - pair A, B, C; - A:=(0,0); B:=(1cm,0); C:=(0,1cm); - drawarrow C--B--A; - drawarrow A--C withpen pencircle scaled 2bp; - -endfig; -beginfig(18) - pair A, B, C; - A:=(0,0); B:=(1cm,0); C:=(0,1cm); - draw C--B--A--cycle; - drawdblarrow A--C withpen pencircle scaled 2bp; - -endfig; -beginfig(19) - draw (-1.5cm,0)--(1.5cm,0); - draw (0,-1.5cm)--(0,1.5cm); - drawarrow (0,0)--(1cm,0) - withpen pencircle scaled 2bp; - drawarrow (0,0)--(0,1cm) - withpen pencircle scaled 2bp; -endfig; -beginfig(20) - pair A, B, C; - A:=(0,0); B:=(1cm,0); C:=(0,1cm); - fill A--B--C--cycle withcolor .8 white; - -endfig; -beginfig(21) - pair A, B, C; - A:=(0,0); B:=(1cm,0); C:=(0,1cm); - fill A--B--C--cycle withcolor .8 white; - draw A--B--C--cycle; - -endfig; -beginfig(22) - pair A, B, C; - A:=(0,0); B:=(1cm,0); C:=(0,1cm); - fill A--B--C--cycle withcolor .8 white; - draw A--B--C--cycle withpen pencircle scaled 2bp; -endfig; -beginfig(23) - pair A, B, C; - A:=(0,0); B:=(1cm,0); C:=(0,1cm); - draw A--B--C--cycle withpen pencircle scaled 2bp; - fill A--B--C--cycle withcolor .8 white; -endfig; -beginfig(24) - pair A, B, C, D; - A:=(0,0); B:=(1cm,0); - C:=(1cm,1cm); D:=(0,1cm); - fill A--C--B--D--cycle withcolor .8white; -endfig; -beginfig(25) - pair A, B, C, D; - A:=(0,0); B:=(1cm,0); - C:=(1cm,1cm); D:=(0,1cm); - path p; - p := A--C--B--D--cycle; - fill p withcolor .8white; - draw p; -endfig; -beginfig(26) - pair A, B, C, D; - A:=(-1.5cm,-1.5cm); B:=(1.5cm,-1.5cm); - C:=(1.5cm,1.5cm); D:=(-1.5cm,1.5cm); - fill A--C--B--D--cycle withcolor .8white; - draw (-1.5cm,0)--(1.5cm,0); - draw (0,-1.5cm)--(0,1.5cm); - drawarrow (0,0)--(1cm,0) - withpen pencircle scaled 2bp; - drawarrow (0,0)--(0,1cm) - withpen pencircle scaled 2bp; -endfig; -beginfig(27) - pair A; - A := (0,0); - draw A withpen pencircle scaled 4bp; - label.top(btex Au dessus etex, A); - label.bot(btex En dessous etex, A); - label.rt (btex À droite etex, A); - label.lft(btex À gauche etex, A); - -endfig; -beginfig(28) - pair A; - A := (0,0); - draw A withpen pencircle scaled 4bp; - label.ulft(btex En haut à gauche etex, A); - label.urt (btex En haut à droite etex, A); - label.llft(btex En bas à gauche etex, A); - label.lrt (btex En bas à droite etex, A); - -endfig; -beginfig(29) - pair A; - A := (0,0); - dotlabel.urt(btex $A$ etex, A); - -endfig; -beginfig(30) - pair A, B, C; - A:=(0,0); B:=(1cm,0); C:=(0,1cm); - draw A--B--C--cycle; - dotlabel.llft(btex $A$ etex, A); - dotlabel.lrt(btex $B$ etex, B); - dotlabel.top(btex $C$ etex, C); -endfig; -beginfig(31) - pair A, B, C; - A:=(0,0); B:=(1cm,0); C:=(0,1cm); - draw A--B--C--cycle; - label.bot(btex $1$ etex, 1/2[A,B]); - label.lft(btex $1$ etex, 1/2[A,C]); - label.urt(btex $\sqrt 2$ etex, 1/2[B,C]); -endfig; -beginfig(32) - u:=1cm; - pair A,B,C,D,E,F,G; - A := (-u,u); - B := (0,u); - C := (u,u); - D := (-u,0); - E := (0,0); - F := (u,0); - draw A--D; draw A--E; draw A--F; - draw B--D; draw B--E; draw B--F; - draw C--D; draw C--E; draw C--F; - dotlabel.top(btex $a$ etex, A); - dotlabel.top(btex $b$ etex, B); - dotlabel.top(btex $c$ etex, C); - dotlabel.bot(btex $a'$ etex, D); - dotlabel.bot(btex $b'$ etex, E); - dotlabel.bot(btex $c'$ etex, F); -endfig; -beginfig(33) - draw fullcircle; - -endfig; -beginfig(34) - draw (0,0) withpen pencircle scaled 4bp; - draw fullcircle scaled 1cm; - -endfig; -beginfig(35) - draw (0,0) withpen pencircle scaled 4bp; - draw fullcircle scaled 1cm shifted (1cm,1cm); - -endfig; -beginfig(36) - pair A, B, C; - A:=(0,0); B:=(1cm,0); C:=(0,1cm); - draw A--B--C--cycle; - fill fullcircle scaled 4bp shifted A withcolor white; - fill fullcircle scaled 4bp shifted B withcolor white; - fill fullcircle scaled 4bp shifted C withcolor white; - draw fullcircle scaled 4bp shifted A; - draw fullcircle scaled 4bp shifted B; - draw fullcircle scaled 4bp shifted C; -endfig; -beginfig(37) - draw (0,0) .. (0,1cm) .. (1cm,0) .. (1cm,1cm); - draw (0,0) withpen pencircle scaled 4bp; - draw (0,1cm) withpen pencircle scaled 4bp; - draw (1cm,0) withpen pencircle scaled 4bp; - draw (1cm,1cm) withpen pencircle scaled 4bp; - -endfig; -beginfig(38) - draw (0,0) -- (0,1cm) .. (1cm,0) .. (1cm,1cm); - -endfig; -beginfig(39) - draw (0,0) --- (0,1cm) .. (1cm,0) .. (1cm,1cm); - -endfig; -beginfig(40) - draw (0,0) .. (0,1cm) .. (1cm,0) .. (1cm,1cm) - .. cycle; - -endfig; -beginfig(41) - pair A, B, C, D; - A:=(0,0); B:=(1cm,0); - C:=(1cm,1cm); D:=(0,1cm); - draw A..B..C..D..cycle; -endfig; -beginfig(42) - draw (0,0) .. (1cm,1cm) .. cycle; -endfig; -beginfig(43) - draw (0,0){(0,1)} .. (2cm,0){(1,0)}; - -endfig; -beginfig(44) - draw (0,0){dir 90} .. (2cm,0){dir 0}; - -endfig; -beginfig(45) - draw (0,0){up} .. (2cm,0){right}; - -endfig; -beginfig(46) - draw (0,0){up} .. (2cm,0){up}; -endfig; -beginfig(47) - draw (0,0){up} .. (2cm,0){up} .. cycle; -endfig; -beginfig(48) - alpha := 30; - draw (0,0) -- 2cm*dir 0; - draw (0,0) -- 2cm*dir alpha; - draw 1cm * dir 0 {dir 90} .. - 1cm * dir alpha {dir(90+alpha)}; -endfig; -beginfig(49) - alpha := 30; - draw (0,0) -- 2cm*dir 0; - draw (0,0) -- 2cm*dir alpha; - draw 1cm * dir 0 {dir 90} .. - 1cm * dir alpha {dir(90+alpha)}; - draw 1.1cm * dir 0 {dir 90} .. - 1.1cm * dir alpha {dir(90+alpha)}; -endfig; -beginfig(50) - def draw_angle(expr A, O, B, n) = - draw_angle_(A,O,B,5mm); - if n>1 : draw_angle_(A,O,B,4.5mm); fi; - if n>2 : draw_angle_(A,O,B,4mm); fi; - if n>3 : draw_angle_(A,O,B,5.5mm); fi; - enddef; - def draw_angle_(expr A,O,B,d) = - draw (O + d*unitvector(A-O)) - { d*unitvector(A-O) rotated 90 } - .. - { d*unitvector(B-O) rotated 90 } - (O + d*unitvector(B-O)); - enddef; - pair A, B, C; - A := (0,0); - B := (3cm,0); - C := (1cm,2cm); - draw A--B--C--cycle; - draw_angle(B,A,C,1); - draw_angle(C,B,A,2); - draw_angle(A,C,B,3); -endfig; -beginfig(51) - u:=1cm; - path p; - p := (u,0){up}..(-u,0){down}--cycle; - fill p withcolor .8*white; - draw p withpen pencircle scaled 1bp; -endfig; -beginfig(52) - u:=1cm; - path p; - p := (u,0){up} .. - (-u,0){down} -- - (-.2u,0){up} .. - (.2u,0){down} -- - cycle; - fill p withcolor .8*white; - draw p withpen pencircle scaled 1bp; -endfig; -beginfig(53) - u:=1cm; - pair A,AA,B,BB,C,D; - A := ( .2u, .05u); - AA := ( .2u, -.05u); - B := ( u, .05u); - BB := ( u, -.05u); - C := (-.2u, 0); - D := ( -u, 0); - path p; - p:= B{up} .. D{down} .. BB{up} -- - AA{down} .. C{up} .. A{down} -- cycle; - fill p withcolor .8*white; - draw p withpen pencircle scaled 1bp; -endfig; -beginfig(54) - u:=1cm; - pair A,B,C,D; - A:=(0,0); - B:=u*dir 60; - C:=u*dir -60; - D:=(2u,0); - draw A withpen pencircle scaled 4bp; - draw B withpen pencircle scaled 4bp; - draw C withpen pencircle scaled 4bp; - draw D withpen pencircle scaled 4bp; - draw A--D--B--D--C; - draw A{up}..B; - draw A{down}..C; - draw A{dir 30}..B; - draw A{dir -30}..C; -endfig; -beginfig(55) - draw (0,0) .. (1cm,1cm) .. (2cm,0); - -endfig; -beginfig(56) - draw (0,0) .. tension 2 .. - (1cm,1cm) .. (2cm,0); - -endfig; -beginfig(57) - draw (0,u) {right} .. - ( u*dir -150 ){dir 120} .. - ( u*dir -30 ){dir -120} .. - cycle; -endfig; -beginfig(58) - draw (0,u) {right} .. tension 2 .. - ( u*dir -150 ){dir 120} .. tension 2 .. - ( u*dir -30 ){dir -120} .. tension 2 .. - cycle; -endfig; -beginfig(59) - draw (0,u) {right} .. tension 4 .. - ( u*dir -150 ){dir 120} .. tension 4 .. - ( u*dir -30 ){dir -120} .. tension 4 .. - cycle; -endfig; -beginfig(60) - u:=.5cm; - pair A,B,C,D; - A:=(0,0); B:=(-u,2u); - C:=(4u,3u); D:=(3u,0); - draw A.. controls B and C .. D - withpen pencircle scaled 2pt; - draw B--C dashed evenly; - drawarrow A--B; - drawarrow D--C; - -endfig; -beginfig(61) - pair A, B, C, D; - A = (0,0); - D = (2u,0); - B = (-u,2u); - C = (3u,3u); - - draw A withpen pencircle scaled 4bp; - draw B withpen pencircle scaled 4bp; - draw C withpen pencircle scaled 4bp; - draw D withpen pencircle scaled 4bp; - draw A .. controls B and C .. D; - - pair a[]; - a[1] := A; - a[2] := B; - a[3] := C; - a[4] := D; - - a[12] := 1/2 [ a[1], a[2] ]; - a[23] := 1/2 [ a[2], a[3] ]; - a[34] := 1/2 [ a[3], a[4] ]; - a[123] := 1/2 [ a[12], a[23] ]; - a[234] := 1/2 [ a[23], a[34] ]; - a[1234] := 1/2 [ a[123], a[234] ]; - - draw a[1234] withpen pencircle scaled 4bp; -endfig; -beginfig(62) -vardef bezier(expr n,A,B,C,D) = - save a; - pair a[]; - a[1] := A; - a[2] := B; - a[3] := C; - a[4] := D; - - a[12] := 1/2 [ a[1], a[2] ]; - a[23] := 1/2 [ a[2], a[3] ]; - a[34] := 1/2 [ a[3], a[4] ]; - a[123] := 1/2 [ a[12], a[23] ]; - a[234] := 1/2 [ a[23], a[34] ]; - a[1234] := 1/2 [ a[123], a[234] ]; - - if n>0: - bezier(n-1, a[1], a[12], a[123], a[1234]); - bezier(n-1, a[1234], a[234], a[34], a[4]); - else: - draw a[1234] withpen pencircle scaled 2bp; - fi; -enddef; - - pair A, B, C, D; - A = (0,0); - D = (2u,0); - B = (-u,2u); - C = (3u,3u); - - draw A withpen pencircle scaled 4bp; - draw B withpen pencircle scaled 4bp; - draw C withpen pencircle scaled 4bp; - draw D withpen pencircle scaled 4bp; - - bezier(5,A,B,C,D); -endfig; -beginfig(63) - draw (0,0){up} .. (1cm, 1mm) .. (2cm,0){down}; - -endfig; -beginfig(64) - draw (0,0){up} ... (1cm, 1mm) ... (2cm,0){down}; - -endfig; -beginfig(65) - draw (0,0){curl 0} .. (0,1cm)..(1cm,0)..(1cm,1cm); - -endfig; -beginfig(66) - draw (0,0){curl 1} .. (0,1cm)..(1cm,0)..(1cm,1cm); - -endfig; -beginfig(67) - draw (0,0){curl 2} .. (0,1cm)..(1cm,0)..(1cm,1cm); - -endfig; -beginfig(68) - pair A,B,C,D; - xpart A = ypart A = ypart B = xpart C = 0; - xpart B = ypart C = xpart D = ypart D = 2cm; - draw A--B--C--D--cycle withpen pencircle scaled 2bp; -endfig; -beginfig(69) - pair A,B,C,D,M; - numeric lambda, mu; - A=(0,0); B=(2cm,3cm); - C=(1cm,0); D=(-1cm,2cm); - M = lambda [A,B]; - M = mu [C,D]; - draw A--B; - draw C--D; - draw M withpen pencircle scaled 4bp; - -endfig; -beginfig(70) - pair A,B,C,D,M; - A=(0,0); B=(2cm,3cm); - C=(1cm,0); D=(-1cm,2cm); - M = whatever [A,B]; - M = whatever [C,D]; - draw A--B; - draw C--D; - draw M withpen pencircle scaled 4bp; - -endfig; -beginfig(71) - pair A,B,C,AA,BB,CC,G; - A=(0,0); B=(3cm,0); C=(1cm,2cm); - AA = 1/2 [B,C]; - BB = 1/2 [C,A]; - CC = 1/2 [A,B]; - G = whatever [A,AA]; - G = whatever [B,BB]; - draw A--B--C--cycle; - draw A--AA dashed withdots; - draw B--BB dashed withdots; - draw C--CC dashed withdots; - draw G withpen pencircle scaled 4bp; -endfig; -beginfig(72) - path p; - p := fullcircle scaled 5mm; - draw p; - draw p shifted (1mm,2mm); - draw p shifted 2(1mm,2mm); - draw p shifted 3(1mm,2mm); - draw p shifted 4(1mm,2mm); - draw p shifted 5(1mm,2mm); - -endfig; -beginfig(73) - path p; - p := (5mm,-5mm) {right} .. (2cm,0); - draw p; - draw p rotated 10; - draw p rotated 20; - draw p rotated 30; - draw p rotated 40; - draw p rotated 50; - draw p rotated 60; - draw p rotated 70; - draw p rotated 80; - draw p rotated 90; - -endfig; -beginfig(74) - path p; - p := fullcircle scaled 5mm; - draw p; - draw p xscaled 2; - draw p xscaled 3; - draw p xscaled 4; - -endfig; -beginfig(75) - pair A,B,C,D,E; - A := (1cm,0); - B := A rotated 72; - C := B rotated 72; - D := C rotated 72; - E := D rotated 72; - draw A--B--C--D--E--cycle; -endfig; -beginfig(76) - pair A,B,C,D,E; - A := (1cm,0); - B := A rotated 72; - C := B rotated 72; - D := C rotated 72; - E := D rotated 72; - draw A--C--E--B--D--cycle; -endfig; -beginfig(77) - pair A,B,C,D,E; - A := (1cm,0); - B := A rotated 72; - C := B rotated 72; - D := C rotated 72; - E := D rotated 72; - pair AA, BB, CC, DD, EE; - AA = whatever [A, C]; - AA = whatever [B, D]; - BB = whatever [B, D]; - BB = whatever [C, E]; - CC = whatever [C, E]; - CC = whatever [D, A]; - DD = whatever [D, A]; - DD = whatever [E, B]; - EE = whatever [E, B]; - EE = whatever [A, C]; - fill A--C--E--B--D--cycle withcolor .8white; - fill AA--BB--CC--DD--EE--cycle withcolor white; - draw A--C--E--B--D--cycle; -endfig; -beginfig(78) - path p; - p := (0,0) -- (1cm,0); - drawarrow p withpen pencircle scaled 2bp; - drawarrow p zscaled (1,2); - -endfig; -beginfig(79) - u:=1cm; - path p; p := (0,0) -- (u,0); - pair A; A := (u,-u); - numeric a; a := 90; - drawarrow p withpen pencircle scaled 1bp; - drawarrow p rotatedaround( A, a ); - drawarrow p shifted -A rotated a shifted A - withpen pencircle scaled 1bp dashed withdots; -endfig; -beginfig(80) - path p; p := (0,0) -- (u,0); - pair A; A := (u,-u); - numeric a; a := 90; - drawarrow p withpen pencircle scaled 1bp; - draw A withpen pencircle scaled 4bp; - label ulft ( btex $A$ etex, A ); - draw (0,0) withpen pencircle scaled 4bp; - label bot ( btex $O$ etex, (0,0) ); - for i=0 upto 10: - drawarrow p shifted -(i*A/10) withcolor red; - endfor; - for i=0 upto 10: - drawarrow p shifted -A rotated (i*a/10) withcolor green; - endfor; - for i=0 upto 10: - drawarrow p shifted -A rotated a shifted (i*A/10) withcolor blue; - endfor; -endfig; -beginfig(81) - pair A,B,C,AA,BB,CC,H; - A=(0,0); B=(3cm,0); C=(1cm,2cm); - AA - A = whatever * (B-C) rotated 90; - AA = whatever [B,C]; - BB - B = whatever * (A-C) rotated 90; - BB = whatever [A,C]; - CC - C = whatever * (A-B) rotated 90; - CC = whatever [A,B]; - H = whatever [A,AA]; - H = whatever [B,BB]; - draw A--B--C--cycle; - draw A--AA; - draw B--BB; - draw C--CC; - draw H withpen pencircle scaled 4bp; -endfig; -beginfig(82) - pair A,B,C,H; - A=(0,0); B=(3cm,0); C=(1cm,2cm); - H - A = whatever * (B-C) rotated 90; - H - B = whatever * (A-C) rotated 90; - draw A--B--C--cycle; - draw H withpen pencircle scaled 4bp; -endfig; -beginfig(83) - pair A,B,C,O; - A=(0,0); B=(3cm,0); C=(1cm,2cm); - O - 1/2[B,C] = whatever * (B-C) rotated 90; - O - 1/2[A,B] = whatever * (A-B) rotated 90; - draw A--B--C--cycle; - draw O withpen pencircle scaled 4bp; - draw fullcircle scaled 2abs(O-A) shifted O; -endfig; -beginfig(84) - pair A,B,C,D; - u:=2cm; - A=(0,0); B=(u,0); C=(u,u); D=(0,u); - - transform T; - A transformed T = 1/5[A,B]; - B transformed T = 1/5[B,C]; - C transformed T = 1/5[C,D]; - - path p; - p = A--B--C--D--cycle; - draw p; - draw p transformed T; - -endfig; -beginfig(85) - pair A,B,C,D; - u:=2cm; - A=(0,0); B=(u,0); C=(u,u); D=(0,u); - - transform T; - A transformed T = 1/5[A,B]; - B transformed T = 1/5[B,C]; - C transformed T = 1/5[C,D]; - - path p; - p = A--B--C--D--cycle; - for i=0 upto 100: - draw p; - p:= p transformed T; - endfor; - -endfig; -beginfig(86) - u:=1cm; - pair A,B,C,D,E; - A := (0,u); - B := A rotated 72; - C := B rotated 72; - D := C rotated 72; - E := D rotated 72; - transform T; - A transformed T = 1/5[A,B]; - B transformed T = 1/5[B,C]; - C transformed T = 1/5[C,D]; - path p; - p := A--B--C--D--E--cycle; - draw p; - p := p transformed T; draw p; - p := p transformed T; draw p; - p := p transformed T; draw p; -endfig; -beginfig(87) - u:=3mm; - fill fullcircle scaled 2u withcolor .8white; - fill fullcircle scaled u shifted (u*dir30) - withcolor .8white; - fill fullcircle scaled u shifted (u*dir150) - withcolor .8white; -endfig; -beginfig(88) - u:=3mm; - transform T; - (0,0) transformed T = (0,0); - (1,0) transformed T = (1,1); - (0,1) transformed T = (1,0); - - fill fullcircle scaled 2u transformed T withcolor .8white; - fill fullcircle scaled u shifted (u*dir30) transformed T - withcolor .8white; - fill fullcircle scaled u shifted (u*dir150) transformed T - withcolor .8white; -endfig; -beginfig(89) - u:=3mm; - transform T; - xpart T = ypart T = 0; - xxpart T = 1; - yxpart T = 2; - xypart T = 3; - yypart T = 4; - - fill fullcircle scaled 2u transformed T withcolor .8white; - fill fullcircle scaled u shifted (u*dir30) transformed T - withcolor .8white; - fill fullcircle scaled u shifted (u*dir150) transformed T - withcolor .8white; -endfig; -beginfig(90) - draw fullcircle scaled 1cm; - draw fullcircle scaled 5mm shifted (1cm*dir45); - draw fullcircle scaled 5mm shifted (1cm*dir135); - picture mypicture; - mypicture := currentpicture; - currentpicture := nullpicture; - draw mypicture; - draw mypicture shifted (1mm,1mm); - draw mypicture shifted (2mm,2mm); - -endfig; -beginfig(91) - picture pic; - pic := nullpicture; - addto pic contour fullcircle scaled 1cm - withcolor .8white; - addto pic doublepath fullcircle scaled 1cm - withpen pencircle scaled .5bp; - addto pic also pic shifted (1mm,1mm); - draw pic; - -endfig; -beginfig(92) - u:=3mm; - picture mickey; - mickey := nullpicture; - addto mickey contour fullcircle scaled 2u - withcolor .8white; - addto mickey contour fullcircle scaled u - shifted (u*dir30) withcolor .8white; - addto mickey contour fullcircle scaled u - shifted (u*dir150) - withcolor .8white; - draw mickey; -endfig; -beginfig(93) - u:=3mm; - picture mickey; - mickey := nullpicture; - addto mickey contour fullcircle scaled 2u - withcolor .8white; - addto mickey contour fullcircle scaled u - shifted (u*dir30) withcolor .8white; - addto mickey contour fullcircle scaled u - shifted (u*dir150) withcolor .8white; - - transform T; - (0,0) transformed T = (0,0); - (1,0) transformed T = (1,1); - (0,1) transformed T = (1,0); - - draw mickey transformed T; -endfig; -beginfig(94) - u:=3mm; - picture mickey; - fill fullcircle scaled 2u withcolor .8white; - fill fullcircle scaled u shifted (u*dir30) - withcolor .8white; - fill fullcircle scaled u shifted (u*dir150) - withcolor .8white; - mickey := currentpicture; - currentpicture := nullpicture; - - transform T; - (0,0) transformed T = (0,0); - (1,0) transformed T = (1,1); - (0,1) transformed T = (1,0); - - draw mickey transformed T; -endfig; -beginfig(95) - pair A,B; - path p; - A = (0,1cm); - B = A rotated 120; - p = A{dir 0} .. tension 2 .. B{dir 120}; - draw p; - draw p rotated 120; - draw p rotated -120; -endfig; -beginfig(96) - pair A,B; - path p; - numeric n; - n:=5; - A = (0,1cm); - B = A rotated (2*360/n); - p = A{dir 180} .. tension 4 .. B{dir (180+2*360/n)}; - draw p withcolor red; - draw p rotated (1*360/n); - draw p rotated (2*360/n); - draw p rotated (3*360/n); - draw p rotated (4*360/n); -endfig; -beginfig(97) - path c[], l[]; - c[0] = fullcircle xscaled 1cm yscaled .5cm - shifted (0,1cm); - c[1] = c[0] rotated 120; - c[2] = c[1] rotated 120; - pair A; - A = (-.5cm,1cm); - l[0] = A{down} .. - (A xscaled -1 rotated 120){-down rotated 120}; - l[1] = l[0] rotated 120; - l[2] = l[1] rotated 120; - draw c[0]; draw c[1]; draw c[2]; - draw l[0]; draw l[1]; draw l[2]; -endfig; -beginfig(98) - path c[], l[]; - c[0] = fullcircle xscaled 1cm yscaled .5cm - shifted (0,1cm); - c[1] = c[0] rotated (360/4); - c[2] = c[1] rotated (360/4); - c[3] = c[2] rotated (360/4); - pair A; - A = (-.5cm,1cm); - l[0] = A{down} .. - (A xscaled -1 rotated (360/4)) - {-down rotated (360/4)}; - l[1] = l[0] rotated (360/4); - l[2] = l[1] rotated (360/4); - l[3] = l[2] rotated (360/4); - draw c[0]; draw c[1]; draw c[2]; draw c[3]; - draw l[0]; draw l[1]; draw l[2]; draw l[3]; -endfig; -beginfig(99) - pair A, B; - A := (0,0); B := (2cm,1cm); - draw A withpen pencircle scaled 4bp; - draw B withpen pencircle scaled 4bp; - draw fullcircle scaled abs(B-A) shifted 1/2[A,B]; - -endfig; -beginfig(100) - pair A; - A:=(2cm,2cm); - drawarrow origin--A; - drawarrow (origin--A) rotated -1/3 angle(A); - drawarrow (origin--A) rotated -2/3 angle(A); - drawarrow (origin--A) rotated -angle(A); - -endfig; -beginfig(101) - pair A,B; - A:=(1cm,2cm); B:=(2cm,1cm); - numeric alpha; - alpha = angle(A) - angle(B); - drawarrow origin--A; - drawarrow origin--B; - drawarrow (origin--A) rotated -1/3 alpha; - drawarrow (origin--A) rotated -2/3 alpha; - drawarrow (origin--A) rotated -alpha; -endfig; -beginfig(102) - pair A,B,C; - A=(0,0); B=(3cm,0); C=(1cm,2cm); - draw A--B--C--cycle; - label.llft(TEX decimal(angle(C-A)-angle(B-A)), A); - label.lrt(TEX decimal(angle(A-B)-angle(C-B)), B); - label.urt(TEX decimal(angle(B-C)-angle(A-C)), C); -endfig; -beginfig(103) - pair A,AA,B,BB,C,CC,O,H; - A=(0,0); B=(3cm,0); C=(1cm,2cm); - AA = 1/2[B,C]; - BB = 1/2[A,C]; - CC = 1/2[A,B]; - O - 1/2[BB,CC] = whatever * (BB-CC) rotated 90; - O - 1/2[AA,BB] = whatever * (AA-BB) rotated 90; - draw A--B--C--cycle; - draw AA withpen pencircle scaled 4bp; - draw BB withpen pencircle scaled 4bp; - draw CC withpen pencircle scaled 4bp; - draw fullcircle scaled 2abs(O-AA) shifted O; - % Il faut aussi tracer les hauteurs - pair AA,BB,CC; - AA - A = whatever * (B-C) rotated 90; - AA = whatever [B,C]; - BB - B = whatever * (A-C) rotated 90; - BB = whatever [A,C]; - CC - C = whatever * (A-B) rotated 90; - CC = whatever [A,B]; - draw A--AA; draw B--BB; draw C--CC; - draw AA withpen pencircle scaled 4bp; - draw BB withpen pencircle scaled 4bp; - draw CC withpen pencircle scaled 4bp; - % Il passe aussi par le milieu de HA, HB, HC - H = whatever [A,AA]; - H = whatever [B,BB]; - draw 1/2 [A,H] withpen pencircle scaled 4bp; - draw 1/2 [B,H] withpen pencircle scaled 4bp; - draw 1/2 [C,H] withpen pencircle scaled 4bp; -endfig; -beginfig(104) - pair A,B,C,M,h; - u:=2cm; - A=(0,0); B=(2u,-.5u); C=(u,u); - draw A--B--C--cycle; - (M-A) = whatever * ( - (A-C) rotated 1/2( angle(B-A) - angle(C-A)) ); - (M-B) = whatever * ( - (B-A) rotated 1/2( angle(C-B) - angle(A-B)) ); - draw M--A; draw M--B; draw M--C; - M-h = whatever * (B-C) rotated 90; - h = whatever[B,C]; - draw fullcircle scaled 2 abs(M-h) shifted M; -endfig; -beginfig(105) - path p; - p = (0,0){up} .. (2cm,0){down}; - draw p; - draw point 0 of p withpen pencircle scaled 4bp; - draw point .5 of p withpen pencircle scaled 4bp; - draw point 1 of p withpen pencircle scaled 4bp; - -endfig; -beginfig(106) - path p; - p = (0,0){up} .. (2cm,0){down}; - draw p; - pair A; - A := point 0 of p; - B := A + 1cm*unitvector(direction 0 of p); - drawarrow A--B withpen pencircle scaled 1bp; - A := point .5 of p; - B := A + 1cm*unitvector(direction .5 of p); - drawarrow A--B withpen pencircle scaled 1bp; - A := point 1 of p; - B := A + 1cm*unitvector(direction 1 of p); - drawarrow A--B withpen pencircle scaled 1bp; - -endfig; -beginfig(107) - u:=5mm; - path p; - p = (0,0) {curl 0} .. (u,2u) .. (2u,1.5u) - .. (3u,2u) .. {curl 0} (4u,0); - draw subpath(0,1) of p withcolor red; - draw subpath(1,2) of p withcolor green; - draw subpath(2,3) of p withcolor blue; - draw subpath(3,3.5) of p dashed evenly; - draw subpath(3.5,4) of p dashed withdots; - -endfig; -beginfig(108) - u:=1cm; - path p,q; - p := (0,0){up} .. (u,2u){up}; - q := (u,0){up} .. (0,2u){up}; - draw p; - draw subpath(0,.4) of q withpen pencircle scaled 1bp; - draw subpath(.6,1) of q withpen pencircle scaled 1bp; -endfig; -beginfig(109) - u:=1cm; - path a,b,c,d; - a = (-u,-.2u){up} .. tension 1.2 .. (u,-.2u){down}; - b = a rotated 90; - c = b rotated 90; - d = c rotated 90; - fill buildcycle(a,b,c,d) withcolor .8white; - draw a; draw b; draw c; draw d; - -endfig; -beginfig(110) - u:=1cm; - path c[]; - c[1] := fullcircle scaled u; - c[2] := c[1] shifted (0,.5u); - draw c[1] dashed evenly; - draw c[2] dashed evenly; - draw buildcycle(c[1],c[2]) withpen pencircle scaled 1bp; -endfig; -beginfig(111) - path a,b,c; - a = fullcircle scaled 2u shifted (.5u,0); - b = a rotated (360/3); - c = b rotated (360/3); - fill a withcolor red; - fill b withcolor green; - fill c withcolor blue; - fill buildcycle(a,b) withcolor red + green; - fill buildcycle(b,c) withcolor green + blue; - fill buildcycle(c,a) withcolor blue + red; - fill buildcycle(a,b,c) withcolor white; - draw a; draw b; draw c; -endfig; -beginfig(112) - def compute_curve(suffix f)(expr xmin, xmax, xinc) = - ( (xmin,f(xmin)) - for x=xmin+xinc step xinc until xmax: - .. (x,f(x)) - endfor ) - enddef; - vardef f(expr x) = x**2 + 1 enddef; - vardef g(expr x) = 2 - (x-1)**2 enddef; - path p, q; - p := compute_curve(f, -1, 1.5, .1) scaled 1cm; - q := compute_curve(g, -.5, 2, .1) scaled 1cm; - fill buildcycle(p,reverse q) withcolor red+green; - draw p withpen pencircle scaled 1bp; - draw q withpen pencircle scaled 1bp; - draw (-1cm,0) -- (2cm,0); - draw (0,g(-.5)*1cm) -- (0,f(1.5)*1cm); -endfig; -beginfig(113) - path p, q; - p = (0,0){up} .. (2cm,0){up}; - q = (0,1cm){dir -60}..(1cm,-1cm)..{dir 60}(2cm,1cm); - draw p; draw q; - draw p intersectionpoint q withpen pencircle scaled 4bp; - -endfig; -beginfig(114) - path p, q; - p = (0,0){up} .. (2cm,0){up}; - q = (0,1cm){dir -60}..(1cm,-1cm)..{dir 60}(2cm,1cm); - draw p; draw q; - numeric a,b; - (a,whatever) = p intersectiontimes q; - draw point a of p withpen pencircle scaled 4bp; - -endfig; -beginfig(115) - pair A,B; - path p; - A = (0,1cm); - B = A rotated 120; - p = A{dir 0} .. tension 2 .. B{dir 120}; - numeric a; - (a,whatever) = p intersectiontimes (p rotated 120); - draw subpath(0,a-.02) of p; - draw subpath(a+.02,1) of p; - draw subpath(0,a-.02) of p rotated 120; - draw subpath(a+.02,1) of p rotated 120; - draw subpath(0,a-.02) of p rotated -120; - draw subpath(a+.02,1) of p rotated -120; -endfig; -beginfig(116) - u:=2cm; - pair A[], B[], C[], D[], E[]; - path p[]; - - A[0] = u*up; - for i=1 upto 10: - A[i] := A[i-1] rotated 72; - endfor; - for i=0 upto 4: - p[i] := A[i]--A[i+1]; - draw p[i]; - draw (point 1 of p[i]) -- - ( (point 1 of p[i]) + 4mm*unitvector(direction 1 of p[i])); - draw (point 0 of p[i]) -- - ( (point 0 of p[i]) - 4mm*unitvector(direction 0 of p[i])); - endfor - - for i=0 upto 9: - B[i] := 1/2[ A[i], A[i+1] ]; - endfor; - B[5]:=B[0]; - - for i=0 upto 9: - C[i] := .8*B[i]; - endfor; - - for i=0 upto 4: - p[i] := B[i] --- C[i] .. C[i+2]{dir 72i}; - draw p[i]; - draw (point 2 of p[i]) -- - ( (point 2 of p[i]) + 4mm*unitvector(direction 2 of p[i])); - draw (point 0 of p[i]) -- - ( (point 0 of p[i]) - 4mm*unitvector(direction 0 of p[i])); - endfor; - for i=0 upto 4: - draw subpath(1,1.4) of p[i] withpen pencircle scaled 4bp withcolor white; - draw subpath(0,1.5) of p[i]; - endfor; - - for i=0 upto 4: - draw A[i] withpen pencircle scaled 4bp; - draw B[i] withpen pencircle scaled 4bp; - draw C[i] withpen pencircle scaled 4bp; - endfor; -endfig; -beginfig(117) - u:=2cm; - pair A, B, C, D, E; - path p, q, r; - - A = u*up; - p := (-.2)[ A, A rotated 72 ] -- (1.2)[ A, A rotated 72 ]; - for i=0 upto 5: - draw p rotated 72i; - endfor; - B := 1/2[ A, A rotated 72 ]; - C := .8*B; - - p := B --- C .. (C rotated (2*72)){right}; - % On allonge le chemin p - p := ( (point 0 of p) - 4mm*unitvector(direction 0 of p)) - -- - (point 0 of p) - & p & - (point 2 of p) - -- - ( (point 2 of p) + 4mm*unitvector(direction 2 of p)); - - E = p intersectionpoint (p rotated 72); - q := p cutbefore fullcircle scaled -2mm shifted E; - r := p cutafter fullcircle scaled 2mm shifted E; - - for i=0 upto 4: - draw q rotated 72i; - draw r rotated 72i; - draw A rotated 72i withpen pencircle scaled 4bp; - draw B rotated 72i withpen pencircle scaled 4bp; - draw C rotated 72i withpen pencircle scaled 4bp; - endfor; -endfig; -beginfig(118) - for i=0 step 1 until 3: - draw 1cm*right rotated (i*90) - withpen pencircle scaled 4bp; - endfor; - -endfig; -beginfig(119) - draw for i=0 step 1 until 3: - 1cm*right rotated (i*90) -- - endfor cycle; - -endfig; -beginfig(120) - n:=5; - draw for i=0 step 1 until n-1: - 1cm*up rotated (i*360/n) -- - endfor cycle; -endfig; -beginfig(121) - n:=7; - draw for i=0 step 1 until n-1: - 1cm*up rotated (i*360/n) -- - endfor cycle; -endfig; -beginfig(122) - path p; - p = (0,0) .. (-1cm,2cm) .. (2cm,1cm) .. (1cm,0); - draw p; - n:=10; - for i=0 step 1 until n: - draw point (i/n*length(p)) of p - withpen pencircle scaled 4bp; - endfor; -endfig; -beginfig(123) - path p; - p = (0,0) .. (-1cm,2cm) .. (2cm,1cm) .. (1cm,0); - draw p; - n:=10; - for i=0 step length(p)/n until length(p): - drawarrow (point i of p) -- - 1cm * unitvector(direction i of p) - shifted point i of p; - endfor; -endfig; -beginfig(124) - u:=1cm; - draw (-2u,0)--(2u,0); - draw (0,-2u)--(0,2u); - for i=-2u step u until 2u: - draw (i,u/20)--(i,-u/20); - draw (u/20,i)--(-u/20,i); - endfor; -endfig; -beginfig(125) - u:=1cm; - draw (-2u,0)--(2u,0); - draw (0,-2u)--(0,2u); - for i=-2u step u until 2u: - draw (i,u/10)--(i,-u/10); - draw (u/10,i)--(-u/10,i); - endfor; - for i=-2u step u/5 until 2u: - draw (i,u/20)--(i,-u/20); - draw (u/20,i)--(-u/20,i); - endfor; -endfig; -beginfig(126) - u:=1cm; - draw (-2u,0)--(2u,0); - draw (0,-2u)--(0,2u); - for i=-2u step u until 2u: - draw (i,2u)--(i,-2u); - draw (2u,i)--(-2u,i); - endfor; -endfig; -beginfig(127) - u:=1cm; - draw (-2u,0)--(2u,0); - draw (0,-2u)--(0,2u); - for i=-2u step u until 2u: - draw (i,2u)--(i,-2u); - draw (2u,i)--(-2u,i); - endfor; - for i=-2u step u/5 until 2u: - draw (i,2u)--(i,-2u) withpen pencircle scaled .2bp; - draw (2u,i)--(-2u,i) withpen pencircle scaled .2bp; - endfor; -endfig; -beginfig(128) - u := 5mm; - % vardef est nécessaire pour pouvoir passer f en argument - vardef f(expr x) = x**2 -.1 enddef; - def axes(expr xmin,xmax,ymin,ymax) = - draw ( (xmin,0) -- (xmax,0) ) scaled u; - draw ( (0,ymin) -- (0,ymax) ) scaled u; - enddef; - def courbe(suffix f)(expr xmin, xmax, M) = - draw ( ( xmin, f(xmin) ) - for i=1 upto M: - -- ( xmin + (i/M)*(xmax - xmin), f( xmin + (i/M)*(xmax - xmin) )) - endfor ) scaled u; - enddef; - vardef newton(suffix f)(expr y, h, M) = - save x,t; - numeric x,t; x:=y; - for i=1 upto M: - t := x - f(x)/( (f(x+h) - f(x))/h ); - draw ( (x,f(x)) -- (t,0) -- (t,f(t)) ) scaled u; - x := t; - endfor; - enddef; - axes(-.5,2,-.5,4); - courbe(f,-.5,2, 100); - newton(f, 2, .01, 10); -endfig; -beginfig(129) - transform T; - u:=1cm; - z0=(0,0); z1=(2u,0); z3 = z1 rotated 90; z2 = z1+z3; - z0 transformed T = .1[z0,z1]; - z1 transformed T = .1[z1,z2]; - z2 transformed T = .1[z2,z3]; - path p; - p = z0--z1--z2--z3--cycle; - fill p withcolor .8*white; - fill p transformed T withcolor white; -endfig; -beginfig(130) - transform T; - u:=1cm; - z0=(0,0); z1=(2u,0); z3 = z1 rotated 90; z2 = z1+z3; - z0 transformed T = .1[z0,z1]; - z1 transformed T = .1[z1,z2]; - z2 transformed T = .1[z2,z3]; - path p; - p = z0--z1--z2--z3--cycle; - for i=0 upto 100: - fill p withcolor .8*white; - p := p transformed T; - fill p withcolor white; - p := p transformed T; - endfor; -endfig; -beginfig(131) - transform T; - u:=1cm; - z1=(0,2u); - n := 5; - for i=1 upto n-1: - z[i+1] = z1 rotated (360*i/n); - endfor; - z1 transformed T = .1[z1,z2]; - z2 transformed T = .1[z2,z3]; - z3 transformed T = .1[z3,z4]; - path p; - p = for i=1 upto n: z[i] -- endfor cycle; - for i=0 upto 100: - fill p withcolor .8*white; - p := p transformed T; - fill p withcolor white; - p := p transformed T; - endfor; -endfig; -beginfig(132) - u:=1cm; - pair A[]; - numeric n; n:=7; - A[0] = (u,0); - for i=1 upto n-1: - A[i] = A[0] rotated (360/n*i); - endfor; - for i=0 upto n-1: - draw A[i] withpen pencircle scaled 4bp; - for j=0 upto n-1: - if i<>j: draw A[i]--A[j] fi; - endfor; - endfor; -endfig; -beginfig(133) - u:=2cm; - numeric n,m; n:=4; m:=5; - pair A[], B[]; - for i=1 upto n-1: A[i+1]-A[i] = (0,.2u); endfor; - for j=1 upto m-1: B[j+1]-B[j] = (0,.2u); endfor; - (0,0) for i=1 upto n: + A[i] endfor = (0,0); - (0,0) for j=1 upto m: + B[j] endfor = (4u,0); - for i=1 upto n: - draw A[i] withpen pencircle scaled 4bp; - endfor; - for j=1 upto m: - draw B[j] withpen pencircle scaled 4bp; - endfor; - for i=1 upto n: - for j=1 upto m: - draw A[i]--B[j]; - endfor; - endfor; -endfig; -beginfig(134) - u:=1cm; - numeric n,m; n:=3; m:=3; - pair A[], B[]; - for i=1 upto n-1: A[i+1]-A[i] = (.5u,0); endfor; - for j=1 upto m-1: B[j+1]-B[j] = (.5u,0); endfor; - (0,0) for i=1 upto n: + A[i] endfor = (0,0); - (0,0) for j=1 upto m: + B[j] endfor = (0,4u); - for i=1 upto n: - draw A[i] withpen pencircle scaled 4bp; - endfor; - for j=1 upto m: - draw B[j] withpen pencircle scaled 4bp; - endfor; - for i=1 upto n: - for j=1 upto m: - draw A[i]--B[j]; - endfor; - endfor; -endfig; -beginfig(135) - pair A[], B[]; - numeric n; n:=6; - for i=0 upto n-1: - A[i] = 1cm * right rotated (i*360/n); - B[i] = 2cm * right rotated (i*360/n); - endfor; - A[n] = A[0]; B[n] = B[0]; - for i=0 upto n-1: - draw A[i] -- A[i+1] -- B[i+1] -- B[i]; - draw A[i] withpen pencircle scaled 4bp; - draw B[i] withpen pencircle scaled 4bp; - endfor; -endfig; -beginfig(136) - numeric n; n:=5; - pair O,A,B,C,D; - O = (0,0); - A = 1cm*up; - B = 2cm*up rotatedabout(A,30); - C = 2cm*up; - D = 2cm*up rotatedabout(A,-30); - for i=0 upto n-1: - draw (O--A--C) rotated (i*360/n); - draw (B--A--D) rotated (i*360/n); - draw A rotated (i*360/n) withpen pencircle scaled 4bp; - draw B rotated (i*360/n) withpen pencircle scaled 4bp; - draw C rotated (i*360/n) withpen pencircle scaled 4bp; - draw D rotated (i*360/n) withpen pencircle scaled 4bp; - endfor; - draw O withpen pencircle scaled 4bp; -endfig; -beginfig(137) - path p; u:=1cm; - p = fullcircle xscaled -u yscaled 3u; - draw p; - for i=2 step .5 until 6: - draw (point 2 of p){down} .. (point i of p); - endfor; -endfig; -beginfig(138) - pair P[], Q[], R[], S[]; - u:=.5cm; - for i=0 upto 4: - P[i] = u* down rotated (i*360/5); - endfor; - P[5] = P[0]; - for i=0 upto 4: - Q[i] = 3*( 1/2[ P[i], P[i+1] ] ); - endfor; - Q[5] = Q[0]; - for i=0 upto 4: - R[i] = 1/3( Q[i] + Q[i+1] + P[i+1] ); - endfor; - R[5] = R[0]; - for i=0 upto 5: - S[i] = 1.5*Q[i]; - endfor; - for i=0 upto 4: - draw P[i] -- P[i+1]; - draw P[i+1] -- R[i]; - draw Q[i] -- R[i]; - draw R[i] -- Q[i+1]; - draw Q[i] -- S[i]; - draw S[i] -- S[i+1]; - endfor; -endfig; -beginfig(139) - pair P[], Q[], R[], S[]; - u:=.5cm; - for i=0 upto 4: - P[i] = u* down rotated (i*360/5); - endfor; - P[5] = P[0]; - for i=0 upto 4: - Q[i] = 3*( 1/2[ P[i], P[i+1] ] ); - endfor; - Q[5] = Q[0]; - for i=0 upto 4: - R[i] = 1/3( Q[i] + Q[i+1] + P[i+1] ); - endfor; - R[5] = R[0]; - for i=0 upto 5: - S[i] = 1.5*Q[i]; - endfor; - for i=0 upto 4: - draw P[i] -- P[i+1]; - draw P[i+1] -- R[i]; - draw Q[i] -- R[i]; - draw R[i] -- Q[i+1]; - draw Q[i] -- S[i]; - draw S[i] -- S[i+1]; - endfor; - draw P[2] -- P[3] -- P[4] -- P[0] -- P[1] -- - R[0] -- Q[0] -- R[4] -- Q[4] -- R[3] - -- Q[3] -- R[2] -- Q[2] -- - S[2] -- S[3] -- S[4] -- S[0] -- S[1] -- - Q[1] -- R[1] -- cycle - withpen pencircle scaled 2bp; -endfig; -beginfig(140) - for i=1 step -.01 until 0: - fill fullcircle scaled (i*2cm) withcolor i*white; - endfor; - draw fullcircle scaled 2cm withpen pencircle scaled 2bp; -endfig; -beginfig(141) - u:=5mm; - path p; - p = (0,0) .. (-1,1) .. (2,0) .. (0,-3) .. cycle; - p := p shifted (-1,0); - for i=1 step -.01 until 0: - fill p scaled (i*u) withcolor i*white; - endfor; - draw p scaled u withpen pencircle scaled 2bp; -endfig; -beginfig(142) - z0 = (50,50); - z1 = z0 rotated 90; - z2 = z1 rotated 90; - z3 = z2 rotated 90; - path carre; - carre = z0--z1--z2--z3--cycle; - s := .01; - path rect; - z4 = s [z2,z3]; z5 = s [z1,z0]; - rect = z1--z2--z4--z5--cycle; - for i=0 step s until 1: - fill rect shifted (i*(z0-z1)) withcolor i*white; - endfor; - draw carre withpen pencircle scaled 2bp; -endfig; -beginfig(143) - z0 = (50,50); - z1 = z0 rotated 90; - z2 = z1 rotated 90; - z3 = z2 rotated 90; - path carre; - carre = z0--z1--z2--z3--cycle; - s := .01; - for i=1 step -s until s: - fill carre scaled i withcolor i*white; - endfor; -endfig; -beginfig(144) - u:=1cm; - vardef degrade(expr p,q,M,N) = - save a,b; - numeric a,b; - a := length(p); - b := length(q); - for i=0 upto M: - draw (i/M) [ point 0 of p, point 0 of q ] - for j=1 upto N: - .. (i/M) [ point (j/N*a) of p, point (j/N*b) of q ] - endfor; - endfor; - enddef; - degrade( - (-.1u,-.1u) .. (.1u,.1u) .. cycle, - (-u,-u) -- (u,-u) -- (u,u) -- (-u,u) -- cycle, - 10, - 100); -endfig; -beginfig(145) - u:=1cm; - def couleur(expr c) = c*white enddef; - vardef degrade(expr p,q,M,N) = - save a,b; - numeric a,b; - a := length(p); - b := length(q); - for i=0 upto M: - draw (i/M) [ point 0 of p, point 0 of q ] - for j=1 upto N: - .. (i/M) [ point (j/N*a) of p, point (j/N*b) of q ] - endfor - withcolor couleur(i/M); - endfor; - enddef; - degrade( - (-.5u,-.5u) .. (.5u,.5u) .. cycle, - (-u,-u) -- (u,-u) -- (u,u) -- (-u,u) -- cycle, - 255, - 100); -endfig; -beginfig(146) - def degrade(expr p, q, N) = - begingroup - save n, m, M; - numeric n, m, M; - n := length(p); - m := length(q); - M := n*m; % Il faudrait prendre le ppcm - for i=0 upto N: - draw - (i/N)[ point 0 of p, point 0 of q ] - { (i/N)[ direction 0 of p, direction 0 of q ] } - for j=1 upto M-1: - .. - { (i/N) [ direction 1 of subpath((j-1)*n/M,j*n/M) of p, - direction 1 of subpath((j-1)*m/M,j*m/M) of q ] } - (i/N)[ point (j*n/M) of p, point (j*m/M) of q ] - { (i/N) [ direction 0 of subpath(j*n/M,(j+1)*n/M) of p, - direction 0 of subpath(j*m/M,(j+1)*m/M) of q ] } - endfor - .. - { (i/N)[ direction n of p, direction m of q ] } - (i/N)[ point n of p, point m of q ] - ; - endfor; - endgroup; - enddef; - numeric u; - u := 2cm; - path p, q; - p := fullcircle scaled u; - q := (-u,-u)--(u,-u)--(u,u)--(-u,u)--cycle; - degrade(p,q,10); -endfig; -beginfig(147) - draw for i=0 step 10 until 360: - 2cm* (sind(2*i), cosd(3*i)) .. - endfor cycle; -endfig; -beginfig(148) - for i=0 step .1 until 360: - col := i/360; - draw 2cm* (sind(2*i), cosd(3*i)) - withpen pencircle scaled 2bp - withcolor - if col>.5: (2*(1-col)) [red, blue] - else: (1-2col) [blue, red] - fi; - endfor; -endfig; -beginfig(149) - def couleur(expr x) = - if x>.5: (2*(1-x)) [red, blue]; - else: (1-2x) [blue, red] - fi - enddef; - for i=0 step .1 until 360: - draw 2cm* (sind(2*i), cosd(3*i)) - withpen pencircle scaled 2bp - withcolor couleur(i/360); - endfor; -endfig; -beginfig(150) - for i=0 step 1 until 360: - pair P; - P = 2cm* (sind(2*i), cosd(3*i)); - fill fullcircle scaled 4mm shifted P withcolor white; - draw fullcircle scaled 4mm shifted P; - endfor; -endfig; -beginfig(151) - for i=0 step 1 until 360: - pair P; - P = 2cm* (sind(2*i), cosd(3*i)); - fill fullcircle scaled 4mm shifted P withcolor white; - draw fullcircle scaled 4mm shifted P; - endfor; - picture p; - p:=nullpicture; - for i=-180 step 1 until 180: - pair P; - P = 2cm* (sind(2*i), cosd(3*i)); - addto p contour fullcircle scaled 4mm shifted P withcolor white; - addto p doublepath fullcircle scaled 4mm shifted P - withpen pencircle scaled .5bp; - endfor; - clip p to (.5cm,2.5cm) -- (.5cm,1.5cm)-- - (-.5cm,1.5cm) -- (-.5cm,2.5cm)--cycle; - draw p; -endfig; -beginfig(152) - u:=5mm; - vardef project(expr x,y,z) = - x*(-1,-1) + y*(1,0) + z*(0,1) - enddef; - vardef f(expr x,y) = sind(x/u*180)*sind(y/u*180)*u enddef; - numeric m,M; - m:=-2u; M:=2u; - for i=m step .1u until M: - path p; - p = - for j=m step .1u until M: - project(i,j,f(i,j)) -- - endfor - project(i,M,f(i,M)); - fill (project(i,m,f(i,m)) - (0,3u)) -- p -- - (project(i,M,f(i,M)) - (0,3u)) -- cycle - withcolor white; - draw (project(i,m,f(i,m)) - (0,3u)) -- p -- - (project(i,M,f(i,M)) - (0,3u)) -- cycle; - draw p; - endfor; -endfig; -beginfig(153) - vardef project(expr x,y,z) = - x*(-1,-1) + y*(1,0) + z*(0,1) - enddef; - vardef f(expr x,y) = sind(x/u*180)*sind(y/u*180)*u enddef; - m:=-2u; M:=2u; inc:=.1u; - for i=m step inc until M: - for j=m step inc until M: - path p; - p = project(i,j,f(i,j)) -- - project(i,j+inc,f(i,j+inc)) -- - project(i+inc,j+inc,f(i+inc,j+inc)) -- - project(i+inc,j,f(i+inc,j)) -- - cycle; - fill p withcolor white; - draw p; - endfor - endfor; -endfig; -beginfig(154) - vardef project(expr x,y,z) = - x*(-1,-1) + y*(1,0) + z*(0,1) - enddef; - vardef f(expr x,y) = sind(x/u*180)*sind(y/u*180)*u enddef; - numeric m,M,inc,couleur; - m:=-2u; M:=2u; inc:=.1u; - for i=m step inc until M: - for j=m step inc until M: - path p; - p = project(i,j,f(i,j)) -- - project(i,j+inc,f(i,j+inc)) -- - project(i+inc,j+inc,f(i+inc,j+inc)) -- - project(i+inc,j,f(i+inc,j)) -- - cycle; - dfdx := (f(i,j) - f(i+inc,j))/inc; - dfdy := (f(i,j) - f(i,j+inc))/inc; - couleur := 1/sqrt( dfdx**2 + dfdy**2 + 1); - fill p withcolor couleur*(red+green); - endfor - endfor; -endfig; -beginfig(155) -vardef f(expr x,y) = sind(x/u*180)*sind(y/u*180)*u enddef; - -boolean dessine_fil_de_fer; dessine_fil_de_fer := false; -color dessine_couleur; dessine_couleur := red+green; - -vardef dessine(suffix f)(expr xmin, xmax, xinc, ymin, ymax, yinc) = - save i,j,p,dfdx,dfdy,project; - vardef project(expr x,y,z) = - x*(-1,-1) + y*(1,0) + z*(0,1) - enddef; - for i=m step inc until M: - for j=m step inc until M: - path p; - p = project(i,j,f(i,j)) -- - project(i,j+inc,f(i,j+inc)) -- - project(i+inc,j+inc,f(i+inc,j+inc)) -- - project(i+inc,j,f(i+inc,j)) -- - cycle; - dfdx := (f(i,j) - f(i+inc,j))/inc; - dfdy := (f(i,j) - f(i,j+inc))/inc; - couleur := 1/sqrt( dfdx**2 + dfdy**2 + 1); - fill p withcolor couleur*dessine_couleur; - if dessine_fil_de_fer: draw p fi; - endfor - endfor; -enddef; - - % Il faudrait pouvoir choisir différents - % types d'« éclairage ». - vardef f(expr x,y) = sind(x/u*180)*sind(y/u*180)*u enddef; - dessine(f,-2u,2u,.1u, -2u,2u,.1u); -endfig; -beginfig(156) - vardef random_path (expr n) = - save i, A ; numeric i; pair A[]; - for i=0 upto n: - A[i] = (uniformdeviate(2u), uniformdeviate(2u)); - endfor; - A[0] - for i=1 upto n: - .. A[i] - endfor - enddef; - - vardef intersections(expr p,q) = - save a,b,N,i,j; - numeric N,i,j; - N:=10; - for i=0 step length(p)/N until length(p): - for j=0 step length(q)/N until length(p): - numeric a,b; - pair A; - (a,b) = (subpath(i,i+length(p)/N) of p) - intersectiontimes - (subpath(j,j+length(q)/N) of q); - if a <> -1: - A = point a of subpath(i,i+length(p)/N) of p; - show A; - draw A withpen pencircle scaled 4bp; - fi; - endfor; - endfor; - enddef; - - path p,q; - p:=random_path(4); - q:=random_path(4); - draw p withcolor red; - draw q withcolor blue; - intersections(p,q); -endfig; -beginfig(157) - vardef auto_intersections(expr p) = - save a,b,N,i,j; - numeric N,i,j; - N:=100; - for i=0 step length(p)/N until length(p): - for j=i+2*length(p)/N - step length(p)/N - until length(p): - numeric a,b; - pair A; - (a,b) = (subpath(i,i+length(p)/N) of p) - intersectiontimes - (subpath(j,j+length(p)/N) of p); - if a <> -1: - A = point a of subpath(i,i+length(p)/N) of p; - show A; - draw A withpen pencircle scaled 4bp; - fi; - endfor; - endfor; - enddef; - - u:=2cm; - path p,q; - p:=random_path(12); - draw p; - auto_intersections(p); -endfig; -beginfig(158) - path p; - p := (0,0){up} .. (1cm,1cm) .. (1cm,0); - draw p; - draw point 1/2length(p) of p - withpen pencircle scaled 4bp withcolor red; - draw point (arctime (1/2 arclength(p)) of p) of p - withpen pencircle scaled 4bp; - -endfig; -beginfig(159) - vardef milieu(expr p) = - save l,i,tot,A,B; - numeric l,tot,i; - pair A,B; - tot := longueur(p); - l:=0; - B := point 0 of p; - for i:=0 step .01 until length(p): - A := B; - B := point i of p; - l := l+abs(B-A); - exitif l > 1/2 tot; - endfor; - 1/2[A,B] - enddef; - - path p; - p := (0,0){up} .. (1cm,1cm) .. (1cm,0); - draw p; - draw point 1/2length(p) of p withpen pencircle scaled 4bp withcolor red; - draw milieu(p) withpen pencircle scaled 4bp; -endfig; -beginfig(160) - vardef milieu_time(expr p) = - save l,i,tot,A,B,t; - numeric l,tot,i,t; - pair A,B; - tot := longueur(p); - l:=0; - B := point 0 of p; - for i:=0 step .01 until length(p): - t:=i; - A := B; - B := point i of p; - l := l+abs(B-A); - exitif l > 1/2 tot; - endfor; - t % Pas de point-virgule - enddef; - - save arrowhead; - vardef arrowhead expr p = - save A,u; pair A,u; - A := milieu(p); - u := unitvector(direction milieu_time(p) of p); - A -- (A - ahlength*u rotated 15) -- - (A - ahlength*u rotated -15) -- cycle - enddef; - - u:=1cm; - drawarrow (0,0) .. (-u,u) .. (u,u); -endfig; -beginfig(161) - save arrowhead; - vardef arrowhead expr p = - save A,B,u; pair A,B,u; - A := milieu(p); - B := p intersectionpoint - (fullcircle scaled ahlength shifted A); - u := unitvector(direction milieu_time(p) of p); - A -- (A - ahlength*u rotated 30) -- B -- - (A - ahlength*u rotated -30) -- cycle - enddef; - - u:=1cm; - drawarrow (0,0) .. (-u,u) .. (u,u); -endfig; -beginfig(162) - save arrowhead; - vardef arrowhead expr p = - save A,u; pair A,u; - A := milieu(p); - u := unitvector(direction milieu_time(p) of p); - A -- (A - ahlength*u rotated 30) -- A -- - (A - ahlength*u rotated -30) -- cycle - enddef; - - u:=1cm; - drawarrow (0,0) .. (-u,u) .. (u,u); -endfig; -beginfig(163) - save arrowhead; - vardef arrowhead expr p = - save A,u,a,b; pair A,u; path a,b; - A := milieu(p); - u := unitvector(direction milieu_time(p) of p); - a := A{-u} .. (A - ahlength*u rotated 30); - b := A{-u} .. (A - ahlength*u rotated -30); - ( a & reverse(a) & b & reverse(b) ) --cycle - enddef; - - u:=1cm; - drawarrow (0,0) .. (-u,u) .. (u,u); -endfig; -beginfig(164) - pair A,B,C; - C = 3mm*up; - A = C rotated 120; - B = C rotated -120; - picture pic ; - pic:=nullpicture; - addto pic doublepath A--B--C--cycle withpen currentpen; - addto pic doublepath A withpen pencircle scaled 4bp; - addto pic doublepath B withpen pencircle scaled 4bp; - addto pic doublepath C withpen pencircle scaled 4bp; - for i=-3 upto 3: - for j=-3 upto 3: - draw pic shifted( i*(B-A) + j*(C-A) ); - endfor; - endfor; - clip currentpicture to (-2cm,-2cm)--(2cm,-2cm)--(2cm,2cm)--(-2cm,2cm)--cycle; -endfig; -beginfig(165) - pair A,B,C; - C = 3mm*up; - A = C rotated 120; - B = C rotated -120; - picture pic ; - pic:=nullpicture; - path p; - p := A{(C-A) rotated 30} .. C{(C-A) rotated 30}; - addto pic doublepath p withpen currentpen; - addto pic doublepath p rotated 120 withpen currentpen; - addto pic doublepath p rotated -120 withpen currentpen; - for i=-3 upto 3: - for j=-3 upto 3: - draw pic shifted( i*(B-A) + j*(C-A) ); - endfor; - endfor; - clip currentpicture to (-2cm,-2cm)--(2cm,-2cm)--(2cm,2cm)--(-2cm,2cm)--cycle; -endfig; -beginfig(166) - ux:=2mm; - uy:=5mm; - numeric xmin, xmax, ymin, ymax, M; - xmin := -6.3; xmax := 12.6; - ymin := -2; ymax := 2; - M := 100; - draw (ux*xmin,0) -- (ux*xmax,0); - draw (0,uy*ymin) -- (0,uy*ymax); - pair a[]; - for i=0 upto M: - a[i] := ( - xmin + (i/M)*(xmax-xmin), - sind(180/3.14*( xmin + (i/M)*(xmax-xmin) )) - ) xscaled ux yscaled uy; - endfor; - draw a[0] for i=1 upto M: --a[i] endfor; -endfig; -beginfig(167) - ux:=5mm; - uy:=2mm; - numeric xmin, xmax, ymin, ymax, M; - xmin := -2; xmax := 2; - ymin := -.1; ymax := 8; - M := 100; - draw (ux*xmin,0) -- (ux*xmax,0); - draw (0,uy*ymin) -- (0,uy*ymax); - pair a[]; - for i=0 upto M: - a[i] := ( - xmin + (i/M)*(xmax-xmin), - mexp(256*( xmin + (i/M)*(xmax-xmin) )) - ) xscaled ux yscaled uy; - endfor; - draw a[0] for i=1 upto M: --a[i] endfor; -endfig; -beginfig(168) - ux:=5mm; - uy:=5mm; - numeric xmin, xmax, ymin, ymax, M; - xmin := .2; xmax := 3; - ymin := -1.6; ymax := 1.2; - M := 100; - draw (ux*-.1,0) -- (ux*xmax,0); - draw (0,uy*ymin) -- (0,uy*ymax); - pair a[]; - for i=0 upto M: - a[i] := ( - xmin + (i/M)*(xmax-xmin), - (1/256)*mlog(( xmin + (i/M)*(xmax-xmin) )) - ) xscaled ux yscaled uy; - endfor; - draw a[0] for i=1 upto M: --a[i] endfor; -endfig; -beginfig(169) - path p; - p = fullcircle scaled 2cm; - z0 = (-1cm,0); - draw p; - draw z0 withpen pencircle scaled 2pt; - - pair A[]; - for i=0 step length(p)/100 until length(p): - pair M,N; - M = point i of p; - N-M = whatever * direction i of p; - N-z0 = whatever * direction i of p rotated 90; - A[i] := N; - endfor; - draw for i=0 step length(p)/100 until length(p): - A[i] .. - endfor cycle; -endfig; -beginfig(170) -vardef cardiodide(expr p, O) = - save i,M,N; - numeric i; - for i=0 step length(p)/100 until length(p): - hide( - pair M,N; - M = point i of p; - N-M = whatever * direction i of p; - N-O = whatever * direction i of p rotated 90; - ) - N .. - endfor cycle -enddef; - - path p; - p = fullcircle scaled 2cm; - z0 = (-1cm,0); - draw p; - draw z0 withpen pencircle scaled 2pt; - draw cardiodide(p,z0); -endfig; -beginfig(171) -vardef cardiodide(expr p, O) = - save i,M,N; - numeric i; - for i=0 step length(p)/100 until length(p): - hide( - pair M,N; - M = point i of p; - N-M = whatever * direction i of p; - N-O = whatever * direction i of p rotated 90; - ) - N .. - endfor cycle -enddef; - - path p; - p = fullcircle scaled 2cm; - z0 = (-1cm,0); - pickup pencircle scaled 1pt - draw p; - draw z0 withpen pencircle scaled 3pt; - draw cardiodide(p,z0); - pickup pencircle scaled .4pt - pair M,N; - i:=1.5; - M = point i of p; - N-M = whatever * direction i of p; - N-z0 = whatever * direction i of p rotated 90; - draw z0--N; - draw (-1/2)[N,M]--(3/2)[N,M]; - draw N withpen pencircle scaled 3pt; - draw M withpen pencircle scaled 3pt; -endfig; -beginfig(172) - path p; - p := (-1cm,0) .. (1cm,-1cm) .. (8mm,0) - .. (1cm,1cm) .. (-1cm,1cm) .. cycle; - z0 = (-2cm,0); - draw p withpen pencircle scaled 1bp; - draw z0 withpen pencircle scaled 3pt; - draw cardiodide(p,z0); -endfig; -beginfig(173) -vardef inversion (expr O,k,M) = - if pair M: - (O + k*unitvector(M-O)/abs(M-O)) - elseif path M: - for i=0 step length(M)/100 until length(M): - inversion(O,k,point i of M) .. - endfor - cycle - fi -enddef; - - u:=4cm; - path p[],A,B; - - z0 = (5u,0) rotated 10; - - A = fullcircle scaled 2u; - B = A scaled 3; - draw inversion( z0, 2 (u**2), A ) - withpen pencircle scaled 1pt; - draw inversion( z0, 2 (u**2), B ) - withpen pencircle scaled 1pt; - - p0 = fullcircle scaled 2u shifted (2u,0); - for i=0 upto 5: - if i<>0: - p[i] = p[i-1] rotated (360/6); - fi; - draw inversion( z0, 2 (u**2), p[i] ); - endfor; -endfig; -beginfig(174) - def curve(expr p,i,q,j,t) = - point i of p {direction i of p} .. - tension t .. - point j of q {direction j of q} - enddef; - - vardef sphere_with_holes (expr n) = - save i; - c[0] = fullcircle xscaled u yscaled 2u - shifted (4u,0) rotated (360/(2n)) ; - draw c[0]; - for i=1 upto n-1: - c[i] = c[i-1] rotated (360/n); - draw c[i]; - endfor; - l[0] = curve(c[0], 2, c[1], -2, 1); - draw l[0]; - for i=1 upto n-1: - l[i] = l[i-1] rotated (360/n); - draw l[i]; - endfor; - enddef; - - u:=3mm; - path c[], l[]; - sphere_with_holes(5); -endfig; -beginfig(175) - def curve(expr p,i,q,j,t) = - point i of p {direction i of p} .. - tension t .. - point j of q {direction j of q} - enddef; - - vardef sphere_with_holes (expr n) = - save i; - c[0] = fullcircle xscaled u yscaled 2u - shifted (4u,0) rotated (360/(2n)) ; - for i=1 upto n-1: - c[i] = c[i-1] rotated (360/n); - endfor; - l[0] = curve(c[0], 2, c[1], -2, 1); - for i=1 upto n-1: - l[i] = l[i-1] rotated (360/n); - endfor; - fill for i=0 upto n-1: - ( reverse subpath(2,6) of c[i] ) & - l[i] & - endfor - % To turn it into a cycle (ugly) - point length(l[n-1]) of l[n-1] -- cycle - withcolor .8white; - for i=0 upto n-1: - draw c[i]; draw l[i]; - endfor; - enddef; - - u:=3mm; - path c[], l[]; - sphere_with_holes(5); -endfig; -beginfig(176) - path c[], l[]; - sphere_with_holes(6); - def ellipse(expr a,b,c,d,e) = - draw curve(a,b,c,d,e) ; - draw curve(c,d,a,b,e) dashed evenly; - enddef; - - ellipse (l[0], 2/3, l[2], 1/3, 4); - ellipse (l[1], 2/3, l[3], 1/3, 4); - ellipse (l[2], 2/3, l[4], 1/3, 4); - ellipse (l[3], 2/3, l[5], 1/3, 4); - ellipse (l[4], 2/3, l[0], 1/3, 4); - ellipse (l[5], 2/3, l[1], 1/3, 4); -endfig; -beginfig(177) - vardef bar(expr m,a,b,c) = - m = 1/3a + 1/3b + 1/3c - enddef; - vardef dbar(expr m,a,b,c) = - draw m--a; draw m--b; draw m--c; - draw m withpen pencircle scaled 4bp; - enddef; - - pair P[], A,B,C; - for i=0 upto 4: - P[i] = 1cm * up rotated (i*360/5); - draw P[i] withpen pencircle scaled 4bp; - endfor; - bar(A, P[0], P[4], B); - bar(B, A, P[1], C); - bar(C, B, P[2], P[3]); - draw fullcircle scaled 2cm dashed evenly; - dbar(A, P[0], P[4], B); - dbar(B, A, P[1], C); - dbar(C, B, P[2], P[3]); -endfig; -beginfig(178) -% M est sur la bissectrice de l'angle A -vardef bissectrice(expr M,A,B,C) = - (M-A) = whatever * ( - (A-C) rotated 1/2(angle(B-A) - angle(C-A))) -enddef; - -% Le cercle inscrit -vardef cercle_inscrit(expr A,B,C) = - save M, h; pair M, h; - bissectrice(M,A,B,C); - bissectrice(M,B,C,A); - M-h = whatever * (B-C) rotated 90; - h = whatever[B,C]; - fullcircle scaled 2 length(M-h) shifted M -enddef; - - pair A,B,C,M; - u:=2cm; - A=(0,0); B=(2u,-.5u); C=(u,u); - draw A--B--C--cycle; - bissectrice(M, A,B,C); - bissectrice(M, B,C,A); - draw M--A; draw M--B; draw M--C; - draw cercle_inscrit(A,B,C); -endfig; -beginfig(179) -vardef premiere_trisectrice (expr M, A,B,C) = - (M-A) = whatever * ( (A-B) rotated 1/3 (angle(C-A) - angle(B-A)) ) -enddef; - -vardef deuxieme_trisectrice (expr M, A,B,C) = - (M-A) = whatever * ( (A-B) rotated 2/3 (angle(C-A) - angle(B-A)) ) -enddef; - - pair A,B,C,M[]; - u:=2cm; - A=(0,0); B=(2u,-.5u); C=(u,u); - draw A--B--C--cycle; - - premiere_trisectrice(M1,A,B,C); - deuxieme_trisectrice(M1,B,C,A); - premiere_trisectrice(M2,B,C,A); - deuxieme_trisectrice(M2,C,A,B); - premiere_trisectrice(M3,C,A,B); - deuxieme_trisectrice(M3,A,B,C); - - draw M1--A; draw M1--B; - draw M2--B; draw M2--C; - draw M3--C; draw M3--A; - - draw M1--M2--M3--cycle; -endfig; -beginfig(180) - save arrowhead; - vardef arrowhead expr p = - save A,u; pair A,u; - A := point length(p) of p; - u := unitvector(direction length(p) of p); - A -- (A - ahlength*u rotated 15) -- - (A - ahlength*u rotated -15) -- cycle - enddef; - - u:=1cm; - drawarrow (0,0) .. (-u,u) .. (u,u); -endfig; -beginfig(181) - save arrowhead; - vardef arrowhead expr p = - save A,B,u; pair A,B,u; - A := point length(p) of p; - B := p intersectionpoint - (fullcircle scaled ahlength shifted A); - u := unitvector(direction length(p) of p); - A -- (A - ahlength*u rotated 30) -- B -- - (A - ahlength*u rotated -30) -- cycle - enddef; - - u:=1cm; - drawarrow (0,0) .. (-u,u) .. (u,u); -endfig; -beginfig(182) - save arrowhead; - vardef arrowhead expr p = - save A,u; pair A,u; - A := point length(p) of p; - u := unitvector(direction length(p) of p); - A -- (A - ahlength*u rotated 30) -- A -- - (A - ahlength*u rotated -30) -- cycle - enddef; - - u:=1cm; - drawarrow (0,0) .. (-u,u) .. (u,u); -endfig; -beginfig(183) - save arrowhead; - vardef arrowhead expr p = - save A,u,a,b; pair A,u; path a,b; - A := point length(p) of p; - u := unitvector(direction length(p) of p); - a := A{-u} .. (A - ahlength*u rotated 30); - b := A{-u} .. (A - ahlength*u rotated -30); - ( a & reverse(a) & b & reverse(b) ) --cycle - enddef; - - u:=1cm; - drawarrow (0,0) .. (-u,u) .. (u,u); -endfig; -beginfig(184) - save arrowhead; - vardef arrowhead expr p = - save A,u; pair A,u; - A := point 1/2length(p) of p; - u := unitvector(direction 1/2length(p) of p); - A -- (A - ahlength*u rotated 15) -- - (A - ahlength*u rotated -15) -- cycle - enddef; - - u:=1cm; - drawarrow (0,0) .. (-u,u) .. (u,u); -endfig; -beginfig(185) - save arrowhead; - vardef arrowhead expr p = - save A,B,u; pair A,B,u; - A := point 1/2length(p) of p; - B := p intersectionpoint - (fullcircle scaled ahlength shifted A); - u := unitvector(direction 1/2length(p) of p); - A -- (A - ahlength*u rotated 30) -- B -- - (A - ahlength*u rotated -30) -- cycle - enddef; - - u:=1cm; - drawarrow (0,0) .. (-u,u) .. (u,u); -endfig; -beginfig(186) - save arrowhead; - vardef arrowhead expr p = - save A,u; pair A,u; - A := point 1/2length(p) of p; - u := unitvector(direction 1/2length(p) of p); - A -- (A - ahlength*u rotated 30) -- A -- - (A - ahlength*u rotated -30) -- cycle - enddef; - - u:=1cm; - drawarrow (0,0) .. (-u,u) .. (u,u); -endfig; -beginfig(187) - save arrowhead; - vardef arrowhead expr p = - save A,u,a,b; pair A,u; path a,b; - A := point 1/2length(p) of p; - u := unitvector(direction 1/2length(p) of p); - a := A{-u} .. (A - ahlength*u rotated 30); - b := A{-u} .. (A - ahlength*u rotated -30); - ( a & reverse(a) & b & reverse(b) ) --cycle - enddef; - - u:=1cm; - drawarrow (0,0) .. (-u,u) .. (u,u); -endfig; -beginfig(188) - def drawwhitearrow expr p = _apth:=p; _finwhitearr enddef; - - def _finwhitearr text t = - draw _apth t; - fill arrowhead _apth t withcolor white; - draw arrowhead _apth t - enddef; - - u:=1cm; - drawwhitearrow (0,0) .. (-u,u) .. (u,u); -endfig; -beginfig(189) - def draw_white_arrow expr p = _apth:=p; _fin_white_arr enddef; - def _fin_white_arr text t = - draw _apth t; - fill arrowhead _apth withcolor white; - draw arrowhead _apth t - enddef; - - def draw_middle_arrow expr p = _apth:=p; _fin_middle_arr enddef; - def _fin_middle_arr text t = - draw _apth t; - filldraw arrowhead_middle _apth t - enddef; - vardef arrowhead_middle expr p = - save A,u; pair A,u; - A := point (arctime (.5arclength p) of p) of p; - u := unitvector(direction (arctime (.5arclength p) of p) of p); - A -- (A - ahlength*u rotated (.5ahangle) ) -- - (A - ahlength*u rotated (-.5ahangle) ) -- cycle - enddef; - - def draw_middle_white_arrow expr p = _apth:=p; _fin_middle_white_arr enddef; - let draw_white_middle_arrow = draw_middle_white_arrow; - def _fin_middle_white_arr text t = - draw _apth t; - fill arrowhead_middle _apth t withcolor white; - draw arrowhead_middle _apth t - enddef; - - def draw_other_arrow expr p = _apth:=p; _fin_other_arr enddef; - def _fin_other_arr text t = - draw _apth t; - draw arrowhead_other _apth t - enddef; - vardef arrowhead_other expr p = - save A,u,a,b; pair A,u; path a,b; - A := point (length p) of p; - u := unitvector(direction (length p) of p); - a := A{-u} .. (A - ahlength*u rotated 30); - b := A{-u} .. (A - ahlength*u rotated -30); - ( a & reverse(a) & b & reverse(b) ) --cycle - enddef; - - def draw_other_middle_arrow expr p = _apth:=p; _fin_other_middle_arr enddef; - let draw_middle_other_arrow = draw_other_middle_arrow; - def _fin_other_middle_arr text t = - draw _apth t; - draw arrowhead_other_middle _apth t - enddef; - vardef arrowhead_other_middle expr p = - save A,u,a,b; pair A,u; path a,b; - A := point (arctime (.5arclength p) of p) of p; - u := unitvector(direction (arctime (.5arclength p) of p) of p); - a := A{-u} .. (A - ahlength*u rotated 30); - b := A{-u} .. (A - ahlength*u rotated -30); - ( a & reverse(a) & b & reverse(b) ) --cycle - enddef; - - path p; - p := halfcircle scaled 2cm; - p := (0,0) .. (3cm,1cm) .. (-1cm,3cm); - p := p scaled .3; - draw_middle_arrow p; - draw_white_arrow p scaled 1.3 withpen pencircle scaled 1bp; - draw_white_middle_arrow p scaled 1.6; - draw_other_middle_arrow p scaled 1.8 withpen pencircle scaled 1bp; - draw_other_arrow p scaled 2 withpen pencircle scaled 1bp; -endfig; -beginfig(190) - vardef mylabel(expr pic, p, t) = - save A; pair A; - A = point t of p + - 8bp * unitvector(direction t of p) rotated 90; - label(pic, A); - enddef; - path p; u:=1cm; - p = (0,0)..(-u,u)..(u,u); - draw p; - for i=0 step .2 until length(p): - draw point i of p withpen pencircle scaled 4bp; - mylabel(btex $A$ etex,p,i); - endfor; -endfig; -beginfig(191) - vardef mylabel(expr pic, p, t) = - save A; pair A; - A = point t of p + - 8bp * unitvector(direction t of p) rotated 90; - label(pic, A); - enddef; - path p; u:=1cm; - p = (0,0)..(-u,u)..(u,u); - draw p; - for i=0 step .2 until length(p): - draw point i of p withpen pencircle scaled 4bp; - mylabel(TEX decimal(i),p,i); - endfor; -endfig; -beginfig(192) - vardef mylabel(expr pic, p, t) = - save A,a; pair A; numeric a; - a := angle(direction t of p rotated 90); - show(a); - a := a + 45/2; - if a>180: a := a - 360 fi; - save ll, lr, ul, ur; - pair ul,ur,ll,lr; - ll := llcorner pic; - lr := lrcorner pic; - ul := ulcorner pic; - ur := urcorner pic; - A = point t of p + - 8bp * unitvector(direction t of p) rotated 90; - label(pic shifted ll, A + - if (a >= 0) and (a <= 45): 1/2(ur-ul) - elseif (a >= 45) and (a <= 90): 1/2(ur-ul) + 1/2(ur-lr) - elseif (a >= 90) and (a <= 135): 1/2(ur-lr) - elseif (a >= 135) and (a <= 180): 1/2(ll-lr) + 1/2(ur-lr) - elseif (a >= -180) and (a <= -135): 1/2(ll-lr) - elseif (a >= -135) and (a <= -90): 1/2(ll-ul) + 1/2(ll-lr) - elseif (a >= -90) and (a <= -45): 1/2(ll-ul) - elseif (a >= -45) and (a <= 0): 1/2(ll-ul) - 1/2(ll-lr) - else: hide(show "BUG") (0,0) - fi); - draw A withpen pencircle scaled 2bp withcolor red; - enddef; - path p; u:=1cm; - p = (0,0)..(-u,u)..(u,u); - p := reverse fullcircle scaled 2u; - draw p; - for i=0 step length(p)/10 until length(p): - draw point i of p withpen pencircle scaled 4bp; - mylabel(TEX decimal(i),p,i); - endfor; -endfig; -beginfig(193) - n:=8; - u:=5mm; - for i=0 upto n-1: - for j=0 upto n-1: - if odd(i+j): - fill (0,0)--(u,0)--(u,u)--(0,u)--cycle - shifted (i*u,j*u) withcolor .8white; - fi; - endfor; - endfor; - for i=0 upto n: - draw (0,i*u)--(n*u,i*u); - draw (i*u,0)--(i*u,n*u); - endfor; -endfig; -beginfig(194) - n:=8; - u:=5mm; - for i=0 upto n-1: - for j=0 upto n-1: - if odd(i+j): - for k=0 step u/5 until u: - draw ( (k,0)--(u,u-k) ) - shifted (i*u,j*u); - draw ( (0,k)--(u-k,u) ) - shifted (i*u,j*u); - endfor; - fi; - endfor; - endfor; - for i=0 upto n: - draw (0,i*u)--(n*u,i*u); - draw (i*u,0)--(i*u,n*u); - endfor; -endfig; -beginfig(195) - n:=8; - u:=5mm; - for i=0 upto n-1: - for j=0 upto n-1: - if odd(i+j): - for k=0 step u/5 until 4/5 u: - if odd(k*5/u): - fill ( (k,0)--(u,u-k)--(u,u-k-u/5)-- - (k+u/5,0)--cycle ) - shifted (i*u,j*u) withcolor .8white; - else: - fill ( (0,k)--(u-k,u)--(u-k-u/5,u)-- - (0,k+u/5)--cycle ) - shifted (i*u,j*u) withcolor .8white; - fi; - endfor; - fi; - endfor; - endfor; - for i=0 upto n: - draw (0,i*u)--(n*u,i*u); - draw (i*u,0)--(i*u,n*u); - endfor; -endfig; -beginfig(196) - vardef trace (suffix f)(expr a,b,inc) = - save i; numeric i; - for i=a step inc until b: - (i*1cm, f(i)*1cm) .. - endfor (b*1cm, f(b)*1cm) - enddef; - - vardef axes = - save p; picture p; - p:=nullpicture; - addto p doublepath (-infinity,0)--(infinity,0) withpen currentpen; - addto p doublepath (0,-infinity)--(0,infinity) withpen currentpen; - clip p to bbox currentpicture; - draw p; - enddef; - - vardef trace_rectangles_left (suffix f)(expr a,b,inc) = - save i; numeric i; - for i=a step inc until b-inc: - path p; - p = (i,0)--(i+inc,0)--(i+inc,f(i))--(i,f(i))--cycle; - p := p scaled 1cm; - fill p withcolor .8*white; - draw p; - endfor; - enddef; - - vardef f(expr x) = 2 ** x enddef; - - trace_rectangles_left(f,-2,2,.5); - draw trace(f, -2,2,.1); - axes; -endfig; -beginfig(197) - vardef trace_trapezes (suffix f)(expr a,b,inc) = - save i; numeric i; - for i=a step inc until b-inc: - path p; - p = (i,0)--(i+inc,0)--(i+inc,f(i+inc))--(i,f(i))--cycle; - p := p scaled 1cm; - fill p withcolor .8*white; - draw p; - endfor; - enddef; - - vardef f(expr x) = 4 - x**2 enddef; - - trace_trapezes(f,-2,2,.5); - draw trace(f, -2,2,.1); - axes; -endfig; -beginfig(198) - vardef trace_rectangles_right (suffix f)(expr a,b,inc) = - save i; numeric i; - for i=a step inc until b-inc: - path p; - p = (i,0)--(i+inc,0)--(i+inc,f(i+inc))--(i,f(i+inc))--cycle; - p := p scaled 1cm; - fill p withcolor .8*white; - draw p; - endfor; - enddef; - - trace_rectangles_right(f,-2,2,.5); - draw trace(f, -2,2,.1); - axes; -endfig; -beginfig(199) - vardef maxf(suffix f)(expr a,b) = - save m,i; numeric m,i; - m:=f(a); - for i=a step (b-a)/100 until b: - if mf(i): m:=f(i); fi; - endfor; - m - enddef; - - vardef trace_rectangles_min (suffix f)(expr a,b,inc) = - save i; numeric i; - for i=a step inc until b-inc: - path p; numeric m; - m:=minf(f,i,i+inc); - p = (i,0)--(i+inc,0)--(i+inc,m)--(i,m)--cycle; - p := p scaled 1cm; - fill p withcolor .8*white; - draw p; - endfor; - enddef; - - vardef f(expr x) = 4 - x**2 enddef; - - trace_rectangles_min(f,-2,2,.5); - draw trace(f, -2,2,.1); - axes; -endfig; -beginfig(201) - u:=2cm; - vardef koch(expr A,B,n) = - save C; pair C; - C = A rotatedaround(1/3[A,B], 120); - if n>0: - koch( A, 1/3[A,B], n-1); - koch( 1/3[A,B], C, n-1); - koch( C, 2/3[A,B], n-1); - koch( 2/3[A,B], B, n-1); - else: - draw A--1/3[A,B]--C--2/3[A,B]--B; - fi; - enddef; - z0=(u,0); - z1=z0 rotated 120; - z2=z1 rotated 120; - koch( z0, z1, 4 ); - koch( z1, z2, 4 ); - koch( z2, z0, 4 ); -endfig; -beginfig(202) - u:=2cm; - vardef koch(expr A,B,n) = - save C; pair C; - C = A rotatedaround(1/3[A,B], -120); - if n>0: - koch( A, 1/3[A,B], n-1); - koch( 1/3[A,B], C, n-1); - koch( C, 2/3[A,B], n-1); - koch( 2/3[A,B], B, n-1); - else: - draw A--1/3[A,B]--C--2/3[A,B]--B; - fi; - enddef; - z0=(u,0); - z1=z0 rotated 120; - z2=z1 rotated 120; - koch( z0, z1, 4 ); - koch( z1, z2, 4 ); - koch( z2, z0, 4 ); -endfig; -beginfig(203) - pair A,B,C,D; - u := 3cm; - A := (0,0); - B := (u,0); - D := B rotated 72; - C := (u,0) + D; - draw A--B--C--D--cycle; - draw A--C; - draw btex $B'$ etex shifted 1/3 (A+B+C); - draw btex $B$ etex shifted 1/3 (A+D+C); - -endfig; -beginfig(204) - pair A,B,C,D,E,F; - numeric d[]; - u := 3cm; - A := (0,0); - B := (u,0); - D := B rotated 72; - C := (u,0) + D; - d[0] := 1; - d[1] := sqrt( 2*(1+cosd(72)) ); - d[2] := sqrt( 2*(1-cosd(36)) ); - A := A; - B := C; - C := D; - draw A--B--C--cycle; - E := (d1/(d0+d1)) [A,C]; - F := (d0/(d0+d2)) [A,B]; - draw E--C--F--cycle; - draw btex $A$ etex shifted 1/3(E+C+F); - draw B--C--F--cycle; - draw btex $B$ etex shifted 1/3(B+C+E); - draw E--F--A--cycle; - draw btex $B'$ etex shifted 1/3(E+F+A); -endfig; -beginfig(205) - pair A,B,C,D,E,F; - numeric d[]; - u := 3cm; - A := (0,0); - B := (u,0); - D := B rotated 72; - C := (u,0) + D; - draw A--B--C--cycle; - d[0] := 1; - d[1] := sqrt( 2*(1+cosd(72)) ); - d[2] := sqrt( 2*(1-cosd(36)) ); - E := (d1/(d0+d1)) [A,C]; - F := (d0/(d0+d2)) [A,B]; - draw E--F--B--cycle; - draw btex $A'$ etex shifted 1/3(E+F+B); - draw E--A--F--cycle; - draw btex $B$ etex shifted 1/3(E+A+F); - draw C--E--B--cycle; - draw btex $B'$ etex shifted 1/3(C+E+B); -endfig; -beginfig(206) - pair A,B,C,D,E,F; - numeric d[]; - u := 3cm; - A := (0,0); - B := (u,0); - D := B rotated 72; - C := (u,0) + D; - d[0] := 1; - d[1] := sqrt( 2*(1+cosd(72)) ); - d[2] := sqrt( 2*(1-cosd(36)) ); - A := A; - B := C; - C := D; - E := (d1/(d0+d1)) [A,C]; - F := (d0/(d0+d2)) [A,B]; - B := 3*(C-E); - C := 3*(F-E); - - draw A--B--C--cycle; - - D := (d0/(d0+d2)) [C,A]; - draw B--C--D--cycle; - draw btex $A$ etex shifted 1/3(B+C+D); - draw B--D--A--cycle; - draw btex $B'$ etex shifted 1/3(B+D+A); -endfig; -beginfig(207) - pair A,B,C,D,E,F; - numeric d[]; - u := 3cm; - A := (0,0); - B := (u,0); - D := B rotated 72; - C := (u,0) + D; - d[0] := 1; - d[1] := sqrt( 2*(1+cosd(72)) ); - d[2] := sqrt( 2*(1-cosd(36)) ); - - % B' - E := (d1/(d0+d1)) [A,C]; - F := (d0/(d0+d2)) [A,B]; - - % A' - A := 2*(E-E); - C := 2*(B-E); - B := 2*(F-E); - - draw A--B--C--cycle; - D := (d0/(d0+d2)) [A,B]; - draw C--D--B--cycle; - draw btex $A'$ etex shifted 1/3(C+D+B); - draw C--A--D--cycle; - draw btex $B$ etex shifted 1/3(C+A+D); -endfig; -beginfig(208) - vardef pave(expr t, A, B, C, n) = - save D, E, d; - pair D,E; - numeric d[]; - d[0] := 1; - d[1] := sqrt( 2*(1+cosd(72)) ); - d[2] := sqrt( 2*(1-cosd(36)) ); - if n>0: - if t=1: - D := (d0/(d0+d2)) [A,C]; - pave(1,B,C,D,n-1); - pave(4,B,D,A,n-1); - elseif t=2: - D := (d0/(d0+d2)) [A,B]; - pave(2,C,D,B,n-1); - pave(3,C,A,D,n-1); - elseif t=3: - D := (d1/(d0+d1)) [A,B]; - E := (d0/(d0+d2)) [A,C]; - pave(1,D,C,E,n-1); - pave(3,B,C,D,n-1); - pave(4,D,E,A,n-1); - elseif t=4: - D := (d1/(d0+d1)) [A,C]; - E := (d0/(d0+d2)) [A,B]; - pave(2,D,E,B,n-1); - pave(3,D,A,E,n-1); - pave(4,C,D,B,n-1); - fi; - else: - draw A--B--C--cycle; - if t=1: - fill A--B--C--cycle withcolor green + blue; - draw A--C withpen pencircle scaled 1bp; - draw A--B withpen pencircle scaled 1bp; - elseif t=2: - fill A--B--C--cycle withcolor green + blue; - draw A--B withpen pencircle scaled 1bp; - draw A--B withpen pencircle scaled 1bp; - elseif t=3: - fill A--B--C--cycle withcolor green + red; - draw A--C withpen pencircle scaled 1bp; - draw C--B withpen pencircle scaled 1bp; - elseif t=4: - fill A--B--C--cycle withcolor green + red; - draw B--C withpen pencircle scaled 1bp; - draw A--B withpen pencircle scaled 1bp; - fi; - fi; - enddef; - numeric M; - M := 6; - pair A,B,C,D; - u := 3cm; - A := (0,0); - B := (u,0); - D := B rotated 72; - C := (u,0) + D; - pave(3,A,C,D,M); - pave(4,A,B,C,M); -endfig; -beginfig(209) -u:=1cm; - -def milieu (expr s, ss, n) = - if n<>0: - for i="A","BA","BBA": - milieu(s&i, ss, n-1); - endfor; - else: - dessine(s&ss); - fi; -enddef; - -def doit(expr N) = - for n=1 upto N: - for i="A","BA","BBA": - for j="","B","BB": - milieu(i,j,n-1); - endfor; - endfor; - endfor; - milieu("","",0); -enddef; - -vardef A(expr a) = - save x,y,n; - numeric x,y,n; - x := xpart a; - y := ypart a; - n:=x*x+y*y; - (-x/n, y/n) -enddef; - -vardef B(expr a) = - save x,y,n; - numeric x,y,n; - x := 1 + xpart a; - y := ypart a; - n := x*x+y*y; - (-x/n, y/n) -enddef; - -def dessine(expr s) = - _dessine(s, dir(60), up, dir(120)); - _dessine(s, dir(60), dir(31), dir(2)); - _dessine(s, dir(120), dir(149), dir(178)); -enddef; - -def _dessine(expr s, a,b,c) = - pair p[]; - p[0] := a; - p[1] := b; - p[2] := c; - - for i=0 upto length(s)-1: - if (substring(i,i+1) of s) = "A": - for j=0 upto 2: p[j] := A( p[j] ); endfor; - elseif (substring(i,i+1) of s) = "B": - for j=0 upto 2: p[j] := B( p[j] ); endfor; - else: show("Ceci n'est pas un générateur : "&substring(i,i+1) of s) - fi; - endfor; - if (xpart p[0] < 2) and (xpart p[0] > -2) and - (xpart p[2] > -2) and (xpart p[2] < 2) and - (ypart p[0] < 2) and (ypart p[2] < 2): - draw ( p[0] .. p[1] .. p[2] ) scaled u; - fi; - -enddef; - - fill (dir(60) .. up .. dir(120) -- - (dir120+up) -- (dir60+up) -- cycle) scaled u - withcolor red+green; - doit(7); - draw (u*dir(60)) withpen pencircle scaled 4bp; - draw (0,u) withpen pencircle scaled 4bp; - draw (u*dir(60) -- u*dir(60)+u*up) shifted (0u,0); - draw (u*dir(60) -- u*dir(60)+u*up) shifted (1u,0); - draw (u*dir(60) -- u*dir(60)+u*up) shifted (-u,0); - draw (u*dir(60) -- u*dir(60)+u*up) shifted (-2u,0); -endfig; -beginfig(210) - u:=5mm; - pickup pencircle scaled 1pt; - for i=0 upto 500: - draw (u*normaldeviate, u*normaldeviate); - endfor; -endfig; -beginfig(211) - u:=2cm; - pickup pencircle scaled 1pt; - for i=0 upto 500: - draw (u*uniformdeviate(1), u*uniformdeviate(1)); - endfor; -endfig; -beginfig(212) - numeric n; - n:=10; - path p; - p := for i=0 upto n-1: - ((1cm + 3mm*normaldeviate,0) rotated (i*360/n)) .. - endfor cycle; - fill p withcolor .8white; - draw p; -endfig; -beginfig(213) - m:=500; - u:=1cm; - pair A,B; - A:=(0,0); - for i=0 upto m: - B:=(i/m*3u, (ypart A)+normaldeviate/m*30u); - draw A--B; - A:=B; - endfor; - draw (0,0)--(3u,0); -endfig; -beginfig(214) - m:=50; - pair A[], B[]; - A[0]=(0,0); - for i=0 upto m: - A[i+1]=(i/m*3u, (ypart A[i])+(uniformdeviate(2)-1)/m*30u); - endfor; - B[0]=A[0]; - B[1]=A[1]; - B[2]=A[2]; - B[3]=A[3]; - for i=4 upto m+1: - B[i] = ( A[i-4] + A[i-3] + A[i-2] + A[i-1] + A[i])/5; - endfor; - for i=0 upto m: - draw B[i]--B[i+1] withpen pencircle scaled 2pt - withcolor .5*white; - endfor; - for i=0 upto m: - draw A[i]--A[i+1]; - endfor; - draw (0,0)--(3u,0); -endfig; -def rescale_currentpic := - if xpart (lrcorner currentpicture - llcorner currentpicture) > 4cm: - currentpicture := currentpicture scaled ( 4cm / - xpart (lrcorner currentpicture - llcorner currentpicture) ); - fi; -enddef; -beginfig(215) -vardef check_pascal = - save again; - boolean again; - again := false; - % Distance entre deux points sur le cercle : au moins 1mm - for i=0 upto 5: - for j=i+1 upto 5: - show( decimal(i) &" "& decimal(j) &" "& decimal(abs(A[i]-A[j])/2mm) ); - if abs(A[i]-A[j]) < 2mm: - again := true; - fi; - endfor; - endfor; - % Distance entre deux des M[i] : au moins 2mm, au plus 10cm - for i=0 upto 2: - for j=i+1 upto 2: - if (abs(M[i]-M[j]) > 10cm) or (abs(M[i]-M[j]) < 2mm): - again := true; - fi; - endfor; - endfor; - % Distance entre un A[i] et un M[i] : au moins 2mm - for i=0 upto 5: - for j=0 upto 2: - if abs(A[i]-M[j]) < 2mm: - again := true; - fi; - endfor; - endfor; - % Distance entre le cercle et l'un des M[i] : au plus 10cm - if abs(M[0])>10cm: - again:=true; - fi; - show again; - not again -enddef; - - forever: - path C; - C := fullcircle scaled 6cm; - pair A[], M[]; - for i=0 upto 5: - A[i] := point uniformdeviate(length(C)) of C; - endfor; - M[0] = whatever[ A[0], A[1] ]; - M[0] = whatever[ A[3], A[4] ]; - M[1] = whatever[ A[1], A[2] ]; - M[1] = whatever[ A[4], A[5] ]; - M[2] = whatever[ A[2], A[3] ]; - M[2] = whatever[ A[5], A[0] ]; - exitif check_pascal; - endfor; - - draw C; - draw A[0]--A[1] withcolor red; - draw A[3]--A[4] withcolor red; - draw A[0]--M[0] withcolor red dashed evenly; - draw A[3]--M[0] withcolor red dashed evenly; - - draw A[1]--A[2] withcolor green; - draw A[4]--A[5] withcolor green; - draw A[1]--M[1] withcolor green dashed evenly; - draw A[4]--M[1] withcolor green dashed evenly; - - draw A[2]--A[3] withcolor blue; - draw A[5]--A[0] withcolor blue; - draw A[2]--M[2] withcolor blue dashed evenly; - draw A[5]--M[2] withcolor blue dashed evenly; - - draw M[0]--M[1]--M[2]--cycle withpen pencircle scaled 2bp; - for i=0 upto 2: - draw M[i] withpen pencircle scaled 6bp; - endfor; - for i=0 upto 5: - draw A[i] withpen pencircle scaled 6bp; - endfor; - rescale_currentpic; -endfig; -beginfig(216) -vardef pascal(expr C) = - forever: - pair A[], M[]; - for i=0 upto 5: - A[i] := point uniformdeviate(length(C)) of C; - endfor; - M[0] = whatever[ A[0], A[1] ]; - M[0] = whatever[ A[3], A[4] ]; - M[1] = whatever[ A[1], A[2] ]; - M[1] = whatever[ A[4], A[5] ]; - M[2] = whatever[ A[2], A[3] ]; - M[2] = whatever[ A[5], A[0] ]; - exitif check_pascal; - endfor; - - draw C; - draw A[0]--A[1] withcolor red; - draw A[3]--A[4] withcolor red; - draw A[0]--M[0] withcolor red dashed evenly; - draw A[3]--M[0] withcolor red dashed evenly; - - draw A[1]--A[2] withcolor green; - draw A[4]--A[5] withcolor green; - draw A[1]--M[1] withcolor green dashed evenly; - draw A[4]--M[1] withcolor green dashed evenly; - - draw A[2]--A[3] withcolor blue; - draw A[5]--A[0] withcolor blue; - draw A[2]--M[2] withcolor blue dashed evenly; - draw A[5]--M[2] withcolor blue dashed evenly; - - draw M[0]--M[1]--M[2]--cycle withpen pencircle scaled 2bp; - for i=0 upto 2: - draw M[i] withpen pencircle scaled 6bp; - endfor; - for i=0 upto 5: - draw A[i] withpen pencircle scaled 6bp; - endfor; -enddef; - - pascal(fullcircle xscaled 6cm yscaled 3cm); - rescale_currentpic; -endfig; -beginfig(217) - pascal((for i=-2cm step .1cm until 2cm: - (i, (i/1cm)**2 *1cm) .. - endfor (2.1cm,4.41cm)) rotated 30); - rescale_currentpic; -endfig; -beginfig(218) -vardef pascal(expr C) = - forever: - pair A[], M[]; - - numeric t[]; - for i=0 upto 5: - t[i] = uniformdeviate(length(C)); - endfor; - for i=0 upto 5: - for j=0 upto 4: - if t[j]>t[j+1]: - tt:=t[j]; t[j]:=t[j+1]; t[j+1]:=tt; - fi; - endfor; - endfor; - for i=0 upto 5: - A[i] = point t[i] of C; - endfor; - - M[0] = whatever[ A[0], A[1] ]; - M[0] = whatever[ A[3], A[4] ]; - M[1] = whatever[ A[1], A[2] ]; - M[1] = whatever[ A[4], A[5] ]; - M[2] = whatever[ A[2], A[3] ]; - M[2] = whatever[ A[5], A[0] ]; - exitif check_pascal; - endfor; - - draw C; - draw A[0]--A[1] withcolor red; - draw A[3]--A[4] withcolor red; - draw A[0]--M[0] withcolor red dashed evenly; - draw A[3]--M[0] withcolor red dashed evenly; - - draw A[1]--A[2] withcolor green; - draw A[4]--A[5] withcolor green; - draw A[1]--M[1] withcolor green dashed evenly; - draw A[4]--M[1] withcolor green dashed evenly; - - draw A[2]--A[3] withcolor blue; - draw A[5]--A[0] withcolor blue; - draw A[2]--M[2] withcolor blue dashed evenly; - draw A[5]--M[2] withcolor blue dashed evenly; - - draw M[0]--M[1]--M[2]--cycle withpen pencircle scaled 2bp; - for i=0 upto 2: - draw M[i] withpen pencircle scaled 6bp; - endfor; - for i=0 upto 5: - draw A[i] withpen pencircle scaled 6bp; - endfor; -enddef; - - pascal(fullcircle scaled 6cm); - rescale_currentpic; -endfig; -beginfig(219) - pascal(fullcircle xscaled 6cm yscaled 3cm); - rescale_currentpic; -endfig; -beginfig(220) - pascal(fullcircle xscaled 6cm yscaled 3cm); - rescale_currentpic; -endfig; -beginfig(221) - vardef barycentre(text t) = - save n, G; - pair G; numeric n; - G := origin; n:=0; - for a=t: - G:=G+a; - n:=n+1; - endfor; - G/n - enddef; - - pair A[]; - n:=10; - for i=0 upto n: - A[i] = 1cm*(normaldeviate, normaldeviate); - draw A[i] withpen pencircle scaled 4bp; - endfor; - draw barycentre(A[0] for i=1 upto 10: ,A[i] endfor) - withpen pencircle scaled 4bp withcolor red; -endfig; -beginfig(222) - vardef barycentre(text t) = - save a, i, n, G, X; - pair G,X; numeric n,i; - G := origin; n:=0; i:=0; - for a=t: - show("i = "& decimal(i)); - show a; - if odd(i): - show("odd"); - n:=n+a; - G:= G + a*X; - else: - show("even"); - X:=a; - fi; - i:=i+1; - endfor; - G/n - enddef; - - pair A[]; - n:=10; - for i=0 upto n: - A[i] = 1cm*(normaldeviate, normaldeviate); - draw A[i] withpen pencircle scaled 4bp; - endfor; - draw barycentre(A[0],0 for i=1 upto 10: ,A[i],i endfor) - withpen pencircle scaled 4bp withcolor red; -endfig; -beginfig(223) - numeric n; - n:=10; - path p; - p := for i=0 upto n-1: - ((1cm + 3mm*normaldeviate,0) rotated (i*360/n)) .. - endfor cycle; - for i=0 step 2mm until 3cm: - draw fullcircle scaled i; - endfor; - clip currentpicture to p; - draw p; - -endfig; -beginfig(224) - u := 5mm; - draw (-2u,0) -- (2u,0); - draw (0,-u) -- (0,4u); - draw (-2u,4u) for i=-1.9 step .1 until 2.01: .. (i*u, i*i*u) endfor - withpen pencircle scaled 1bp; - draw bbox currentpicture withpen pensquare scaled 2bp withcolor .8white; - draw bbox currentpicture withpen pensquare scaled 2bp withcolor .8white; -endfig; -beginfig(225) - path p; - p := (0,0) -- (2cm,0); - def doit (suffix p)(expr t) = - begingroup - interim linecap := t; - draw p withpen pencircle scaled 5mm withcolor .8white; - endgroup; - draw point 0 of p withpen pencircle scaled 4bp; - draw point 1 of p withpen pencircle scaled 4bp; - p := p shifted (0,-7mm) - enddef; - doit(p,rounded); - doit(p,butt); - doit(p,squared); - -endfig; -beginfig(226) - path p; - p := (0,0) -- (1cm,5mm) -- (2cm,0); - def doit (suffix p)(expr t) = - begingroup - interim linejoin := t; - draw p withpen pencircle scaled 5mm withcolor .8white; - endgroup; - draw point 0 of p withpen pencircle scaled 4bp; - draw point 1 of p withpen pencircle scaled 4bp; - draw point 2 of p withpen pencircle scaled 4bp; - p := p shifted (0,-7mm) - enddef; - doit(p,rounded); - doit(p,mitered); - doit(p,beveled); - -endfig; -beginfig(227) - path p; - p := (0,0) -- (2cm,0); - vardef doit (suffix p)(expr t) = - interim linecap := t; - draw p withpen pencircle scaled 5mm withcolor .8white; - draw point 0 of p withpen pencircle scaled 4bp; - draw point 1 of p withpen pencircle scaled 4bp; - draw point 2 of p withpen pencircle scaled 4bp; - p := p shifted (0,-7mm) - enddef; - doit(p,rounded); - doit(p,butt); - doit(p,squared); - -endfig; -beginfig(228) - draw fullcircle scaled 2cm; - special("0 0 moveto 10 10 rlineto -10 10 rlineto stroke"); - -endfig; -beginfig(229) - draw fullcircle shifted (.5,.5) xscaled 18.2cm yscaled 4cm; - special( - "/Times-Roman findfont 150 scalefont setfont " & - "0 0 moveto (ABCabc) false charpath clip stroke " & - "gsave 300 0 translate " & - " 2 4 600 {dup 0 moveto 0 exch 0 exch 0 360 arc stroke} for " & - "grestore " - ); - -endfig; -beginfig(230) - draw fullcircle shifted (.5,.5) xscaled 18.2cm yscaled 4cm; - special( - "gsave " & - "/Times-Roman findfont 150 scalefont setfont " & - "0 0 moveto (ABCabc) false charpath clip stroke " & - "gsave 300 0 translate " & - " 2 4 600 {dup 0 moveto 0 exch 0 exch 0 360 arc stroke} for " & - "grestore " & - "grestore " - ); - -endfig; -beginfig(231) - path p; - p = - (0,u) - for i=.1 step .1 until 10: - hide( pair A; A = (i*u, (sind (i*180/3.14))/i *u); - draw A withpen pencircle scaled 2pt ) - .. A - endfor; - draw p; -endfig; -beginfig(232) -vardef inversion (expr O,k,M) = - if pair M: - (O + k*unitvector(M-O)/abs(M-O)) - elseif path M: - for i=0 step length(M)/10 until length(M): - hide( - draw O--inversion(O,k,point i of M)--(point i of M); - draw inversion(O,k,point i of M) withpen pencircle scaled 2pt; - draw point i of M withpen pencircle scaled 2pt withcolor red; - draw O withpen pencircle scaled 2pt; - ) - inversion(O,k,point i of M) .. - endfor - cycle - fi -enddef; - - path p[]; - p1=fullcircle scaled 2u shifted (u,0); - p2=fullcircle scaled 2u shifted (-u,0); - draw p1 dashed withdots scaled .25; - draw p2 dashed withdots scaled .25; - z0 = (.5u,2u); - draw inversion( z0, 2 (u**2), p1 ); - draw inversion( z0, 2 (u**2), p2 ); -endfig; -beginfig(233) - path p; - p := (0,0) -- (1cm,0); - show ahangle; - begingroup - interim ahangle := 30; - interim linejoin := mitered; - interim linecap := butt; - drawarrow p withpen pencircle scaled 2bp; - endgroup; - begingroup - interim ahangle := 60; - drawarrow p shifted (0,-5mm) withpen pencircle scaled 2bp; - endgroup; - -endfig; -beginfig(234) - numeric x; - x = sind(60); - draw TEX("$\sin 60 = " & decimal(x) & "$"); - -endfig; -beginfig(235) -picture _TEX_pic; - -def largeur(expr p) = - if picture p: - xpart( lrcorner(p) - llcorner(p) ) - elseif string p: - hide(_TEX_pic := TEX(p);) - xpart( lrcorner(_TEX_pic) - llcorner(_TEX_pic) ) - else: - hide( errmessage("largeur: wrong type"); 0) - fi -enddef; - -def hauteur(expr p) = - if picture p: - ypart(ulcorner(p)) - elseif string p: - hide(_TEX_pic := TEX(p);) - ypart(ulcorner(_TEX_pic)) - else: - hide( errmessage("hauteur: wrong type"); 0) - fi -enddef; - -def profondeur (expr p) = - if picture p: - -ypart(llcorner(p)) - elseif string p: - hide(_TEX_pic := TEX(p);) - -ypart(llcorner(_TEX_pic)) - else: - hide( errmessage("profondeur: wrong type"); 0) - fi -enddef; - - picture p; - string s; - s := "\huge\LaTeX"; - p := TEX(s); - drawarrow (0,0) -- (largeur(s),0) withcolor red; - drawarrow (0,0) -- (0,hauteur(s)) withcolor green; - drawarrow (0,0) -- (0,-profondeur(s)) withcolor blue; - draw p; - draw bbox p; -endfig; -beginfig(236) - def reddraw text t = draw t withcolor red enddef; - draw (0,0) -- (2cm,0); - reddraw (0,0) -- (2cm,5mm) withpen pencircle scaled 2bp; - -endfig; -beginfig(237) -path _myfill_p; - -def myfill expr p = - _myfill_p := p; - _myfill -enddef; - -def _myfill text t = - fill _myfill_p t; - draw _myfill_p t withcolor red; -enddef; - - myfill fullcircle scaled 1cm withcolor .8white withpen pencircle scaled 2bp; -endfig; -beginfig(238) - boxit.a(btex Essai etex); - a.c = (0,0); - drawboxed(a); - -endfig; -beginfig(239) - circleit.a(btex Essai etex); - a.c = (0,0); - drawboxed(a); - -endfig; -beginfig(240) - rboxit.a(btex Essai etex); - a.c = (0,0); - drawboxed(a); - -endfig; -beginfig(241) - boxit.a(btex Essai etex); - a.c = (0,0); - drawunboxed(a); - -endfig; -beginfig(242) - circleit.a(btex Essai etex); - a.c = (0,0); - a.dx = a.dy; - drawboxed(a); -endfig; -beginfig(243) - circleit.a(btex Essai etex); - a.c = (0,0); - a.dx = a.dy; - drawunboxed(a); - for i=0 step 10 until 360: - draw (0,0) -- 1cm*right rotated i cutbefore bpath.a; - endfor; -endfig; -beginfig(244) - circleit.a(btex Début etex); - a.c = (0,0); - a.dx = a.dy; - circleit.b(btex Fin etex); - b.c = (2cm,0); - b.dx = b.dy; - drawboxed(a,b); - drawarrow a.c {dir 45} .. b.c {dir -45} - cutbefore bpath.a cutafter bpath.b; - drawarrow b.c {dir -135} .. a.c {dir 135} - cutbefore bpath.b cutafter bpath.a; -endfig; -beginfig(245) - circleit.a(btex Début etex); - a.c = (0,0); - a.dx = a.dy; - circleit.b(btex Fin etex); - b.c = (2cm,0); - b.dx = b.dy; - drawunboxed(a,b); - drawarrow a.c {dir 45} .. b.c {dir -45} - cutbefore bpath.a cutafter bpath.b; - drawarrow b.c {dir -135} .. a.c {dir 135} - cutbefore bpath.b cutafter bpath.a; -endfig; -beginfig(246) - boxjoin( - a.dx = a.dy; - b.dx = b.dy; - a.e + (5mm,0) = b.w; - ); - circleit.a(btex Début etex); - a.c = (0,0); - circleit.b(btex Fin etex); - drawboxed(a,b); - drawarrow a.c {dir 45} .. b.c {dir -45} - cutbefore bpath.a cutafter bpath.b; - drawarrow b.c {dir -135} .. a.c {dir 135} - cutbefore bpath.b cutafter bpath.a; -endfig; -beginfig(247) - % Toujours mettre la commande boxjoin au début. - boxjoin(a.e = b.w); - boxit.a(btex A etex); - boxit.b(btex B etex); - boxit.c(btex C etex); - boxit.d(btex D etex); - drawboxed(a,b,c,d); -endfig; -beginfig(248) - boxjoin(a.e = b.w); - boxit.a(btex a etex); - boxit.b(btex b etex); - boxit.c(btex c etex); - boxit.d(btex d etex); - drawboxed(a,b,c,d); -endfig; -beginfig(249) - boxjoin(a.se = b.sw; a.ne = b.nw); - boxit.a(btex a etex); - boxit.b(btex b etex); - boxit.c(btex c etex); - boxit.d(btex d etex); - drawboxed(a,b,c,d); -endfig; -beginfig(250) - boxjoin(a.se = b.sw; a.ne = b.nw); - boxit.a1(btex a etex); - boxit.a2(btex b etex); - boxit.a3(btex c etex); - boxit.a4(btex d etex); - drawboxed(a1,a2,a3,a4); -endfig; -beginfig(251) - draw (0,0) -- (5cm,0) withcolor red; - draw btex a etex ; - draw btex b etex shifted (1cm,0); - draw btex c etex shifted (2cm,0); - draw btex d etex shifted (3cm,0); - draw btex e etex shifted (4cm,0); -endfig; -beginfig(252) - draw (0,0) -- (5cm,0) withcolor red; - boxjoin(b.c - a.c = (1cm,0)); - boxit a (btex a etex); - boxit b (btex b etex); - boxit c (btex c etex); - boxit d (btex d etex); - boxit e (btex e etex); - drawunboxed(a,b,c,d,e); -endfig; -beginfig(253) - vardef boxTEX expr s = - save p,h,l; - picture p; - numeric h,l; - p := TEX(s); - h := max(ypart ulcorner(p), abs(ypart llcorner(p))); - l := xpart lrcorner(p); - setbounds p to (0,-h)--(l,-h)--(l,h)--(0,h)--cycle; - p - enddef; - - draw (0,0) -- (5cm,0) withcolor red; - boxjoin(b.c - a.c = (1cm,0)); - boxit a (boxTEX "a"); - boxit b (boxTEX "b"); - boxit c (boxTEX "c"); - boxit d (boxTEX "d"); - boxit e (boxTEX "e"); - drawunboxed(a,b,c,d,e); -endfig; -beginfig(254) - draw (0,0) -- (5cm,0) withcolor red; - boxjoin(b.c - a.c = (1cm,0)); - boxit a (boxTEX "a"); - boxit b (boxTEX "b"); - boxit c (boxTEX "c"); - boxit d (boxTEX "d"); - boxit e (boxTEX "e"); - drawboxed(a,b,c,d,e); -endfig; -beginfig(255) - let OLD_beginbox_ = beginbox_; - def beginbox_(expr pp,sp)(suffix $)(text t) = - _n_ := str $; - generic_declare(pair) _n.off, _n.c; - generic_declare(string) pproc_._n, sproc_._n; - generic_declare(picture) pic_._n; - pproc_$:=pp; sproc_$:=sp; - pic_$ = nullpicture; - for _p_=t: - pic_$:= - if picture _p_: _p_ - else: _p_ infont defaultfont scaled defaultscale - fi; - endfor - $c = $off + (.5[xpart llcorner pic_$, xpart urcorner pic_$], 0) - enddef; - - draw (0,0) -- (5cm,0) withcolor red; - boxjoin(b.c - a.c = (1cm,0)); - boxit a (btex a etex); - boxit b (btex b etex); - boxit c (btex c etex); - boxit d (btex d etex); - boxit e (btex e etex); - drawunboxed(a,b,c,d,e); -endfig; -beginfig(256) - draw (0,0) -- (5cm,0) withcolor red; - boxjoin(b.c - a.c = (1cm,0)); - boxit a (btex a etex); - boxit b (btex b etex); - boxit c (btex c etex); - boxit d (btex d etex); - boxit e (btex e etex); - drawboxed(a,b,c,d,e); -endfig; -beginfig(257) -let OLD_boxit = boxit; -let OLD_sizebox_ = sizebox_; -let OLD_clearb_ = clearb_; - -vardef boxit@#(text tt) = - beginbox_("boxpath_","sizebox_",@#,tt); - generic_declare(pair) _n.sw, _n.s, _n.se, _n.e, _n.ne, _n.n, _n.nw, _n.w; - 0 = xpart (@#nw-@#sw) = ypart(@#se-@#sw); - 0 = xpart(@#ne-@#se) = ypart(@#ne-@#nw); - @#s = .5[@#sw,@#se]; - @#n = .5[@#ne,@#nw]; - xpart @#w = xpart @#nw; - xpart @#e = xpart @#ne; - ypart @#w = ypart @#c = ypart @#e; - @#ne-@#c = (@#dx,@#dy) + - (xpart(.5*(urcorner pic_@# - llcorner pic_@#)), ypart urcorner pic_@#); - @#c-@#sw = (@#dx,@#dy) + - (xpart(.5*(urcorner pic_@# - llcorner pic_@#)), -ypart lrcorner pic_@#); - endbox_(clearb_,@#); -enddef; - - draw (0,0) -- (5cm,0) withcolor red; - boxjoin(b.c - a.c = (1cm,0)); - boxit a (btex a etex); - boxit b (btex b etex); - boxit c (btex c etex); - boxit d (btex d etex); - boxit e (btex e etex); - drawboxed(a,b,c,d,e); -endfig; -beginfig(258) - draw (0,0) -- (5cm,0) withcolor red; - boxjoin(b.c - a.c = (1cm,0); b.ne - b.se = a.nw - a.sw); - boxit a (btex a etex); - boxit b (btex b etex); - boxit c (btex c etex); - boxit d (btex d etex); - boxit e (btex e etex); - drawboxed(a,b,c,d,e); -endfig; -beginfig(259) -vardef boxit@#(text tt) = - beginbox_("boxpath_","sizebox_",@#,tt); - generic_declare(pair) _n.sw, _n.s, _n.se, _n.e, _n.ne, _n.n, _n.nw, _n.w; - 0 = xpart (@#nw-@#sw) = ypart(@#se-@#sw); - 0 = xpart(@#ne-@#se) = ypart(@#ne-@#nw); - @#s = .5[@#sw,@#se]; - @#n = .5[@#ne,@#nw]; - xpart @#w = xpart @#nw; - xpart @#e = xpart @#ne; - ypart @#w = ypart @#c = ypart @#e; - @#ne-@#c = (@#dx,@#dyup) + - (xpart(.5*(urcorner pic_@# - llcorner pic_@#)), ypart urcorner pic_@#); - @#c-@#sw = (@#dx,@#dydown) + - (xpart(.5*(urcorner pic_@# - llcorner pic_@#)), -ypart lrcorner pic_@#); - endbox_(clearb_,@#); -enddef; - -def sizebox_(suffix $) = - if unknown $.dx: $.dx=defaultdx; fi - if unknown $.dyup: - if unknown $.dy: - $.dyup=defaultdy - else: - $.dyup=$.dy - fi; - fi; - if unknown $.dydown: - if unknown $.dy: - $.dydown=defaultdy - else: - $.dydown=$.dy - fi; - fi; -enddef; - -vardef clearb_(suffix $) = - _n_ := str $; - generic_redeclare(numeric) _n.sw, _n.s, _n.se, _n.e, _n.ne, _n.n, _n.nw, _n.w, - _n.c, _n.off, _n.dx, _n.dy, _n.dyup, _n.dy_down; -enddef; - - draw (0,0) -- (5cm,0) withcolor red; - boxjoin(b.c - a.c = (1cm,0); ypart( b.ne - a.ne ) = 0; ypart( b.se - a.se ) = 0;); - boxit a (btex a etex); - boxit b (btex b etex); - boxit c (btex c etex); - boxit d (btex d etex); - boxit e (btex e etex); - drawboxed(a,b,c,d,e); -endfig; -beginfig(260) - draw (0,0) -- (5cm,0) withcolor red; - picture p; - numeric h; - p := btex b etex; - h = ypart ( ulcorner p - llcorner p ); - boxjoin( - b.c - a.c = (1cm,0); - ypart( b.ne - a.ne ) = 0; - ypart( a.ne - a.se ) = h+2defaultdy; - ); - boxit a (btex a etex); - boxit b (btex b etex); - boxit c (btex c etex); - boxit d (btex d etex); - boxit e (btex e etex); - drawboxed(a,b,c,d,e); -endfig; -beginfig(261) - % Les lignes suivantes n'ont pas l'effet escompté... - let beginbox_ = OLD_beginbox_; - let boxit = OLD_boxit; - let sizebox_ = OLD_sizebox_; - let clearb_ = OLD_clearb_; - - % On recopie donc les définitions initiales des macros que l'on a modifiées... - extra_beginfig := ""; - extra_endfig := ""; - input boxes; - - % Et on regarde sur un exemple si ça marche... - draw (0,0) -- (5cm,0) withcolor red; - boxjoin(b.c - a.c = (1cm,0)); - boxit a (btex a etex); - boxit b (btex b etex); - boxit c (btex c etex); - boxit d (btex d etex); - boxit e (btex e etex); - drawboxed(a,b,c,d,e); -endfig; -beginfig(262) - boxit.a1(btex $a$ etex); - boxit.b1(btex etex); - boxit.a2(btex $b$ etex); - boxit.b2(btex etex); - boxit.a3(btex $c$ etex); - boxit.b3(btex etex); - boxit.a4(btex $d$ etex); - boxit.b4(btex etex); - for i=1 upto 4: - % Les boites a[i] et b[i] sont collées - a[i].e = b[i].w; - % Il y a un peu d'espace entre b[i] et a[i+1] - b[i].e + (5mm,0) = a[i+1].w; - % La hauteur des boites est la même - a[i].n - a[i].s = a[i+1].n - a[i+1].s = b[i].n - b[i].s ; - % Les b[i] ne sont pas très larges - b[i].e - b[i].w = (2mm,0); - endfor; - drawboxed(a1,b1,a2,b2,a3,b3,a4,b4); - for i=1 upto 3: - drawarrow b[i].c {up} .. a[i+1].c {down} - cutafter bpath.a[i+1]; - endfor; -endfig; -beginfig(263) - boxit.a(btex A etex); - boxit.b(btex B etex); - boxit.c(btex C etex); - boxit.d(btex D etex); - boxit.e(btex E etex); - - b.c-a.c = (1cm,0); - c.c-b.c = (b.c-a.c) rotated 72; - d.c-c.c = (c.c-b.c) rotated 72; - e.c-d.c = (d.c-c.c) rotated 72; - a.c-e.c = (e.c-d.c) rotated 72; - b.c-a.c = (a.c-e.c) rotated 72; - - drawboxed(a,b,c,d,e); - - drawarrow a.c -- b.c cutbefore bpath.a cutafter bpath.b; - drawarrow b.c -- c.c cutbefore bpath.b cutafter bpath.c; - drawarrow c.c -- d.c cutbefore bpath.c cutafter bpath.d; - drawarrow d.c -- e.c cutbefore bpath.d cutafter bpath.e; - drawarrow e.c -- a.c cutbefore bpath.e cutafter bpath.a; -endfig; -beginfig(264) - boxit.a(btex A etex); - boxit.b(btex B etex); - boxit.c(btex C etex); - boxit.d(btex D etex); - boxit.e(btex E etex); - - d.c = 1cm*up; - e.c = 1cm*up rotated (1*72); - a.c = 1cm*up rotated (2*72); - b.c = 1cm*up rotated (3*72); - c.c = 1cm*up rotated (4*72); - - drawunboxed(a,b,c,d,e); - - drawarrow a.c -- b.c cutbefore bpath.a cutafter bpath.b; - drawarrow b.c -- c.c cutbefore bpath.b cutafter bpath.c; - drawarrow c.c -- d.c cutbefore bpath.c cutafter bpath.d; - drawarrow d.c -- e.c cutbefore bpath.d cutafter bpath.e; - drawarrow e.c -- a.c cutbefore bpath.e cutafter bpath.a; -endfig; -beginfig(265) - def linkboxes(suffix a,b) = - drawarrow a.c -- b.c cutbefore bpath.a cutafter bpath.b; - enddef; - - boxit.a(btex A etex); - boxit.b(btex B etex); - boxit.c(btex C etex); - boxit.d(btex D etex); - boxit.e(btex E etex); - - d.c = 1cm*up; - e.c = 1cm*up rotated (1*72); - a.c = 1cm*up rotated (2*72); - b.c = 1cm*up rotated (3*72); - c.c = 1cm*up rotated (4*72); - - drawunboxed(a,b,c,d,e); - - linkboxes(a,b); - linkboxes(b,c); - linkboxes(c,d); - linkboxes(d,e); - linkboxes(e,a); -endfig; -beginfig(266) - boxit a(btex Essai etex); - fill bpath a withcolor .5[red,white]; - drawboxed(a); - -endfig; -beginfig(267) - def drawredboxed(text t) = - forsuffixes a=t: - fill bpath a withcolor .5[red,white]; - endfor; - drawboxed(t); - enddef; - - circleit.a(btex Début etex); - a.c = (0,0); - a.dx = a.dy; - circleit.b(btex Fin etex); - b.c = (2cm,0); - b.dx = b.dy; - drawredboxed(a,b); - drawarrow a.c {dir 45} .. b.c {dir -45} - cutbefore bpath.a cutafter bpath.b; - drawarrow b.c {dir -135} .. a.c {dir 135} - cutbefore bpath.b cutafter bpath.a; - -endfig; -beginfig(268) - def drawcoloredboxed(expr c)(text t) = - forsuffixes a=t: - fill bpath a withcolor c; - endfor; - drawboxed(t); - enddef; - - circleit.a(btex Début etex); - a.c = (0,0); - a.dx = a.dy; - circleit.b(btex Fin etex); - b.c = (2cm,0); - b.dx = b.dy; - drawcoloredboxed(.5[red,white], a); - drawcoloredboxed(.5[blue,white], b); - drawarrow a.c {dir 45} .. b.c {dir -45} - cutbefore bpath.a cutafter bpath.b; - drawarrow b.c {dir -135} .. a.c {dir 135} - cutbefore bpath.b cutafter bpath.a; - -endfig; -beginfig(269) -def begindiag = - begingroup; - save _diag_x, _diag_x_max, _diag_y, _diag_y_max, _diag; - numeric _diag_x, _diag_x_max, _diag_y, _diag_y_max; - string _diag[][]; - % Numéro de ligne et de colonne courrants - _diag_x = -1; _diag_y = 0; - % Numéro de ligne et de colonne maximaux - _diag_x_max = _diag_y_max = 0; - save _diag_ar_n, _diag_ar_source, _diag_ar_but, _diag_ar_up, _diag_ar_down; - % Nombre de flèches - numeric _diag_ar_n; _diag_ar_n=-1; - % Source et but de la flèche - pair _diag_ar_source[], _diag_ar_but[]; - % Ce qu'il faut écrire au dessus ou au dessous - string _diag_ar_up[], _diag_ar_down[]; - save _diag_ar_curved, _diag_ar_shape, _diag_ar_color, _diag_ar_width; - % « courbure » (c'est une distance) - numeric _diag_ar_curved[]; - % Forme de la flèche - string _diag_ar_shape[]; - % Couleur, épaisseur, pointillés - color _diag_ar_color[]; - numeric _diag_ar_width[]; - picture _diag_ar_dashed[]; -enddef; - -def node expr A = - _diag_x := _diag_x + 1; - _diag_x_max := max(_diag_x,_diag_x_max); - _diag[_diag_x][_diag_y] := A; -enddef; - -def nextline = - _diag_x := -1; - _diag_y := _diag_y + 1; - _diag_y_max := max(_diag_y, _diag_y_max); -enddef; - -tertiarydef a => b = a, b enddef; -def even (expr a) = not odd(a) enddef; - -vardef rarrowto(expr a,b)(text t) = - save i,p; - _diag_ar_n := _diag_ar_n + 1; - _diag_ar_source[_diag_ar_n] = (_diag_x, _diag_y); - _diag_ar_but[_diag_ar_n] = (_diag_x + a, _diag_y + b); - - numeric i; i:=0; - string current; - for p=t: - if even(i): - current := p; - else: - if current = "above": - _diag_ar_up[_diag_ar_n] = p; - elseif current = "below": - _diag_ar_down[_diag_ar_n] = p; - elseif current = "shape": - _diag_ar_shape[_diag_ar_n] = p; - elseif current = "curved": - _diag_ar_curved[_diag_ar_n] = p; - elseif current = "color": - _diag_ar_color[_diag_ar_n] = p; - elseif current = "width": - _diag_ar_width[_diag_ar_n] = p; - elseif current = "dashed": - _diag_ar_dashed[_diag_ar_n] = p; - else: - errmessage("rarrowto: Wrong argument "&ditto¤t&ditto); - fi; - fi; - i := i + 1; - endfor; - if odd i: - errmessage("rarrowto: Odd number of arguments "&decimal(i)); - fi; -enddef; - -%% Les têtes de flèches - -picture withsmalldots, notdashed; -withsmalldots := withdots scaled .3; -notdashed := dashpattern(on 50cm); - -vardef diag_arrow_head (expr p, t) = - save A,B,C,u; pair A,B,C,u; - B := point t of p; - u := -unitvector(direction t of p); - A := B + ahlength*u rotated(-ahangle); - C := B + ahlength*u rotated(+ahangle); - A .. {-u} B {u} .. C -enddef; - -vardef diag_arrow_bar (expr p, t) = - save A,B,C,u; pair A,B,C,u; - B := point t of p; - u := unitvector(direction t of p); - A := B + ahlength*sind(ahangle)*u rotated(90); - C := B + ahlength*sind(ahangle)*u rotated(-90); - A .. B .. C -enddef; - -%% Les flèches - -def diag_draw_arrow_default(suffix a,b)(expr curved, w, col, dash) = - p = a.c .. - (1/2 [a.c,b.c] + curved*unitvector(b.c-a.c) rotated 90) - .. b.c; - pp := p cutbefore bpath.a cutafter bpath.b; - draw pp - withcolor col withpen pencircle scaled w dashed dash; - draw diag_arrow_head (pp, length(pp)) - withcolor col withpen pencircle scaled w; -enddef; - -def diag_draw_arrow_middle(suffix a,b)(expr curved, w, col, dash) = - p = a.c .. - (1/2 [a.c,b.c] + curved*unitvector(b.c-a.c) rotated 90) - .. b.c; - pp := p cutbefore bpath.a cutafter bpath.b; - draw pp - withcolor col withpen pencircle scaled w dashed dash; - draw diag_arrow_head(p,1) - withcolor col withpen pencircle scaled w; -enddef; - -def diag_draw_arrow_epi(suffix a,b)(expr curved, w, col, dash) = - p = a.c .. - (1/2 [a.c,b.c] + curved*unitvector(b.c-a.c) rotated 90) - .. b.c; - pp := p cutbefore bpath.a cutafter bpath.b; - draw pp - withcolor col withpen pencircle scaled w dashed dash; - draw diag_arrow_head (pp, length(pp)) - withcolor col withpen pencircle scaled w; - path ppp; - ppp := pp cutafter (fullcircle scaled 1mm shifted point length(pp) of pp); - draw diag_arrow_head(ppp, length(ppp)) - withcolor col withpen pencircle scaled w; -enddef; - -def diag_draw_arrow_mono(suffix a,b)(expr curved, w, col, dash) = - p = a.c .. - (1/2 [a.c,b.c] + curved*unitvector(b.c-a.c) rotated 90) - .. b.c; - pp := p cutbefore bpath.a cutafter bpath.b; - path ppp; - ppp := pp cutbefore (fullcircle scaled 1mm shifted point 0 of pp); - draw ppp - withcolor col withpen pencircle scaled w dashed dash; - draw diag_arrow_head (pp, length(pp)) - withcolor col withpen pencircle scaled w; - draw diag_arrow_head(ppp, 0) - withcolor col withpen pencircle scaled w; -enddef; - -vardef diag_draw_arrow_inj(suffix a,b)(expr curved, w, col, dash) = - p = a.c .. - (1/2 [a.c,b.c] + curved*unitvector(b.c-a.c) rotated 90) - .. b.c; - pp := p cutbefore bpath.a cutafter bpath.b; - path ppp; - ppp := pp cutbefore (fullcircle scaled 1mm shifted point 0 of pp); - draw ppp - withcolor col withpen pencircle scaled w dashed dash; - draw diag_arrow_head (pp, length(pp)) - withcolor col withpen pencircle scaled w; - save u,A,B,C; - pair u,A,B,C; - A := point 0 of ppp; - u := unitvector(direction 0 of ppp); - B := A + ahlength*(-u) rotated (-ahangle); - C := A + 2 ahlength*sind(ahangle)*u rotated 90; - draw C {-u} .. B .. A {u} - withcolor col withpen pencircle scaled w dashed dash; -enddef; - -def diag_draw_arrow_mapsto(suffix a,b)(expr curved, w, col, dash) = - p = a.c .. - (1/2 [a.c,b.c] + curved*unitvector(b.c-a.c) rotated 90) - .. b.c; - pp := p cutbefore bpath.a cutafter bpath.b; - draw pp - withcolor col withpen pencircle scaled w dashed dash; - draw diag_arrow_head (pp, length(pp)) - withcolor col withpen pencircle scaled w; - draw diag_arrow_bar (pp, 0) - withcolor col withpen pencircle scaled w; -enddef; - -def diag_draw_arrow_half_dotted(suffix a,b)(expr curved, w, col, dash) = - p = a.c .. - (1/2 [a.c,b.c] + curved*unitvector(b.c-a.c) rotated 90) - .. b.c; - pp := p cutbefore bpath.a cutafter bpath.b; - draw subpath(0,1) of pp - withcolor col withpen pencircle scaled w dashed withsmalldots; - draw subpath(1,2) of pp - withcolor col withpen pencircle scaled w; - draw diag_arrow_head (pp, length(pp)) - withcolor col withpen pencircle scaled w; -enddef; - -%% Fin des flèches - -def color_to_string (expr a) = - "("& - decimal(redpart a) - &","& - decimal(greenpart a) - &","& - decimal(bluepart a) - &")" -enddef; - -def enddiag = - save i,j,k,l,mm,a,A,p,b; - for i=0 upto _diag_x_max: - for j=0 upto _diag_y_max: - if known _diag[i][j]: - circleit.a[i][j]( _diag[i][j] ); - a[i][j].dx = a[i][j].dy; - a[i][j].c = 1cm * (i,-j); - drawunboxed( a[i][j] ); - fi; - endfor; - endfor; - for m=0 upto _diag_ar_n: - % Vérifier que le but existe - i := xpart _diag_ar_source[m]; - j := ypart _diag_ar_source[m]; - k := xpart _diag_ar_but[m]; - l := ypart _diag_ar_but[m]; - - % On trace la flèche. Le chemin est mis dans la variable p. - path p,pp; - if unknown _diag_ar_shape[m]: _diag_ar_shape[m] := "default" fi; - if unknown _diag_ar_color[m]: _diag_ar_color[m] := black fi; - if unknown _diag_ar_width[m]: _diag_ar_width[m] := .5bp fi; - if unknown _diag_ar_curved[m]: _diag_ar_curved[m] := 0 fi; - if unknown _diag_ar_dashed[m]: _diag_ar_dashed[m] := notdashed fi; - % On ne peut PAS utiliser m dans une chaîne ce caractères que l'on donne - % à scantokens, car m est une variable de boucle. C'est vraiment spécial, - % une variable de boucle. - mm := m; - scantokens( - "diag_draw_arrow_"& _diag_ar_shape[m] - &"(" - &"a[i][j], a[k][l],_diag_ar_curved[mm],_diag_ar_width[mm]," - &"_diag_ar_color[mm],_diag_ar_dashed[mm]" - &");" - ); - - % On écrit des choses au dessus ou au dessous des flèches - pair A; - A = point 1/2 length(p) of p; - if known _diag_ar_up[m]: - boxit.b[m](_diag_ar_up[m]); - b[m].c = A + 4bp*unitvector(direction 1/2 length(p) of p rotated 90); - drawunboxed(b[m]); - fi; - if known _diag_ar_down[m]: - boxit.c[m](_diag_ar_down[m]); - c[m].c = A + 4bp*unitvector(direction 1/2 length(p) of p rotated -90); - drawunboxed(c[m]); - fi; - endfor; - endgroup; -enddef; - - begindiag; - node "A"; - rarrowto(1,0, "above" => "a", - "shape" => "middle", - "curved" => 3mm, - "dashed" => withsmalldots); - rarrowto(0,1, "below" => "b", - "color" => blue, - "shape" => "mapsto", - "dashed" => evenly); - node "A"; - rarrowto(1,0, "above" => "c", "width" => 1bp, "shape" => "inj"); - rarrowto(0,1, "below" => "d", "shape" => "mono"); - node "A"; - nextline; - node "A"; - rarrowto(1,0, "below" => "e", "shape" => "epi"); - node "A"; - rarrowto(1,-1, "below" => "f", "curved" => -3mm, "shape" => "half_dotted"); - enddiag; -endfig; -beginfig(270) - draw begingraph(3cm,2cm) - gdraw "data1"; - endgraph; - -endfig; -beginfig(271) - draw begingraph(3cm,2cm) - gdraw "data1" withpen pencircle scaled 2bp; - endgraph; -endfig; -beginfig(272) - draw begingraph(3cm,2cm) - gdraw "data1" dashed evenly; - endgraph; -endfig; -beginfig(273) - draw begingraph(3cm,2cm) - gdraw "data1" withcolor red; - endgraph; -endfig; -beginfig(274) - draw begingraph(3cm,2cm) - gdraw "data1" withpen pencircle scaled 2bp; - gdraw "data2" ; - endgraph; -endfig; -beginfig(275) - draw begingraph(3cm,2cm) - gdraw "data1" ; - gdraw "data2" dashed evenly; - gdraw "data3" dashed withdots; - endgraph; -endfig; -beginfig(276) - draw begingraph(3cm,2cm) - gdraw "data1" withcolor red; - gdraw "data2" withcolor blue; - endgraph; -endfig; -beginfig(277) - draw begingraph(3cm,2cm) - gdraw "data1" plot btex $\bullet$ etex; - endgraph; - -endfig; -beginfig(278) - picture gros_point; - draw (0,0) withpen pencircle scaled 4bp; - gros_point := currentpicture; - currentpicture := nullpicture; - draw begingraph(3cm,2cm) - gdraw "data1" plot gros_point; - endgraph; -endfig; -beginfig(279) - picture gros_point; - gros_point := nullpicture; - addto gros_point doublepath (0,0) - withpen pencircle scaled 4bp; - draw begingraph(3cm,2cm) - gdraw "data1" plot gros_point; - endgraph; -endfig; -beginfig(280) - picture croix; - croix := nullpicture; - addto croix doublepath (-2bp,2bp)--(2bp,-2bp) - withpen pencircle scaled 1bp; - addto croix doublepath (-2bp,-2bp)--(2bp,2bp) - withpen pencircle scaled 1bp; - picture gros_carre; - gros_carre := nullpicture; - addto gros_carre contour unitsquare shifted (-.5,-.5) scaled 2bp; - - draw begingraph(3cm,2cm) - gdraw "data1"; - gdraw "data1" plot croix; - gdraw "data2"; - gdraw "data2" plot gros_carre; - endgraph; -endfig; -beginfig(281) - draw begingraph(3cm,2cm) - gdata("data1", - v, - glabel(gros_point, v1, v2); - ); - endgraph; - -endfig; -beginfig(282) - draw begingraph(3cm,2cm) - path p; - gdata("data1", - v, - augment.p(v1,v2); - ); - gdraw p; - endgraph; - -endfig; -beginfig(283) - interim linecap := squared; - interim linejoin := mitered; - draw begingraph(3cm,2cm) - path p; - gdata("data1", - v, - augment.p(v1,v2); - ); - gdraw p withpen pencircle scaled 2bp; - gdraw p withpen pencircle scaled 1bp withcolor .8white; - endgraph; -endfig; -beginfig(284) - draw begingraph(3cm,2cm) - gdata("data1", - v, - path p; - augment p (v1,0); - augment p (v1,v2); - gdraw p; - ); - endgraph; -endfig; -beginfig(285) - draw begingraph(3cm,2cm) - gdata("data1", - v, - path p; - augment p (v1,0); - augment p (v1,v2); - gdraw p withpen pencircle scaled 4bp; - ); - endgraph; -endfig; -beginfig(286) - interim linecap:=2; - draw begingraph(3cm,2cm) - gdata("data1", - v, - path p; - augment p (v1,0); - augment p (v1,v2); - gdraw p withpen pencircle scaled 4bp; - ); - endgraph; -endfig; -beginfig(287) - draw begingraph(3cm,2cm) - gdata("data1", v, - path p; - augment p (v1,0); - augment p (v1,v2); - augment p (v1 Sadd "1",v2); - augment p (v1 Sadd "1",0); - gdraw p--cycle; - ); - endgraph; -endfig; -beginfig(288) - draw begingraph(3cm,2cm) - gdata("data1", v, - path p; - augment p (v1,0); - augment p (v1,v2); - augment p (v1 Sadd "1",v2); - augment p (v1 Sadd "1",0); - gfill p--cycle withcolor .8white; - gdraw p--cycle; - ); - endgraph; -endfig; -beginfig(289) - draw begingraph(3cm,2cm) - gdata("data1", v, - - % Le dessus - path p; - augment p (v1,v2); - augment p (v1 Sadd "1",v2); - augment p (v1 Sadd "1.5", v2 Sadd "10"); - augment p (v1 Sadd ".5", v2 Sadd "10"); - gfill p--cycle withcolor white; - gdraw p--cycle; - - % Le côté - path p; - augment p (v1 Sadd "1",0); - augment p (v1 Sadd "1",v2); - augment p (v1 Sadd "1.5", v2 Sadd "10"); - augment p (v1 Sadd "1.5", "10"); - gfill p--cycle withcolor .5white; - gdraw p--cycle; - - % Le devant - path p; - augment p (v1,0); - augment p (v1,v2); - augment p (v1 Sadd "1",v2); - augment p (v1 Sadd "1",0); - gfill p--cycle withcolor .8white; - gdraw p--cycle; - - ); - endgraph; -endfig; -beginfig(290) - draw begingraph(3cm,2cm) - path p,q; - gdata("data1", v, - augment.p(v1,v2); - ); - q:= (xpart point 0 of p, 0) -- p -- - (xpart point length(p) of p, 0) -- cycle; - gfill q withcolor .8white; - gdraw p withpen pencircle scaled 2bp; - endgraph; -endfig; -beginfig(291) - draw begingraph(3cm,2cm) - gdata("data1", - v, - path p; - augment p ("0", i); - augment p (v2, i); - augment p (v2, i Sadd ".5"); - augment p (0, i Sadd ".5"); - gfill p--cycle withcolor .8white; - gdraw p--cycle; - ); - autogrid(otick.bot,); - endgraph; -endfig; -beginfig(292) - draw begingraph(3cm,2cm) - gdraw "data1"; - glabel.bot(btex Abscisse etex, OUT); - glabel.lft(btex Ordonnée etex, OUT); - endgraph; - -endfig; -beginfig(293) - draw begingraph(3cm,2cm) - gdraw "data1" withcolor red; - glabel.lft(btex 1 etex, 8); - gdraw "data2" withcolor blue; - glabel.bot(btex 2 etex, 9); - endgraph; - -endfig; -beginfig(294) - draw begingraph(3cm,2cm) - gdraw "data1"; - glabel.bot(btex Abscisse etex, OUT); - glabel.lft(btex Ordonnée etex rotated 90, OUT); - endgraph; -endfig; -beginfig(295) - % La légende - color couleur[]; - couleur[0] := red; - couleur[1] := green; - couleur[2] := blue; - picture p[], legende; - legende := nullpicture; - for i=0 upto 2: - p[i] := nullpicture; - addto p[i] also TEX("Courbe " & decimal(i+1)) - withcolor couleur[i]; - addto legende doublepath ( (0,0)--(5mm,0) ) - shifted (0, -5mm*i) - withpen currentpen withcolor couleur[i]; - addto legende also p[i] - shifted 1/2(lrcorner p[i] - ulcorner p[i]) - shifted (0, -5mm*i); - endfor; - % Les courbes - draw begingraph(3cm,2cm) - for i=1 upto 3: - gdraw "data" & decimal(i) withcolor couleur[i-1]; - endfor; - glabel.top(legende,OUT); - endgraph; -endfig; -beginfig(296) - draw begingraph(3cm,2cm) - setcoords(-linear,log); - gdraw "data1"; - endgraph; - -endfig; -beginfig(297) - draw begingraph(3cm,2cm) - gdraw "data1"; - endgraph; - -endfig; -beginfig(298) - draw begingraph(3cm,2cm) - setrange( (whatever,0), (whatever,whatever) ); - gdraw "data1"; - endgraph; - -endfig; -beginfig(299) - draw begingraph(3cm,2cm) - setrange(whatever, 0, whatever, whatever); - gdraw "data1"; - endgraph; - -endfig; -beginfig(300) - vardef TEX primary s = - write "verbatimtex" to "mptextmp.mp"; - write "\documentclass[12pt]{article}" to "mptextmp.mp"; - write "\usepackage[T1]{fontenc}" to "mptextmp.mp"; - write "\usepackage{amsmath,amssymb}" to "mptextmp.mp"; - write "\begin{document}" to "mptextmp.mp"; - write "etex" to "mptextmp.mp"; - write "btex "&s&" etex" to "mptextmp.mp"; - write EOF to "mptextmp.mp"; - scantokens "input mptextmp" - enddef; - vardef mylabel(expr pic, p, t) = - save A; pair A; - A = point t of p + - 8bp * unitvector(direction t of p) rotated 90; - label(pic, A); - enddef; - path p; u:=1cm; - p = (0,0)..(-u,u)..(u,u); - draw p; - for i=0 step .2 until length(p): - draw point i of p withpen pencircle scaled 4bp; - mylabel(TEX("$"&decimal(round(5*i))&"$"),p,i); - endfor; - -endfig; -beginfig(301) - path p; - p := subpath(1,3) of fullcircle scaled 2cm; - interim linejoin := mitered; - interim linecap := butt; - - interim ahangle := 30; - drawarrow p withpen pencircle scaled 2bp; - - interim ahangle := 45; - drawarrow p shifted (0,-5mm) withpen pencircle scaled 2bp; - - interim ahangle := 60; - drawarrow p shifted (0,-10mm) withpen pencircle scaled 2bp; - -endfig; -beginfig(302) - path p; - p := subpath(1,3) of fullcircle scaled 2cm; - interim linejoin := mitered; - interim linecap := butt; - interim ahangle := 30; - - interim ahlength := 2bp; - drawarrow p withpen pencircle scaled 2bp; - - interim ahlength := 4bp; - drawarrow p shifted (0,-5mm) withpen pencircle scaled 2bp; - - interim ahlength := 6bp; - drawarrow p shifted (0,-10mm) withpen pencircle scaled 2bp; - -endfig; -beginfig(303) - draw TEX( "Nous sommes le "& - decimal(day) &"/"& - decimal(month) &"/"& - decimal(year) &"." ); - -endfig; -beginfig(304) - path p; - p := (0,0) -- (2cm,0); - def doit (suffix p)(expr t) = - begingroup - interim linecap := t; - draw p withpen pencircle scaled 5mm withcolor .8white; - endgroup; - draw point 0 of p withpen pencircle scaled 4bp; - draw point 1 of p withpen pencircle scaled 4bp; - p := p shifted (0,-7mm) - enddef; - doit(p,rounded); - doit(p,butt); - doit(p,squared); - -endfig; -beginfig(305) - path p; - p := (0,0) -- (1cm,5mm) -- (2cm,0); - def doit (suffix p)(expr t) = - begingroup - interim linejoin := t; - draw p withpen pencircle scaled 5mm withcolor .8white; - endgroup; - draw point 0 of p withpen pencircle scaled 4bp; - draw point 1 of p withpen pencircle scaled 4bp; - draw point 2 of p withpen pencircle scaled 4bp; - p := p shifted (0,-7mm) - enddef; - doit(p,rounded); - doit(p,mitered); - doit(p,beveled); - -endfig; -bye; diff --git a/Master/texmf-doc/doc/english/metapost-examples/mp2html.pl b/Master/texmf-doc/doc/english/metapost-examples/mp2html.pl deleted file mode 100644 index 143e2314e0a..00000000000 --- a/Master/texmf-doc/doc/english/metapost-examples/mp2html.pl +++ /dev/null @@ -1,170 +0,0 @@ -#! perl -w - -# -# Builds an HTML file and a bunch of GIF files from a Metapost file -# Also creates a PS file -# -# (c) Vincent Zoonekynd -# August 1999 -# modified in august 2001 -# distributed under the GPL -# - -$main = $ARGV[0] || "examples"; -$main =~ s/\.mp$//i; - -# On crée les images GIF -# BUG : à chaque fois qu'il y a des fontes, ça plante. -# C'est normal pour deux raisons : -# - si j'utilisais prologuse:=2, il ne trouverait pas les fontes. -# - Comme j'utilise prologues:=0, c'est encore pire... -# L'idéal serait de créer un fichier LaTeX pour chaque fichier postscript, -# de lancer later puis dvips dessus et de récupérer le fichier postscript. - -# 1. Compile the examples - -system "TEX=latex mpost --interaction=nonstopmode $main"; - -# 2. Create a LaTeX file encompassing the examples and compile it - -open(LATEX,'>', "$main.tex") || die "Cannot open examples.tex for writing: $!"; -print LATEX '\documentclass[a4paper]{article}' ."\n"; -print LATEX '\usepackage{graphicx}' ."\n"; -print LATEX '\begin{document}' ."\n"; -print LATEX '\begin{verbatim}' ."\n"; -open(MP, "<", "$main.mp") || die "cannot open $main.mp for reading: $!"; -while(){ - if (m/^\s*beginfig\s*\((.*)\)/) { - print LATEX '\end{verbatim}' . "\n"; - print LATEX "\\includegraphics{${main}_$1.mps}\n"; - print LATEX '\begin{verbatim}' . "\n"; - print LATEX $_; - } elsif (m/^\s*endfig/) { - print LATEX $_; - print LATEX '\end{verbatim}' ."\n"; - print LATEX '\hrulefill' . "\n"; - print LATEX '\begin{verbatim}' . "\n"; - } else { - print LATEX $_; - } -} -print LATEX '\end{verbatim}' . "\n"; -print LATEX '\end{document}' ."\n"; -close MP; -close LATEX; - -opendir(DIR,"./") || die "Cannot open ./ directory for reading : $!"; -foreach $file (readdir DIR) { - if ($file =~ m/^$main.[0-9]+$/) { - my $new = $file; - $new =~ s/\./_/g; - $new .= ".mps"; - symlink $file, $new; - } -} -closedir(DIR); - -system "latex --interaction=nonstopmode $main.tex"; -system "dvips -o $main.ps $main.dvi"; -#system "pdflatex --interaction=nonstopmode $main.tex"; - -# 3. Create the GIF pictures - -opendir(DIR,"./") || die "Cannot open ./ directory for reading : $!"; -foreach $file (readdir DIR) { - if ($file =~ m/^$main.[0-9]+$/) { - - ## Création du fichier PS - symlink "$file", "$file.eps"; - open(TEX,">$file.tex") || die "cannot open $file.tex for writing : $!"; - print TEX '\nonstopmode' ."\n" ; - print TEX '\documentclass[a4paper,10pt]{article}' ."\n" ; - print TEX '\usepackage[T1]{fontenc}\usepackage[latin1]{inputenc}' ."\n" ; - print TEX '\usepackage{graphicx,amsmath,amssymb}' ."\n" ; - print TEX '\pagestyle{empty}' ."\n" ; - print TEX '\begin{document}' ."\n" ; - print TEX '\includegraphics{'. "$file.eps" .'}' ."\n" ; - print TEX '\end{document}' ."\n" ; - close TEX; - system "latex $file.tex"; - system "dvips -E -f $file.dvi -o $file.ps"; - - ## Transformation en GIF - my ($bbx,$bby,$bbw,$bbh); - open(PS,"$file.ps"); - while () { - if (/^%%BoundingBox:\s+(-?\d+)\s+(-?\d+)\s+(-?\d+)\s+(-?\d+)/) { - $bbx = 0-$1; $bby = 0-$2; - $bbw = $3+$bbx; $bbh = $4+$bby; -# print "*** Seen BBOX\n"; - } - last if /^%%EndComments/; - } - close(PS); - - my $scale = 3; - my $density = 72*$scale; - $bbw = $scale * $bbw; - $bbh = $scale * $bbh; -# print "*** gs -q -dNOPAUSE -dNO_PAUSE -sDEVICE=ppmraw -g${bbw}x${bbh} -r$density -sOutputFile=$file.ppm\n"; - open(GS, "|gs -q -dNOPAUSE -dNO_PAUSE -sDEVICE=ppmraw -g${bbw}x${bbh} -r$density -sOutputFile=$file.ppm"); - print GS "$bbx $bby translate\n"; - print GS "($file.ps) run\n"; - print GS "showpage\n"; - print GS "quit\n"; - close(GS); - - system("pnmcrop $file.ppm | ppmquant 256 | ppmtogif > $file.gif"); - - unlink "$file.ppm"; - } -} - - -# 4. Create the HTML file -open(MP,"$main.mp") || die "cannot open $main.mp for reading: $!"; -open(HTML,">$main.html") || die "cannot open $main.html for writing: $!"; -select HTML; -print "Metapost : exemples\n"; -print "

Métapost : exemples

\n"; -print "
\n";
-while(){
-  if (m/^\s*beginfig\s*\((.*)\)/) {
-    print "
\n";
-    print ;
-  } elsif (m/^\s*endfig/) {
-    print;
-    print "

\n";
-  } else {
-    print;
-  }
-}
-print "
\n"; -print "\n"; -close HTML; -close MP; - -# 5. Remove unnecessary files - -opendir(DIR,"./") || die "Cannot open ./ directory for reading : $!"; -foreach $file (readdir DIR) { - if ($file =~ m/^$main.[0-9]+$/) { - unlink $file; - unlink "$file.tex"; - unlink "$file.dvi"; - unlink "$file.aux"; - unlink "$file.log"; - unlink "$file.eps"; - unlink "$file.ps"; - my $new = $file; - $new =~ s/\./_/g; - $new .= ".mps"; - unlink $new; - } elsif( $file =~ m/\.mpx$/ ) { - unlink $file; - } -} -closedir DIR; -unlink "$main.aux"; -unlink "$main.log"; - diff --git a/Master/tlpkg/tlpsrc/metapost-examples.tlpsrc b/Master/tlpkg/tlpsrc/metapost-examples.tlpsrc index 5dc18fa920e..e69de29bb2d 100644 --- a/Master/tlpkg/tlpsrc/metapost-examples.tlpsrc +++ b/Master/tlpkg/tlpsrc/metapost-examples.tlpsrc @@ -1,2 +0,0 @@ -name metapost-examples -category Documentation -- cgit v1.2.3