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;