diff options
Diffstat (limited to 'Master/texmf-dist/metapost/repere')
-rw-r--r-- | Master/texmf-dist/metapost/repere/repere.mp | 791 |
1 files changed, 752 insertions, 39 deletions
diff --git a/Master/texmf-dist/metapost/repere/repere.mp b/Master/texmf-dist/metapost/repere/repere.mp index 02595f91aa8..0bd86dc43d0 100644 --- a/Master/texmf-dist/metapost/repere/repere.mp +++ b/Master/texmf-dist/metapost/repere/repere.mp @@ -14,6 +14,8 @@ % Mars 2019 : changement spline % Juin 2019 : demi-droites, nomme[<angle>] +% Mars 2020 : filldraw +% Octobre 2021 : nommerot, cote % À faire : extratextx, extratexty input format; @@ -50,6 +52,7 @@ let olddraw = draw; let olddrawarrow = drawarrow; let olddrawdblarrow = drawdblarrow; let oldfill = fill; +let oldfilldraw = filldraw; vardef theoldlabel@#(expr s,z) = % Position s near z save p; picture p; if picture s: p=s @@ -155,15 +158,28 @@ def init_traces = vardef thelabel@#(expr s,z) = % Position s near z save p; picture p; if picture s: p=s -% else: p = s infont defaultfont scaled defaultscale + elseif path s: p=image(draw s) + else: p = LaTeX(s) + fi; + p shifted (_cart(z) + labeloffset*laboff@# - + (labxf@#*lrcorner p + labyf@#*ulcorner p + + (1-labxf@#-labyf@#)*llcorner p + ) + ) + enddef; + vardef thelabelrot@#(expr s,z,an) = % Position s near z + save p; picture p; + if picture s: p=s else: p = LaTeX(s) fi; + p:=p rotatedaround (center bbox p,an); p shifted (_cart(z) + labeloffset*laboff@# - (labxf@#*lrcorner p + labyf@#*ulcorner p + (1-labxf@#-labyf@#)*llcorner p ) ) enddef; + def labelrot = draw thelabelrot enddef; %% drawarrow def drawarrow expr p = _apth:=p transformed _T; _finarr enddef; def drawdblarrow expr p = _apth:=p transformed _T; _findarr enddef; @@ -254,6 +270,7 @@ def fin = if _nbaxes=1: olddraw _axorlab fi; if coupe: clip currentpicture to (cadre transformed _T) fi; if bf: oldendfig; bf:=false;_nfig:=_nfig+1 fi; + rep_tab:=false; % Ajout octobre 2021 traces_orig; enddef; @@ -987,7 +1004,7 @@ vardef thelabelang@#(expr s,z)= else: tmpang := scantokens tmpstr fi; - tmppt := tmppath intersectionpoint (0.5urcorner p-- (0.5urcorner p + 100 * (dir (180+tmpang)))); + tmppt := tmppath intersectionpoint ((0.5urcorner p+0.5llcorner p)-- (0.5urcorner p +0.5llcorner p+ 100 * (dir (180+tmpang)))); p shifted (-tmppt + _cart(z) + labeloffset*(cosd(tmpang),sind(tmpang)) ) enddef; @@ -1020,7 +1037,58 @@ vardef nommepoint@#(text t)= enddef; +% Octobre 2021 +vardef thelabelangrot@#(expr s,z,an)= + save tmpang,tmpfig,tmppt,tmppath,tmpstr; + string tmpstr; + numeric tmpang; + pair tmppt; + path tmppath; + save p; picture p; + tmpstr := str @#; + if picture s: p=s + else: p = LaTeX(s) + fi; + tmppath := llcorner p -- lrcorner p -- urcorner p -- ulcorner p -- cycle; + p:=p rotatedaround (center tmppath,an); + if ASCII tmpstr = 91: + tmpang := scantokens substring(1,length(tmpstr)-1) of tmpstr + else: + tmpang := scantokens tmpstr + fi; + tmppt := (tmppath rotatedaround (center tmppath,an)) intersectionpoint ((0.5urcorner p+0.5llcorner p)-- (0.5urcorner p +0.5llcorner p + 100 * (dir (180+tmpang)))); + p shifted (-tmppt + _cart(z) + labeloffset*(cosd(tmpang),sind(tmpang)) ) +enddef; + +def labelangrot = draw thelabelangrot enddef; + +% Octobre 2021 +vardef nommepointrot@#(text t)(expr an)= + save $,ch,dess,latch; + pair $; + string ch,latch; + picture dess; + if (ASCII str @# < 58) or (ASCII str @# = 91): + def mylabel = labelangrot enddef + else: + def mylabel = labelrot enddef + fi; + if long_texte(t)=1: + dess:=image(draw MarquePointFig(t); + ch:=_chaine(t); + mylabel@#("$" & ch & "$",t,an) withcolor coullabel) + else: + dess:=image(% + for PP=t: + if pair PP: MarquePoint(PP); $:=PP + else: if string PP: mylabel@#(PP,$,an) else: mylabel@#(PP scaled defaultscale,$,an) fi withcolor coullabel + fi; + endfor) + fi; + dess +enddef; +def nommerot = draw nommepointrot enddef; vardef nommecourbe@#(suffix p)(text t)= save A,ch,dess; @@ -1043,10 +1111,6 @@ vardef nommecourbe@#(suffix p)(text t)= enddef; - - - - vardef nommeobj@#(text t)= save $; picture $; @@ -1088,7 +1152,6 @@ vardef pointnommetime(expr p)= pair Pt,P[]; numeric nbint,pp,T[]; intercourbestimes(T)(cadre,p); - show T[1]; Pt:=_O;pp:=0; if known T[1]: Pt:= point T[1] of p; @@ -1140,8 +1203,6 @@ vardef nommeautoobjsuf(suffix p)= enddef; vardef estcadree primary f = - show llcorner f; show llcorner cadre transformed _T; - show urcorner f; show urcorner cadre; (xpart urcorner f <= xpart urcorner (cadre transformed _T)) and (ypart urcorner f <= ypart urcorner (cadre transformed _T)) and (xpart llcorner f >= xpart llcorner (cadre transformed _T)) @@ -1674,18 +1735,6 @@ vardef splineder(text t)(text q)= enddef; -%% Novembre 2017 -%vardef deriveesplinecubique(suffix k)(suffix xs,ys)(expr n)= -%% renvoie les dérivées pour interpolation avec splines cubiques -%% source : https://en.wikipedia.org/wiki/Spline_interpolation -%% xs[] et ys[] sont des listes, n est le nombre de valeurs -%% Renvoie les dérivées dans la liste k[] -% (2k[0] + k[1])/(xs[1] - xs[0]) = 3(ys[1]-ys[0])/((xs[1]-xs[0])**2); -% for i=1 upto n-1: -% k[i-1]/(xs[i] - xs[i-1]) + 2k[i]/(xs[i] - xs[i-1]) + 2k[i]/(xs[i+1] - xs[i]) + k[i+1]/(xs[i+1] - xs[i]) = 3(ys[i] - ys[i-1])/((xs[i]-xs[i-1])**2) + 3(ys[i+1] - ys[i])/((xs[i+1]-xs[i])**2); -% endfor -% (k[n-1] + 2k[n])/(xs[n]-xs[n-1]) = 3(ys[n]-ys[n-1])/((xs[n]-xs[n-1])**2); -%enddef; %Mars 2019 vardef deriveesplinecubique(suffix k)(suffix xs,ys)(expr n)= @@ -1706,19 +1755,6 @@ vardef deriveesplinecubique(suffix k)(suffix xs,ys)(expr n)= fi; enddef; -%% Novembre 2017 -%vardef splineinterpolfonct_pt(text t)(expr x)= -%% t est la liste des points A,B,C... -% save xa,ya,dd,n; -% numeric xa[],ya[],dd[],n; -% n:=-1; -% for i=t: -% n := n + 1; -% xa[n] := xpart i; ya[n] := ypart i; -% endfor -% deriveesplinecubique(dd)(xa,ya)(n); -% splinederfonct((xa[0],ya[0],dd[0]) for ii=1 upto n: , (xa[ii],ya[ii],dd[ii]) endfor)(x) -%enddef; % Mars 2019 vardef splineinterpolfonct_pt(text t)(expr x)= @@ -1776,8 +1812,6 @@ enddef; - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%% TANGENTES %%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -2739,9 +2773,6 @@ vardef LaTeX primary sc = else: LaTeXsetup; textext(sc) scaled defaultscale fi enddef; -%vardef LaTeX primary sc = -% LaTeXsetup; textext(sc) scaled defaultscale -%enddef; % Mai 2017 @@ -2754,6 +2785,49 @@ enddef; def legende = draw thelegende enddef; +% Octobre 2021 +% Cote sans flèche +vardef thecote@#(expr A, B, texte)= + save I; pair I; + save an; numeric an; + I=0.5[A,B]; + an=angle(B-A); + if str @# ="top": + thelabelangrot[an+90](texte,I,an) + else: + thelabelangrot[an-90](texte,I,an) + fi +enddef; + +def cote = draw thecote enddef; + +% Octobre 2021 +% Cote avec flèche +numeric dec_cote; +dec_cote:=4mm; +boolean traits_cote; +traits_cote:=false; + +vardef thecotefleche@#(expr a,b,t)= + save pp,an; + pair pp[];numeric an; + an := if str @# ="top": 90 else: -90 fi; + pp[1]:=dec_cote*(unitvector(b-a) rotated an) transformed inverse _T; + pp[2]:=(dec_cote+1mm)*(unitvector(b-a) rotated an) transformed inverse _T; + image(% + if traits_cote: + draw a--(a shifted pp[2]) dashed evenly; + draw b--(b shifted pp[2]) dashed evenly; + fi + drawdblarrow ((a--b) shifted pp[1]); + cote@#(a shifted pp[1],b shifted pp[1],t) + ) +enddef; + +def cotefleche = + draw thecotefleche +enddef; + %%%%%%%%%%%%%%%Figure intermédiaire%%%%%%%%%%%%%%%%%%% def figureinter= @@ -2917,3 +2991,642 @@ marine:=conversion_cmyn_rvb(Marine); moutarde:=conversion_cmyn_rvb(Moutarde); vertfonce:=conversion_cmyn_rvb(Vertfonce); + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%% TABLEAUX ET DAMIERS %%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Octobre 2021 +% + +boolean rep_tab; +rep_tab:=false; + +color coultableau[],coullignes; +numeric eplignes; + + + +def tableau(text t)= + save vv,ind; + numeric vv[],ind; + ind:=0; + for i=t: + ind:=ind +1; + vv[ind]:=i; + endfor + vv[4]:=vv[ind]; + coullignes:=black; + eplignes:=0.7; + tab_init; + deftableau(vv[1],vv[2],vv[3],vv[4]); + coultableau[1]:=0.45white; + coultableau[2]:=0.9white; +enddef; + + +def deftableau(expr n,p,u,v)= + rep_tab:=true; + repere(-1,n+2,u,-1,p+2,v); + rep_tab_n:=n;rep_tab_p:=p; +enddef; + + +vardef grille(expr dx,dy)= + save coul;color coul; + coul:=coullignes; + ep := eplignes; + save QuadXmin,QuadXmax,QuadYmin,QuadYmax; + numeric QuadXmin,QuadXmax,QuadYmin,QuadYmax; + QuadXmin:=0;QuadXmax:=rep_tab_n;QuadYmin:=0;QuadYmax:=rep_tab_p; + quadrillage(dx,dy) shifted _cart(0.5,0.5) +enddef; + +vardef damier(expr dx,dy) text t= + save coul;color coul; + coul:=coullignes; + ep := eplignes; + save count_tmp,pn; + numeric count_tmp,pn; + save QuadXmin,QuadXmax,QuadYmin,QuadYmax; + numeric QuadXmin,QuadXmax,QuadYmin,QuadYmax; + QuadXmin:=0;QuadXmax:=rep_tab_n;QuadYmin:=0;QuadYmax:=rep_tab_p; + count_tmp:=2;pn=(((rep_tab_n-1) div dx)+1) mod 2; + image(% + for j=1 step dy until rep_tab_p: + for i=1 step dx until rep_tab_n: + count_tmp:=3-count_tmp; + fill ((i,j) -- (i+dx,j) -- (i+dx,j+dy) -- (i,j+dy) -- cycle) shifted (-0.5,-0.5) withcolor coultableau[count_tmp]; + endfor + if pn=0: count_tmp:=3-count_tmp fi; + endfor + draw quadrillage(dx,dy) shifted _cart(0.5,0.5) t + ) +enddef; + + +%%%%%%%%% Lignes particulières + +vardef segmenth(expr x,y)= + ((0,0)--(1,0)) shifted (x-0.5,y+0.5) +enddef; + +vardef segmentv(expr x,y)= + ((0,0)--(0,1)) shifted (x+0.5,y-0.5) +enddef; + +vardef ligneh(expr m)(text t)= + save ct; + numeric ct; + ct:=0; + image(% + for i=t: + ct:=ct+1; + if i=1: + draw segmenth(ct,m) + fi; + endfor + ) +enddef; + +vardef lignesh(text t)= + save lig,col; + numeric lig,col; + lig:=rep_tab_p;col:=1; + image(% + for i=t: + if i=1: + draw segmenth(col,lig) + fi; + if col=rep_tab_n: + lig:=lig-1;col:=1; + else: + col:=col+1; + fi + endfor + ) +enddef; + +vardef lignesv(text t)= + save lig,col; + numeric lig,col; + lig:=rep_tab_p;col:=0; + image(% + for i=t: + if i=1: + draw segmentv(col,lig) + fi; + if col=rep_tab_n: + col:=0;lig:=lig-1; + else: + col:=col+1; + fi + endfor + ) +enddef; + + + + +% largeur d'une figure +vardef largeur_fig(expr pic)= + abs(lrcorner pic - llcorner pic) +enddef; + + +% Coordonnées des cases du tableau % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% coordonnées dans le tableau +vardef _tab(expr x,y)= + save px,py; + numeric px,py; + px := if inverse_coord_x: rep_tab_n + deb_coord_x - x else: x - deb_coord_x + 1 fi; + py := if inverse_coord_y: rep_tab_p + deb_coord_y - y else: y - deb_coord_y + 1 fi; + (px,py) +enddef; + + +def tab_init= %initialisation variables + % Style : "1", "i", "I", "a", "A" + string style_coord_x,style_coord_y; + style_coord_x:="1"; + style_coord_y:="1"; + + % Première valeur + numeric deb_coord_x,deb_coord_y; + deb_coord_x:=1; + deb_coord_y:=1; + + % Alignement + string align_coord_x,align_coord_y; + align_coord_x:="c";align_coord_y:="c"; + + % Placement des coordonnées + string place_coord; + numeric place_coord_x,place_coord_y; + place_coord:="bl"; + place_coord_x:=0; + place_coord_y:=0; + + % Inversion coordonnées + boolean inverse_coord_x,inverse_coord_y; + inverse_coord_x:=false; + inverse_coord_y:=false; +enddef; + + +vardef compoetiquette(expr n,t)= + if t=1: "$\num{" & decimal(n) & "}$" + elseif t=2: "\strut\romannumeral" & decimal(n) + elseif t=3: "\MakeUppercase{\romannumeral" & decimal(n) & "}" + elseif t=4: "\strut " & char(n+96) + else: char(n+64) + fi +enddef; + +vardef coordx= + save stdeb,stfin,tt,aa; + string stdeb,stfin; + numeric tt,aa; + if (substring (0,1) of place_coord = "h") or (substring (0,1) of place_coord = "t") or (substring (1,2) of place_coord = "h") or (substring (1,2) of place_coord = "t"): + place_coord_x:=1 + else: + place_coord_x:=0 + fi; + if style_coord_x="1": + tt:=1 + elseif style_coord_x="i": + tt:=2 + elseif style_coord_x="I": + tt:=3 + elseif style_coord_x="a": + tt:=4 + elseif style_coord_x="A": + tt:=5 + fi; + image(% + for i=1 upto rep_tab_n: + aa:= if inverse_coord_x: rep_tab_n+1-i else: i fi; + if place_coord_x=0: + label.bot(LaTeX(compoetiquette(i-1+deb_coord_x,tt)),(aa,0.5)); + else: + label.top(LaTeX(compoetiquette(i-1+deb_coord_x,tt)),(aa,rep_tab_n+0.5)); + fi + endfor + ) +enddef; + + +vardef coordy= + save stdeb,stfin,tt,ll,cc; + string stdeb,stfin; + numeric tt,ll,cc; + if align_coord_y="g": align_coord_y:="l" fi; + if align_coord_y="d": align_coord_y:="r" fi; + ll:=0; + if (substring (0,1) of place_coord = "d") or (substring (0,1) of place_coord = "r") or (substring (1,2) of place_coord = "d") or (substring (1,2) of place_coord = "r"): + place_coord_y:=1 + else: + place_coord_y:=0 + fi; + if style_coord_y="1": + tt:=1 + elseif style_coord_y="i": + tt:=2 + elseif style_coord_y="I": + tt:=3 + elseif style_coord_y="a": + tt:=4 + elseif style_coord_y="A": + tt:=5 + fi; + for i=1 upto rep_tab_p: + ll:=max(ll,largeur_fig(LaTeX(compoetiquette(i-1+deb_coord_y,tt)))); + endfor + image(% + for i=1 upto rep_tab_p: + cc:= if inverse_coord_y: rep_tab_p+1-i else: i fi; + if place_coord_y=0: + label.lft(LaTeX("\makebox[" & decimal(ll/cm) & "cm][" & align_coord_y &"]{" & compoetiquette(i-1+deb_coord_y,tt) & "}"),(0.5,cc)); + else: + label.rt(LaTeX("\makebox[" & decimal(ll/cm) & "cm][" & align_coord_y &"]{" & compoetiquette(i-1+deb_coord_y,tt) & "}"),(rep_tab_p+0.5,cc)); + fi + endfor + ) +enddef; + +vardef coord= + image(% + draw coordy; + draw coordx;) +enddef; + + +%%%%%%%%% Numérotation dames + +vardef numerotationdames= + save ct; + numeric ct; + ct:=0; + image( + for j= rep_tab_p downto 1: + for i=1 upto rep_tab_n: + if (i+j) mod 2 = 0: + ct:=ct+1; + label("\bfseries" & decimal(ct),(i,j)); + fi + endfor + endfor + ) +enddef; + +%%% Remplissage de cases %%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +vardef contour_case(expr n,m)= + ((0,0)--(1,0)--(1,1)--(0,1)--cycle) shifted (_tab(n,m)-(0.5,0.5)) +enddef; + +vardef case(expr n,m) text t= + image(% + fill contour_case(n,m) t; + draw (contour_case(n,m)) withpen pencircle scaled eplignes withcolor coullignes + ) +enddef; + +vardef cases(text pts) text t= + image(% + for i= pts: + draw case(xpart i,ypart i) t; + endfor + ) +enddef; + +%%% Placement d'un objet dans une case +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +vardef thetablabel(expr s,n,m)= % place l'objet s dans la case (n,m) + save p; picture p; + if picture s: p=s + elseif path s: p=image(draw s) + else: p = LaTeX(s) + fi; + thelabel(p,_tab(n,m)) +enddef; + +def tablabel = draw thetablabel enddef; + +vardef tablabels(expr s)(text t) text cc= + save li, co; + numeric li,co; + for i=t: + if pair i: + tablabel(s,xpart i,ypart i) cc; + else: + if rep_tab_p mod 2 = 1: + li := rep_tab_p - ((2i-2) div rep_tab_n); + if rep_tab_n mod 2 =0: + co:=(2i-1 - (li mod 2)) mod rep_tab_n + 1; + else: + co:=(2i-2) mod rep_tab_n + 1; + fi + else: + li := rep_tab_p - ((2i-1) div rep_tab_n); + if rep_tab_n mod 2 =0: + co:=(2i-1 - (li mod 2)) mod rep_tab_n + 1; + else: + co:=(2i-1) mod rep_tab_n + 1; + fi + fi + tablabel(s,co,li); + fi + endfor +enddef; + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%% DESSINS %%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% pions - 2 versions pioni et pionii +vardef Pioni(expr coulint,coulext)= + image(% + fill cercle((0,0),0.4) couleur coulint; + draw cercle((0,0),0.4) epaisseur (0.5*Ux/cm) couleur coulext; + draw cercle((0,0),0.25) epaisseur (0.5*Ux/cm) couleur coulext; + draw (-0.05,0)--(0.05,0) epaisseur (0.5*Ux/cm) couleur coulext; + draw (0,0.05)--(0,-0.05) epaisseur (0.5*Ux/cm) couleur coulext + ) +enddef; + + +%vardef Pionnoiri = Pioni(noir,0.85blanc) enddef; +%vardef Pionblanci = Pioni(0.9blanc,noir) enddef; + + +vardef Pionii(expr coulint,coulext)= + image(% + fill (cercle((0,0),0.4) yscaled 0.5) couleur coulint; + draw (arccercle((-0.4,0),(0,0),(0.4,0)) yscaled 0.5) epaisseur (0.5*Ux/cm) couleur coulext; + fill (cercle((0,0),0.4) yscaled 0.5 shifted (0,0.1)) couleur coulint; + draw (cercle((0,0),0.4) yscaled 0.5 shifted (0,0.1)) epaisseur (0.5*Ux/cm) couleur coulext; + draw (-0.4,0)--(-0.4,0.1) epaisseur (0.5*Ux/cm) couleur coulext; + draw (0.4,0)--(0.4,0.1) epaisseur (0.5*Ux/cm) couleur coulext; + ) +enddef; + +% dame - 2 versions damei et dameii +vardef Damei(expr coulint,coulext)= + image(% + fill cercle((0,0),0.4) couleur coulint; + draw cercle((0,0),0.4) epaisseur (0.5*Ux/cm) couleur coulext; + fill cercle((0,0),0.08) couleur coulext; + draw (-0.15,0)--(0.15,0) epaisseur (0.9*Ux/cm) couleur coulext; + draw (0,0.15)--(0,-0.15) epaisseur (0.9*Ux/cm) couleur coulext; + draw (-0.1,0.1)--(0.1,-0.1) epaisseur (0.3*Ux/cm) couleur coulext; + draw (0.1,0.1)--(-0.1,-0.1) epaisseur (0.3*Ux/cm) couleur coulext + ) +enddef; + +%vardef Damenoirei = Dame(noir,0.85blanc) enddef; +%vardef Dameblanchei = Dame(0.9blanc,noir) enddef; + +vardef Dameii(expr coulint,coulext)= + image(% + fill (cercle((0,0),0.4) yscaled 0.5) couleur coulint; + draw (arccercle((-0.4,0),(0,0),(0.4,0)) yscaled 0.5) epaisseur (0.5*Ux/cm) couleur coulext; + fill (cercle((0,0),0.4) yscaled 0.5 shifted (0,0.1)) couleur coulint; + draw (arccercle((-0.4,0),(0,0),(0.4,0)) yscaled 0.5 shifted (0,0.1)) epaisseur (0.5*Ux/cm) couleur coulext; + fill (cercle((0,0),0.4) yscaled 0.5 shifted (0,0.2)) couleur coulint; + draw (cercle((0,0),0.4) yscaled 0.5 shifted (0,0.2)) epaisseur (0.5*Ux/cm) couleur coulext; + draw (-0.4,0)--(-0.4,0.2) epaisseur (0.5*Ux/cm) couleur coulext; + draw (0.4,0)--(0.4,0.2) epaisseur (0.5*Ux/cm) couleur coulext; + ) +enddef; + + +def Pion(expr v)= + if v=1: + Pioni + else: + Pionii + fi +enddef; + +def Dame(expr v)= + if v=1: + Damei + else: + Dameii + fi +enddef; + +% Croix +vardef Croix= + interim linecap:=butt; + image(% + draw (0,0)--(1,1) epaisseur (1.2*Ux/cm); + draw (0,1)--(1,0) epaisseur (1.2*Ux/cm) + ) +enddef; + +% Trou +vardef Trou= + image(% + fill fullcircle scaled 0.8) +enddef; + +% Marques - 2 versions +vardef Marquei(expr coul)= + save tmp; + save a,b,c,d; + pair a,b,c,d; + picture tmp; + tmp:=image( + fill fullcircle scaled 0.8 yscaled 0.4 shifted (0,-0.2) couleur coul); + a=llcorner tmp;b= lrcorner tmp; c=urcorner tmp; d=ulcorner tmp; + setbounds tmp to (a--b--(2.2c-1.2b)--(2.2d-1.2a)--cycle); + tmp +enddef; + +vardef Marqueii(expr coul)= + image(% + fill((0.1,0.1)--(0.9,0.1)--(0.9,0.9)--(0.1,0.9)--cycle) couleur coul; + ) +enddef; + +def Marque(expr v)= + if v=1: + Marquei + else: + Marqueii + fi +enddef; + +% Mur +vardef Mur (expr coulint,coulext)= + image(% + fill ((0,0)--(1,0)--(1,1)--(0,1)--cycle) couleur coulint; + draw ((0,0)--(0.3,0)--(0.3,0.7)--(0,0.7)--cycle) epaisseur (Ux/cm) couleur coulext; + draw ((0.3,0)--(1,0)--(1,0.3)--(0.3,0.3)--cycle) epaisseur (Ux/cm) couleur coulext; + draw ((1,0.3)--(1,1)--(0.7,1)--(0.7,0.3)--cycle) epaisseur (Ux/cm) couleur coulext; + draw ((0.7,1)--(0,1)--(0,0.7)--(0.7,0.7)--cycle) epaisseur (Ux/cm) couleur coulext; + ) +enddef; + +% Plot +vardef Plot(expr couli,coulii)= + image(% + fill cercle((0,0),0.4) yscaled 0.4 couleur coulii; + fill cercle((0,0),0.3) yscaled 0.4 couleur couli; + fill (-0.3,0)--(-0.05,0.6)--(0.05,0.6)--(0.3,0)--cycle couleur couli; + fill cercle((0,0),0.05) yscaled 0.4 shifted (0,0.6) couleur coulii; + ) +enddef; + +% Caisse +vardef Caisse(expr coulint,coulext)= + save a,b; + pair a,b,c,d; + a=(0.1,0.1);b=(0.9,0.1); + c=(0.9,0.9);d=(0.1,0.9); + image(% + fill (a--b--c--d--cycle) couleur coulint; + for i=1 upto 7: + draw (a--b) shifted (0,0.1*i) epaisseur (0.7*Ux/cm) couleur coulext; + endfor + show Ux/cm; + draw a--b--c--d--cycle epaisseur (1.5*Ux/cm) couleur coulext; + draw a--c epaisseur (1.5*Ux/cm) couleur coulext; + draw b--d epaisseur (1.5*Ux/cm) couleur coulext; + ) +enddef; + + + +% Robot +vardef Rob_chaine= + (1.5,1)..(1.7,0.7)..(2.4,0.4)..(4.4,0.3)..(6.4,0.3)..(7,0.5)..(7,1.2)..(6.2,2.2)..(5.3,3)..(3.9,3.5)..(3.1,3.6)..(2.3,3.2)..(1.7,2.3)..cycle +enddef; + + +vardef Rob_corps= + (6.28,7.33)..(7.23,6.67)..(7.5,6.36)..(7.6,5)..(7.5,3.53)..(7.35,3.23)..(7,3)..(6.43,2.82)..(5.95,2.74)..(2,3.27)..(1.64,3.98)..(1.46,5.11)..(1.46,6.41)..(1.99,7.34)..cycle +enddef; + +vardef Rob_tete= + fullcircle xscaled 5.9 yscaled 3.8 shifted (4.1,8.8) +enddef; + +vardef Rob_haut= + fullcircle xscaled 5.5 yscaled 1.6 shifted (4.1,10.4) +enddef; + +vardef Rob_bras= + (3,5.5)..(3.4,5)..(3.8,4.5)..(4.2,4.1)..(5,4)..(6,4)..(6.3,4.8)..(5.9,5.4)..(4.9,5.2)..(4.9,5.7)..(4.6,6.2)..(4.1,6.5)..(3.5,6.3)..(3,5.9)..cycle +enddef; + +vardef Rob_oeild= + fullcircle scaled 0.9 shifted (5.1,8.7) +enddef; + +vardef Rob_oeilg= + fullcircle xscaled 0.6 yscaled 0.85 shifted (6.67,9.1) +enddef; + +vardef Rob_bouche= + (5.9,7.8)..(6.2,7.8)..(6.4,7.9) +enddef; + +vardef Robotdroite(expr couli,coulii)= + save tmp; + picture tmp; + tmp:=image(% + fill Rob_chaine shifted (2,2) withcolor couli; + draw Rob_chaine shifted (2,2) withcolor 0.7couli+0.3white epaisseur (8*Ux/cm); + fill Rob_corps withcolor coulii; + fill Rob_tete withcolor couli; + fill buildcycle(Rob_tete,Rob_haut) withcolor coulii; + fill Rob_oeild withcolor coulii; + fill Rob_oeilg withcolor coulii; + draw Rob_bouche withcolor coulii epaisseur (5*Ux/cm); + fill Rob_bras withcolor 0.7couli+0.3white; + fill Rob_chaine withcolor couli; + draw Rob_chaine withcolor 0.7couli+0.3white epaisseur (8*Ux/cm)) scaled 0.085; + tmp +enddef; + +vardef Robotgauche(expr couli,coulii)= + Robotdroite(couli,coulii) xscaled -1 +enddef; + + +% Bateau +vardef Bat_coque= + (-0.8,0.4)--(-0.55,0.1)--(0.8,0.1)--(0.7,0.25)--(0.1,0.25)--(-0.1,0.4)--cycle +enddef; + +vardef Bat_cabine= + (-0.6,0.4)--(-0.5,0.55)--(0.2,0.55)--(0.3,0.4)--(0.5,0.4)--(0.6,0.25)--(0.1,0.25)--(-0.1,0.4)--cycle +enddef; + +vardef Bat_barre= + (-0.54,0.475)--(-0.15,0.475) +enddef; + +vardef Bat_cheminee= + (0,0)--(0,0.1)--(0.15,0.1)--(0.15,0)--cycle +enddef; + + +vardef Bateau(expr num, coul)= + save e,fx,fy; + numeric e,fx,fy; + fx := if num=2: 1 + elseif num=1: 0.5 + elseif num=3: 1.6 + elseif num=4: 2.3 + else: 1 + fi; + fy := if num=2: 1 + elseif num=1: 0.7 + elseif num=3: 1.2 + elseif num=4: 1.3 + else: 1 + fi; + e:=(0.7*fx-0.15*num)/(num+1); + image(% + fill Bat_coque xscaled fx yscaled fy couleur (0.75*blanc+0.25*coul) ; + fill Bat_cabine xscaled fx yscaled fy couleur blanc; + for i=0 upto num-1: + fill Bat_cheminee shifted ((-0.5,0.55) xscaled fx yscaled fy) shifted (e+i*(e+0.15),0) couleur (0.75*blanc+0.25*coul); + draw Bat_cheminee shifted ((-0.5,0.55) xscaled fx yscaled fy) shifted (e+i*(e+0.15),0) epaisseur (0.7*Ux/cm) couleur coul; + endfor + draw Bat_coque xscaled fx yscaled fy epaisseur (0.7*Ux/cm) couleur coul; + draw Bat_cabine xscaled fx yscaled fy epaisseur (0.7*Ux/cm) couleur coul; + draw Bat_barre xscaled fx yscaled fy epaisseur (1.2*Ux/cm) couleur coul; + ) +enddef; + +% Eau +vardef Eau(expr coul)= + save vague; + path vague; + vague :=(-0.3,0)..(-0.15,0.05){right}..(0,0)..(0.15,-0.05){right}..(0.3,0); + image(% + draw vague epaisseur (Ux/cm) couleur coul; + draw vague shifted (0,0.15) epaisseur (Ux/cm) couleur coul; + ) +enddef; + +% Flèche +vardef Fleche(expr coulint,coulext)= + save tmp; + path tmp; + tmp:= ((0.45,0)--(0.45,3)--(1,3)--(0,4)--(-1,3)--(-0.45,3)--(-0.45,0)--cycle) scaled 0.2; + image(fill tmp couleur coulint; + draw tmp couleur coulext) +enddef; + |