initial commit
This commit is contained in:
commit
64378ee2b2
6 changed files with 732 additions and 0 deletions
75
MAxMA.mp
Normal file
75
MAxMA.mp
Normal file
|
@ -0,0 +1,75 @@
|
|||
% Le input shadows donne l'acces
|
||||
% à la macro drawShadow(p);
|
||||
input pfa
|
||||
%vspace := 2vspace;
|
||||
%u:=6mm;
|
||||
%hspace := 2hspace;
|
||||
beginfig(1) ;
|
||||
|
||||
z1 = origin;
|
||||
z2 = z1 shifted (2hspace,0);
|
||||
|
||||
z3-z4 = z1-z2;
|
||||
z7-z8 = z5-z6 = 2(z3-z4) ;
|
||||
z3 = z1 shifted (0,-3vspace);
|
||||
|
||||
x5-x1=x4-x6;
|
||||
y5-y3=y3 - y1;
|
||||
|
||||
y7-y5=-3vspace;
|
||||
x7=x5;
|
||||
taille := 2hauteur(btex $A$ etex) ;
|
||||
drawCadreLabel(z1 shifted (-hspace, 0 ),z2 shifted (hspace,taille),btex $A$ etex);
|
||||
drawCadreLabel(z3 shifted (-hspace, 0 ),z4 shifted (hspace,taille),btex $B$ etex);
|
||||
drawCadreLabel(z7 shifted (-hspace, 0 ) ,z6 shifted (2.3hspace,taille),btex $A \times B$ etex);
|
||||
|
||||
drawIFState(btex $(q_1)$ etex,
|
||||
btex $\iota(q_1)$ etex,
|
||||
btex $\tau(q_1)$ etex,
|
||||
z1) ;
|
||||
drawIFState(btex $(q_2)$ etex,
|
||||
btex $\iota(q_2)$ etex,
|
||||
btex $\tau(q_2)$ etex,
|
||||
z2) ;
|
||||
|
||||
drawIFState(btex $(r_1)$ etex,
|
||||
btex $\iota(r_1)$ etex,
|
||||
btex $\tau(r_1)$ etex,
|
||||
z3) ;
|
||||
drawIFState(btex $(r_2)$ etex,
|
||||
btex $\iota(r_2)$ etex,
|
||||
btex $\tau(r_2)$ etex,
|
||||
z4) ;
|
||||
|
||||
|
||||
drawIFState(btex $(q_1,r_1)$ etex,
|
||||
btex $\iota(q_1)\iota(r_1)$ etex,
|
||||
btex $\tau(q_1)\tau(r_1)$ etex,
|
||||
z5) ;
|
||||
drawIFState(btex $(q_1,r_2)$ etex,
|
||||
btex $\iota(q_1)\iota(r_2)$ etex,
|
||||
btex $\tau(q_1)\tau(r_2)$ etex,
|
||||
z6) ;
|
||||
drawIFState(btex $(q_2,r_1)$ etex,
|
||||
btex $\iota(q_2)\iota(r_1)$ etex,
|
||||
btex $\tau(q_2)\tau(r_1)$ etex,
|
||||
z7) ;
|
||||
drawIFState(btex $(q_2,r_2)$ etex,
|
||||
btex $\iota(q_2)\iota(r_2)$ etex,
|
||||
btex $\tau(q_2)\tau(r_2)$ etex,
|
||||
z8) ;
|
||||
|
||||
drawArc(z1,z2,30,btex $\varphi(q_1,a,q_2)$ etex);
|
||||
drawArc(z2,z2,30,btex $\varphi(q_2,a,q_2)$ etex);
|
||||
|
||||
drawArc(z3,z4,30,btex $\varphi(r_1,a,r_2)$ etex);
|
||||
drawArc(z4,z4,30,btex $\varphi(r_2,a,r_2)$ etex);
|
||||
|
||||
drawArc(z5,z8,-10,btex $\varphi(q_1,a,q_2)\varphi(r_1,a,r_2)$ etex);
|
||||
drawArc(z7,z8, 20,btex $\varphi(q_2,a,q_2)\varphi(r_1,a,r_2)$ etex);
|
||||
drawArc(z6,z8,-100,btex $\varphi(q_1,a,q_2)\varphi(r_2,a,r_2)$ etex);
|
||||
drawArc(z8,z8, 30,btex $\varphi(q_2,a,q_2)\varphi(r_2,a,r_2)$ etex);
|
||||
|
||||
endfig ;
|
||||
|
||||
end.
|
104
default.mp
Normal file
104
default.mp
Normal file
|
@ -0,0 +1,104 @@
|
|||
% collected graphics of job "tmp"
|
||||
if unknown context_tool : input mp-tool.mpii ;
|
||||
fi ;
|
||||
if unknown context_spec : input mp-spec.mpii ;
|
||||
fi ;
|
||||
if unknown context_grph : input mp-grph.mpii ;
|
||||
fi ;
|
||||
defaultfont := "cmr10" ;
|
||||
defaultscale := 12.0pt/10pt ;
|
||||
graphictextformat := "context" ;
|
||||
graphictextdirective "\global \loadfontfileoncetrue " ;
|
||||
string contextversion ;
|
||||
contextversion := "2003.1.31" ;
|
||||
if not known _data_prefix_ : string _data_prefix_ , _data_suffix_ ;
|
||||
fi ;
|
||||
_data_prefix_ := "mpd-" ;
|
||||
_data_suffix_ := ".mpd" ;
|
||||
boolean collapse_data ;
|
||||
collapse_data := true ;
|
||||
_data_suffix_ := ".mpd" ;
|
||||
cmykcolors := true ;
|
||||
spotcolors := true ;
|
||||
color OverlayColor, OverlayLineColor ;
|
||||
OverlayWidth := 138.0014pt ;
|
||||
OverlayHeight := 17.84998pt ;
|
||||
OverlayDepth := 17.84998pt ;
|
||||
OverlayColor := (0,0,0) ;
|
||||
OverlayLineWidth := 0.4pt;
|
||||
OverlayLineColor := (0,0,0) ;
|
||||
BaseLineSkip := 14.46669pt;
|
||||
LineHeight := 14.46669pt;
|
||||
BodyFontSize := 12.0pt;
|
||||
TopSkip := 12.0pt;
|
||||
StrutHeight := 10.41603pt;
|
||||
StrutDepth := 4.05064pt;
|
||||
CurrentWidth := 138.0014pt;
|
||||
CurrentHeight := 17.84998pt;
|
||||
EmWidth := 11.74988pt;
|
||||
ExHeight := 5.16667pt;
|
||||
PageNumber := 1;
|
||||
RealPageNumber := 1;
|
||||
LastPageNumber := 1;
|
||||
prologues := 2;
|
||||
if unknown context_page : input mp-page.mpii ;
|
||||
fi ;
|
||||
boolean PageStateAvailable, OnRightPage, InPageBody ;
|
||||
PageStateAvailable := OnRightPage := true ;
|
||||
InPageBody := false ;
|
||||
def LoadPageState = OnRightPage := true;
|
||||
RealPageNumber := 1;
|
||||
PageNumber := 1;
|
||||
NOfPages := 1;
|
||||
PaperHeight := 845.04684pt;
|
||||
PaperWidth := 597.50787pt;
|
||||
PrintPaperHeight := 845.04684pt;
|
||||
PrintPaperWidth := 597.50787pt;
|
||||
TopSpace := 71.12546pt;
|
||||
BottomSpace := 62.60228pt;
|
||||
BackSpace := 71.13275pt;
|
||||
CutSpace := 99.58769pt;
|
||||
MakeupHeight := 711.3191pt;
|
||||
MakeupWidth := 426.78743pt;
|
||||
TopHeight := 0.0pt;
|
||||
TopDistance := 0.0pt;
|
||||
HeaderHeight := 56.90294pt;
|
||||
HeaderDistance := 0.0pt;
|
||||
TextHeight := 597.51323pt;
|
||||
FooterDistance := 0.0pt;
|
||||
FooterHeight := 56.90294pt;
|
||||
BottomDistance := 0.0pt;
|
||||
BottomHeight := 0.0pt;
|
||||
LeftEdgeWidth := 0.0pt;
|
||||
LeftEdgeDistance := 0.0pt;
|
||||
LeftMarginWidth := 75.58197pt;
|
||||
LeftMarginDistance := 11.99829pt;
|
||||
TextWidth := 426.78743pt;
|
||||
RightMarginDistance := 11.99829pt;
|
||||
RightMarginWidth := 75.58197pt;
|
||||
RightEdgeDistance := 0.0pt;
|
||||
RightEdgeWidth := 0.0pt;
|
||||
InnerMarginDistance := 11.99829pt;
|
||||
InnerMarginWidth := 75.58197pt;
|
||||
OuterMarginDistance := 11.99829pt;
|
||||
OuterMarginWidth := 75.58197pt;
|
||||
InnerEdgeDistance := 0.0pt;
|
||||
InnerEdgeWidth := 0.0pt;
|
||||
OuterEdgeDistance := 0.0pt;
|
||||
OuterEdgeWidth := 0.0pt;
|
||||
PageOffset := 0.0pt;
|
||||
PageDepth := 0.0pt;
|
||||
enddef ;
|
||||
ResetTextAreas ;
|
||||
SaveTextAreas ;
|
||||
ResetTextAreas ;
|
||||
if unknown context_core : input mp-core.mpii ;
|
||||
fi ;
|
||||
local_multi_par_area:=false;
|
||||
;;
|
||||
let mprunend = end ;
|
||||
|
||||
% On choisit l'unité de mesure principale
|
||||
% celle là est pas mal pour utiliser l'ombre comme il faut.
|
||||
|
||||
u:=2mm;
|
53
exemple.mp
Normal file
53
exemple.mp
Normal file
|
@ -0,0 +1,53 @@
|
|||
% le input pour utiliser les macros
|
||||
input pfa ;
|
||||
|
||||
% la défintion de chaque figure se fait entre
|
||||
% beginfig(numéro de la figure) ;
|
||||
% ...
|
||||
% endfig;
|
||||
beginfig(1) ;
|
||||
% z est un nom de variable réservé pour être un tableau de coordonnées
|
||||
% par exemple si on écrit z1=origin, alors on peut utiliser directement
|
||||
% x1 et y1 qui valent tous les deux 0.
|
||||
z1 = origin;
|
||||
% hspace correspond à l'espace horizontal standart entre deux états.
|
||||
% Comme dans l'exemple il y a du texte, on rajoute un peu plus
|
||||
z2 = (hspace+2cm,0);
|
||||
|
||||
% si on veut dessiner un état non initial et non terminal
|
||||
% on utilise
|
||||
% drawState(texteEtat, position)
|
||||
% pour un état terminal et pas initial
|
||||
% drawFState(texteEtat, texteFinal, position)
|
||||
% pour un état initial et pas terminal
|
||||
% drawIState(texteEtat, texteInitial, position)
|
||||
% pour un état initial et terminal
|
||||
% drawIFState(texteEtat, texteInitial, texteTerminal, position)
|
||||
|
||||
% ici on trace un état initial et terminal qui s'appelle q_1 (écrit
|
||||
% LaTeX celà signifie q avec 1 en indice bas)
|
||||
% on écrit 1/2 pour la valeur d'initialisation
|
||||
% on écrit \alpha pour la valeur terminale
|
||||
drawIFState(btex $q_1$ etex,
|
||||
btex $$ \frac{1}{2} $$ etex,
|
||||
btex $ \alpha $ etex,
|
||||
z1);
|
||||
|
||||
% presque pareil qu'avant seule les valeur changent
|
||||
drawIFState(btex $q_2$ etex,
|
||||
btex $$ \frac{1}{2} $$ etex,
|
||||
btex $ \alpha^2 $ etex,
|
||||
z2);
|
||||
|
||||
% On peut maintenant tracer des transitions avec
|
||||
% drawArc(positionDépart, positionArrivé, angle de sortie, texte)
|
||||
drawArc(z1,z1,0,btex $$\eqalign{& a,\alpha \cr & b,1-2\alpha } $$ etex) ;
|
||||
drawArc(z2,z2,0,btex $$\eqalign{& a,\alpha^2 \cr & c,1-2\alpha^2} $$ etex) ;
|
||||
|
||||
% remarque si vous voulez donner l'angle de sortie pour qu'il n'y ait
|
||||
% pas de courbre, il suffit d'écrire :
|
||||
% angle(positionArrivée - positionDépart)
|
||||
|
||||
endfig ;
|
||||
|
||||
end.
|
291
pfa.mp
Normal file
291
pfa.mp
Normal file
|
@ -0,0 +1,291 @@
|
|||
% Le input shadows donne l'acces
|
||||
% à la macro drawShadow(p);
|
||||
input shadows
|
||||
|
||||
|
||||
hspace := 8u ;
|
||||
vspace := 5u ;
|
||||
|
||||
drawoptions(withpen pencircle scaled .05u) ;
|
||||
|
||||
% affiche un état à la position donnée
|
||||
def drawStateParam(expr nom, position, anglab) =
|
||||
begingroup ;
|
||||
path p;
|
||||
pair ps;
|
||||
path s;
|
||||
p :=fullcircle scaled 3u shifted position;
|
||||
drawShadow(p);
|
||||
% fill p withcolor white ;
|
||||
unfill p ;
|
||||
draw p ;
|
||||
s := position -- position shifted (dir anglab scaled 3u) ;
|
||||
ps := p intersectionpoint s;
|
||||
if (anglab >= -22.5) and (anglab <= 22.5) :
|
||||
label.rt(nom, ps) ;
|
||||
elseif (anglab > 22.5) and (anglab <= 67.5) :
|
||||
label.urt(nom, ps) ;
|
||||
elseif (anglab > 67.5) and (anglab <= 112.5) :
|
||||
label.top(nom, ps) ;
|
||||
elseif (anglab > 112.5) and (anglab <= 157.5) :
|
||||
label.ulft(nom, ps) ;
|
||||
elseif (anglab > 157.5) or (anglab <= -157.5) :
|
||||
label.lft(nom, ps) ;
|
||||
elseif (anglab > -157.5) and (anglab <= -112.5) :
|
||||
label.llft(nom, ps) ;
|
||||
elseif (anglab > -112.5) and (anglab <= -67.5) :
|
||||
label.bot(nom, ps) ;
|
||||
elseif (anglab > -67.5) and (anglab <= -22.5) :
|
||||
label.lrt(nom, ps) ;
|
||||
fi
|
||||
endgroup ;
|
||||
enddef ;
|
||||
|
||||
% affiche un état
|
||||
def drawState(expr nom, position) =
|
||||
begingroup ;
|
||||
drawStateParam(nom, position, -45) ;
|
||||
endgroup ;
|
||||
enddef ;
|
||||
% message est la valeur dans l'état
|
||||
def drawFState(expr nom, message, position) =
|
||||
begingroup ;
|
||||
path p;
|
||||
p :=fullcircle scaled 3u shifted position;
|
||||
|
||||
drawState(nom,position);
|
||||
% draw p blownup -.3u withpen pencircle scaled .02u;
|
||||
draw p blownup -.3u ;
|
||||
picture pic;
|
||||
pic := thelabel(message,origin);
|
||||
numeric taille;
|
||||
taille := abs (urcorner pic);
|
||||
if (taille <= 1.2u) :
|
||||
label(message, position);
|
||||
else :
|
||||
label(message scaled (1.2u / taille), position);
|
||||
fi ;
|
||||
endgroup ;
|
||||
enddef ;
|
||||
|
||||
% message est le message d'initialisation
|
||||
def drawIState(expr nom, message, position) =
|
||||
begingroup ;
|
||||
path p;
|
||||
p :=fullcircle scaled 3u shifted position;
|
||||
|
||||
drawState(nom,position)
|
||||
|
||||
% affiche de la flèche d'entrée
|
||||
path r;
|
||||
pair debut;
|
||||
debut := position shifted (-2.7u,0);
|
||||
r:=debut--center p;
|
||||
pair pr;
|
||||
pr := p intersectionpoint r;
|
||||
r := r cutafter pr ;
|
||||
|
||||
numeric taillepen ;
|
||||
taillepen := (( xpart urcorner currentpen )+(ypart urcorner currentpen)) ;
|
||||
|
||||
r := r cutafter (point -taillepen on r) ;
|
||||
% r := r cutafter (point -.05u on r) ;
|
||||
% drawarrow r withpen pencircle scaled .05u;
|
||||
drawarrow r ;
|
||||
label.lft(message, debut );
|
||||
|
||||
endgroup ;
|
||||
enddef ;
|
||||
|
||||
|
||||
% message est le message d'initialisation
|
||||
def drawIFState(expr nom, ini, term, position) =
|
||||
begingroup ;
|
||||
path p;
|
||||
p :=fullcircle scaled 3u shifted position;
|
||||
|
||||
drawIState(nom,ini,position);
|
||||
|
||||
% affichage du second cercle et de la valeur term
|
||||
% draw p blownup -.3u withpen pencircle scaled .02u;
|
||||
draw p blownup -.3u ;
|
||||
|
||||
%picture pic;
|
||||
%pic := thelabel(term,origin);
|
||||
%numeric taille;
|
||||
%taille := abs (urcorner pic);
|
||||
numeric taille;
|
||||
taille := diag(term) ;
|
||||
if (taille <= 1.2u) :
|
||||
label(term, position);
|
||||
else :
|
||||
label(term scaled (1.2u / taille), position);
|
||||
fi ;
|
||||
endgroup ;
|
||||
enddef ;
|
||||
|
||||
def largeur(expr texte) =
|
||||
begingroup ;
|
||||
picture pic;
|
||||
pic := thelabel(texte, origin);
|
||||
numeric taille;
|
||||
taille := abs ((ulcorner pic) - (urcorner pic));
|
||||
taille
|
||||
endgroup ;
|
||||
enddef ;
|
||||
|
||||
def hauteur(expr texte) =
|
||||
begingroup ;
|
||||
picture pic;
|
||||
pic := thelabel(texte, origin);
|
||||
numeric taille;
|
||||
taille := abs ((urcorner pic) - (lrcorner pic));
|
||||
taille
|
||||
endgroup ;
|
||||
enddef ;
|
||||
|
||||
def diag(expr texte) =
|
||||
begingroup ;
|
||||
picture pic;
|
||||
pic := thelabel(texte, origin);
|
||||
numeric taille;
|
||||
taille := abs(urcorner pic);
|
||||
taille
|
||||
endgroup ;
|
||||
enddef ;
|
||||
|
||||
def drawLoop(expr ori, angle, mesg) =
|
||||
begingroup ;
|
||||
path p; p:=fullcircle scaled 3u;
|
||||
path r; r=ori -- ori shifted (2u* (dir angle));
|
||||
path s; s=ori -- ori shifted (2u* (dir 90) );
|
||||
pair prb, pre, prc;
|
||||
prb := p shifted ori intersectionpoint r;
|
||||
pre := p shifted ori intersectionpoint s;
|
||||
prc := ori shifted ((2u+(u*(90-angle)/90)) * (dir ((angle + 90)/2)));
|
||||
r := prb .. prc .. pre;
|
||||
|
||||
numeric taillepen ;
|
||||
taillepen := (( xpart urcorner currentpen )+(ypart urcorner currentpen)) ;
|
||||
|
||||
r := r cutbefore (point taillepen on r);
|
||||
r := r cutafter (point -taillepen on r);
|
||||
% drawarrow r withpen pencircle scaled .04u;
|
||||
drawarrow r ;
|
||||
prc := point .333 length r of r;
|
||||
label.rt(mesg, prc);
|
||||
endgroup ;
|
||||
enddef;
|
||||
|
||||
def Cadre (expr longueur,hauteur,arrondi) =
|
||||
begingroup
|
||||
path res ;
|
||||
pair A,B ;
|
||||
A:=origin ;
|
||||
B:=A shifted (arrondi,arrondi) ;
|
||||
|
||||
res := origin -- origin +
|
||||
(longueur,0) {right} .. {up} B +
|
||||
(longueur,0) -- B+(longueur,hauteur) ;
|
||||
res := res {up}..
|
||||
{left} res rotated 180 shifted (longueur,hauteur+(2*arrondi)) {down} ..
|
||||
{right}cycle ;
|
||||
res
|
||||
endgroup
|
||||
enddef;
|
||||
|
||||
def drawCadre (expr llcorn, urcorn ) =
|
||||
begingroup
|
||||
path res ;
|
||||
numeric longueur, hauteur ;
|
||||
longueur := ( xpart urcorn ) - ( xpart llcorn ) + 7u ;
|
||||
hauteur := ( ypart urcorn ) - ( ypart llcorn ) + 7u ;
|
||||
res = Cadre(longueur, hauteur, 1u) ;
|
||||
res := res shifted llcorn ;
|
||||
res := res shifted (-4u, -4.5u) ;
|
||||
drawShadow(res) ;
|
||||
% fill res withcolor white ;
|
||||
unfill res withcolor white ;
|
||||
draw res ;
|
||||
endgroup
|
||||
enddef ;
|
||||
|
||||
def drawCadreLabel (expr llcorn, urcorn, message ) =
|
||||
begingroup
|
||||
numeric hauteur;
|
||||
hauteur := ypart (thelabel(message,origin) scaled 2) ;
|
||||
hauteur := hauteur + 2u ;
|
||||
milieu := .5[xpart llcorn, xpart urcorn] ;
|
||||
drawCadre(llcorn, urcorn shifted (0, hauteur) ) ;
|
||||
label (message scaled 2, (milieu, (ypart urcorn) + 4u) ) ;
|
||||
endgroup
|
||||
enddef ;
|
||||
|
||||
|
||||
def drawArcParam(expr ori, arr, angl, mesg, posl, invert) =
|
||||
begingroup ;
|
||||
if ori = arr:
|
||||
drawLoop(ori,angl,mesg);
|
||||
else:
|
||||
path p; p:=fullcircle scaled 3u;
|
||||
path r; r=ori{dir angl}..arr;
|
||||
pair prb, pre;
|
||||
|
||||
% calcul de la taille du pen
|
||||
taillepen := (( xpart urcorner currentpen )+(ypart urcorner currentpen)) ;
|
||||
|
||||
prb := p shifted ori intersectionpoint r;
|
||||
r := r cutbefore prb;
|
||||
r := r cutbefore (point taillepen on r);
|
||||
|
||||
pre := p shifted arr intersectionpoint r;
|
||||
r := r cutafter pre;
|
||||
r := r cutafter (point -taillepen on r);
|
||||
|
||||
picture etiquette ;
|
||||
etiquette:=thelabel(mesg, origin);
|
||||
pair hauteur, largeur;
|
||||
hauteur := (ulcorner etiquette) - (llcorner etiquette);
|
||||
hauteur := hauteur scaled .5;
|
||||
hauteur := hauteur + (0,.3u);
|
||||
|
||||
largeur := (urcorner etiquette) - (ulcorner etiquette);
|
||||
largeur := largeur scaled .5 ;
|
||||
largeur := largeur + (.15u,0);
|
||||
|
||||
drawarrow r ;
|
||||
|
||||
pair centre;
|
||||
numeric an;
|
||||
|
||||
centre := point posl*length r of r ;
|
||||
an := angle direction posl*length r of r ;
|
||||
|
||||
if invert:
|
||||
hauteur := -hauteur ;
|
||||
largeur := -largeur ;
|
||||
fi ;
|
||||
|
||||
if (an > -35) and (an < 35):
|
||||
centre := centre shifted (hauteur rotated an) ;
|
||||
label(mesg rotated an, centre) ;
|
||||
elseif (an > 145) or (an < -145) :
|
||||
centre := (point posl*length r of r) shifted (hauteur rotated (an+180)) ;
|
||||
label(mesg rotated (an+180), centre) ;
|
||||
elseif (an >= 0 ) :
|
||||
hauteur := hauteur - (0,.15u) ;
|
||||
centre := (point posl*length r of r) shifted largeur shifted -hauteur ;
|
||||
label(mesg, centre);
|
||||
else :
|
||||
hauteur := hauteur - (0,.15u) ;
|
||||
centre := (point posl*length r of r) shifted largeur shifted hauteur ;
|
||||
label(mesg,centre);
|
||||
fi;
|
||||
fi;
|
||||
endgroup ;
|
||||
enddef ;
|
||||
|
||||
|
||||
def drawArc(expr ori, arr, angl, mesg) =
|
||||
drawArcParam(ori, arr, angl, mesg, .5, false) ;
|
||||
enddef;
|
104
sequence.mp
Normal file
104
sequence.mp
Normal file
|
@ -0,0 +1,104 @@
|
|||
input pfa ;
|
||||
|
||||
% Pour LaTeX
|
||||
verbatimtex
|
||||
\documentclass{article}
|
||||
\usepackage{color}
|
||||
\usepackage[utf8]{inputenc}
|
||||
\usepackage{amssymb}
|
||||
\usepackage{dsfont}
|
||||
\usepackage[nice]{nicefrac}
|
||||
\begin{document}
|
||||
etex
|
||||
|
||||
beginfig(1)
|
||||
z0 = origin ;
|
||||
z1 = (hspace, vspace);
|
||||
z2 = (hspace, -vspace);
|
||||
% drawCadre((xpart(z0), ypart(z2)), z1);
|
||||
drawIState(btex $q_\varepsilon$ etex, btex $\phantom{1}$ etex, z0);
|
||||
drawFState(btex $q_a$ etex, "", z1);
|
||||
drawState(btex $q_b$ etex, z2);
|
||||
drawArc(z0,z1,angle(z1-z0),btex $a\phantom{,\nicefrac{1}{2}}$ etex);
|
||||
drawArc(z0,z2,angle(z2-z0),btex $b\phantom{,\nicefrac{1}{2}}$ etex);
|
||||
drawArc(z1,z1,0,btex $a\phantom{,\nicefrac{1}{2}}$ etex);
|
||||
drawArc(z2,z1,90,btex $a\phantom{,-\nicefrac{1}{3}}$ etex);
|
||||
drawArc(z2,z2,0,btex $a\phantom{,\nicefrac{4}{3}}$ etex);
|
||||
endfig;
|
||||
beginfig(2)
|
||||
z0 = origin ;
|
||||
z1 = (hspace, vspace);
|
||||
z2 = (hspace, -vspace);
|
||||
% drawCadre((xpart(z0), ypart(z2)), z1);
|
||||
drawIState(btex $q_\varepsilon$ etex, btex ${\color{red} 1 }$ etex, z0);
|
||||
drawFState(btex $q_a$ etex, btex ${\color{red} \nicefrac{1}{2}}$ etex, z1);
|
||||
drawState(btex $q_b$ etex, z2);
|
||||
drawArc(z0,z1,angle(z1-z0),btex $a{\color{red} ,\nicefrac{1}{2} }$ etex);
|
||||
drawArc(z0,z2,angle(z2-z0),btex $b{\color{red} ,\nicefrac{1}{2} }$ etex);
|
||||
drawArc(z1,z1,0,btex $a{\color{red} ,\nicefrac{1}{2} }$ etex);
|
||||
drawArc(z2,z1,90,btex $a{\color{red} ,-\nicefrac{1}{3} }$ etex);
|
||||
drawArc(z2,z2,0,btex $a{\color{red} ,\nicefrac{4}{3} }$ etex);
|
||||
endfig;
|
||||
|
||||
beginfig(3)
|
||||
z0 = origin ;
|
||||
z1 = (hspace, vspace);
|
||||
z2 = (hspace, -vspace);
|
||||
% drawCadre((xpart(z0), ypart(z2)), z1);
|
||||
drawIState(btex $q_\varepsilon$ etex, btex ${\color{red} 1 }$ etex, z0);
|
||||
drawFState(btex $q_a$ etex, btex ${\color{red} \nicefrac{1}{2}}$ etex, z1);
|
||||
drawState(btex $q_b$ etex, z2);
|
||||
drawArc(z0,z2,angle(z2-z0),btex $b,\nicefrac{1}{2}$ etex);
|
||||
drawArc(z1,z1,0,btex $a,\nicefrac{1}{2}$ etex);
|
||||
drawArc(z2,z1,90,btex $a,-\nicefrac{1}{3}$ etex);
|
||||
drawArc(z2,z2,0,btex $a,\nicefrac{4}{3}$ etex);
|
||||
drawoptions(withcolor red);
|
||||
drawArc(z0,z1,angle(z1-z0),btex $a{\color{red} ,\nicefrac{1}{2} }$ etex);
|
||||
endfig;
|
||||
|
||||
beginfig(4)
|
||||
z0 = origin ;
|
||||
z1 = (hspace, vspace);
|
||||
z2 = (hspace, -vspace);
|
||||
% drawCadre((xpart(z0), ypart(z2)), z1);
|
||||
drawIState(btex $q_\varepsilon$ etex, btex ${\color{red} 1 }$ etex, z0);
|
||||
drawFState(btex $q_a$ etex, btex ${\color{red} \nicefrac{1}{2}}$ etex, z1);
|
||||
drawState(btex $q_b$ etex, z2);
|
||||
drawArc(z0,z1,angle(z1-z0),btex $a,\nicefrac{1}{2}$ etex);
|
||||
drawArc(z1,z1,0,btex $a,\nicefrac{1}{2}$ etex);
|
||||
drawoptions(withcolor red);
|
||||
drawArc(z0,z2,angle(z2-z0),btex $b{\color{red} ,\nicefrac{1}{2} }$ etex);
|
||||
drawArc(z2,z1,90,btex $a{\color{red} ,-\nicefrac{1}{3} }$ etex);
|
||||
drawArc(z2,z2,0,btex $a{\color{red} ,\nicefrac{4}{3} }$ etex);
|
||||
endfig;
|
||||
|
||||
beginfig(5)
|
||||
z0 = origin ;
|
||||
z1 = (hspace, vspace);
|
||||
z2 = (hspace, -vspace);
|
||||
% drawCadre((xpart(z0), ypart(z2)), z1);
|
||||
drawIState(btex $q_\varepsilon$ etex, btex ${\color{red} 1 }$ etex, z0);
|
||||
drawFState(btex $q_a$ etex, btex ${\color{red} \nicefrac{1}{2}}$ etex, z1);
|
||||
drawState(btex $q_b$ etex, z2);
|
||||
drawArc(z0,z1,angle(z1-z0),btex $a,\nicefrac{1}{2}$ etex);
|
||||
drawArc(z2,z2,0,btex $a,\nicefrac{4}{3}$ etex);
|
||||
drawoptions(withcolor red);
|
||||
drawArc(z1,z1,0,btex $a,\nicefrac{1}{2}$ etex);
|
||||
drawArc(z0,z2,angle(z2-z0),btex $b{\color{red} ,\nicefrac{1}{2} }$ etex);
|
||||
drawArc(z2,z1,90,btex $a{\color{red} ,-\nicefrac{1}{3} }$ etex);
|
||||
endfig;
|
||||
beginfig(6)
|
||||
z0 = origin ;
|
||||
z1 = (hspace, vspace);
|
||||
z2 = (hspace, -vspace);
|
||||
% drawCadre((xpart(z0), ypart(z2)), z1);
|
||||
drawIState(btex $q_\varepsilon$ etex, btex $1$ etex, z0);
|
||||
drawFState(btex $q_a$ etex, btex $\nicefrac{1}{2}$ etex, z1);
|
||||
drawState(btex $q_b$ etex, z2);
|
||||
drawArc(z0,z1,angle(z1-z0),btex $a,\nicefrac{1}{2}$ etex);
|
||||
drawArc(z2,z2,0,btex $a,\nicefrac{4}{3}$ etex);
|
||||
drawArc(z1,z1,0,btex $a,\nicefrac{1}{2}$ etex);
|
||||
drawArc(z0,z2,angle(z2-z0),btex $b,\nicefrac{1}{2}$ etex);
|
||||
drawArc(z2,z1,90,btex $a,-\nicefrac{1}{3}$ etex);
|
||||
endfig;
|
||||
end.
|
105
shadows.mp
Normal file
105
shadows.mp
Normal file
|
@ -0,0 +1,105 @@
|
|||
% permet d'afficher des ombres jolies
|
||||
% comme dans Omnigraffle
|
||||
%
|
||||
% Voilà un exemple d'utilisation
|
||||
% --------
|
||||
% input shadows
|
||||
%
|
||||
% beginfig(1);
|
||||
% path p; p :=fullcircle scaled 3u;
|
||||
%
|
||||
% drawShadow(p);
|
||||
% fill p withcolor white;
|
||||
% draw p withpen pencircle scaled .02u;
|
||||
% draw p blownup -.3u withpen pencircle scaled .02u;
|
||||
% label(btex $$\frac{1}{2}$$ etex, origin);
|
||||
% endfig;
|
||||
% -------
|
||||
%
|
||||
% Qualité maximale tolérée 84.
|
||||
%
|
||||
%
|
||||
|
||||
input default ;
|
||||
|
||||
% p est un path pour lequel on va tracer la figure
|
||||
% decalage est un vecteur de décalge pour l'ombre
|
||||
% smooth est l'effacement de l'ombre (0 renvoie une ombre portée parfaite)
|
||||
% la valeur par défaut est .06u
|
||||
% quality est la qualité du rendu (plus il est élevé meilleur est le rendu)
|
||||
% ATTENTION : une valeur trop grande risque de donner des
|
||||
% PDF très long à lire...
|
||||
% la valeur par défaut est 100
|
||||
% grey est le degrès de transparence global
|
||||
% la valeur par défaut est .3
|
||||
% couleur est la couleur de l'ombre, par défaut c'est black
|
||||
def drawShadowWithParameters(expr p, decalage, smooth, quality, grey, couleur) =
|
||||
begingroup ;
|
||||
qual := round(sqrt (quality/2));
|
||||
factor := grey/((qual+1)*(qual+1));
|
||||
if path p :
|
||||
if cycle p :
|
||||
path shadow ;
|
||||
pair dcl;
|
||||
|
||||
shadow := p shifted decalage ;
|
||||
% fill shadow withcolor transparent(1,factor,black) ;
|
||||
dcl:=(0,0);
|
||||
for j=-qual upto qual :
|
||||
for k=-qual upto qual :
|
||||
dcl := (j/qual, k/qual) scaled smooth;
|
||||
fill shadow shifted dcl withcolor transparent(1,factor,couleur) ;
|
||||
endfor ;
|
||||
endfor ;
|
||||
else :
|
||||
path shadow ;
|
||||
pair dcl;
|
||||
|
||||
shadow := p shifted decalage ;
|
||||
dcl:=(0,0);
|
||||
for j=-qual upto qual :
|
||||
for k=-qual upto qual :
|
||||
dcl := (j/qual, k/qual) scaled smooth;
|
||||
draw shadow shifted dcl withcolor transparent(1,factor,couleur) ;
|
||||
endfor ;
|
||||
endfor ;
|
||||
fi ;
|
||||
else :
|
||||
picture shadow ;
|
||||
pair dcl ;
|
||||
shadow := p shifted decalage ;
|
||||
dcl := origin ;
|
||||
for j = -qual upto qual :
|
||||
for k = -qual upto qual :
|
||||
dcl := (j/qual, k/qual) scaled smooth ;
|
||||
draw shadow shifted dcl withcolor transparent (1, factor, couleur) ;
|
||||
endfor ;
|
||||
endfor ;
|
||||
fi ;
|
||||
|
||||
endgroup ;
|
||||
enddef ;
|
||||
|
||||
pair shadowsDefaultDecalage ;
|
||||
shadowsDefaultDecalage := (.05u, -.18u) ;
|
||||
|
||||
numeric shadowsDefaultSmooth ;
|
||||
shadowsDefaultSmooth := .18u ;
|
||||
|
||||
numeric shadowsDefaultQuality ;
|
||||
shadowsDefaultQuality := 17 ;
|
||||
|
||||
numeric shadowsDefaultGrey ;
|
||||
shadowsDefaultGrey := .3 ;
|
||||
|
||||
color shadowsDefaultColor ;
|
||||
shadowsDefaultColor := black ;
|
||||
|
||||
|
||||
% affiche l'ombre d'un chemin avec les paramètres par défaults
|
||||
def drawShadow(expr p) =
|
||||
drawShadowWithParameters(p, shadowsDefaultDecalage, shadowsDefaultSmooth,
|
||||
shadowsDefaultQuality, shadowsDefaultGrey,
|
||||
shadowsDefaultColor) ;
|
||||
enddef ;
|
||||
|
Loading…
Reference in a new issue