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/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 - 7 files changed, 5141 deletions(-) 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 (limited to 'Master/texmf-doc') 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"; - -- cgit v1.2.3