asymptote-config/inequations_cg.asy
2018-08-15 17:23:01 +02:00

164 lines
5.3 KiB
Plaintext

// v4 29/10/2011, Christophe Grospellier.
// INSTALLATION:
// copier ce fichier dans le sous-répertoire $HOME/.asy
// Move this file in the sub-directory $HOME/.asy
//CODE:
import graph;
import patterns;
int lsol=0, rsol=1;
real hHatch=.2*cm; // Demi-hauteur des hachures
real hBrack=.3*cm, wBrack=2*hBrack/3; // Demi-hauteur et largeur du crochet
real extrem, bornebis;
////////////////////////////////////////////////////////////////////////
// a="écriture LaTeX de la solution" , borne=borne de l'inéquation //
// position=position du label (N par défaut) //
// dirsol=lsol (0) ou rsol : solutions à gauche ou à droite //
// brack="]" ou "[" //
// solcolor=couleur des solutions //
// xMin et xMax=abscisses mini et maxi de l'axe //
// ticks=Ticks("%",Step=...,step=...) ou Noticks() //
// solutions=true ou false : écrire "solutions" //
// hach=true ou false : dessiner les hachures //
////////////////////////////////////////////////////////////////////////
// Place un crochet "où on veut"
void bracket(picture pic=currentpicture, Label L="", real a, pair pos=N, string sensc, pen p=currentpen){
real sens;
label(pic,Label(L,p),(a,0),3.5*pos);
if (sensc=="]"){sens=-1;}
else {sens=1;}
pair hB=(0,hBrack), wB=(wBrack,0);
pic.add(new void(frame f, transform t) {
pair z=t*(a,0);
draw(f,z-hB--z+hB,p);
draw(f,z-hB--z-hB+sens*wB,p);
draw(f,z+hB--z+hB+sens*wB,p);});
}
// Trace un intervalle
void interval(picture pic=currentpicture, Label L1="", real a1, pair pos1=N, string sensc1,
Label L2="", real a2, pair pos2=N, string sensc2,
real xMin=min(a1,a2)-2.5, real xMax=max(a1,a2)+2.5,
ticks ticks=Ticks(), pen p=currentpen){
xlimits(pic,min=xMin,max=xMax);
xaxis(pic,Label("$x$",align=N),ticks,Arrow);
bracket(pic,L1,a1,pos1,sensc1,p);
bracket(pic,L2,a2,pos2,sensc2,p);
draw(pic,(a1,0)--(a2,0),p);
}
// Trace des hachures "où on veut"
void hatching(picture pic=currentpicture,
real mini, real maxi, real hHatching=2mm,
string myHatch){
pair hH=(0,hHatch);
pic.add(new void(frame f, transform t) {
pair m=t*(mini,0), M=t*(maxi,0);
fill(f,m-hH--m+hH--M+hH--M-hH--cycle,pattern(myHatch));});
}
// Solutions d'inéquation
void solonaxis(picture pic=currentpicture,
string a="",
real borne,
pair position=N,
int dirsol,
string brack,
pen solcolor=currentpen,
real xMin=borne-3, real xMax=borne+3,
ticks ticks=Ticks(),
bool solutions=true,
bool hach=true)
{
// Tracé de l'axe // Possibilité de changer le repérage dans Ticks()
xlimits(pic,min=xMin,max=xMax);
xaxis(pic,Label("$x$",align=N),ticks,Arrow);
// Crochet
bracket(pic, a, borne, position, brack, 1.5bp+solcolor);
// Solutions en couleur
if (dirsol==0){extrem=xMin;
bornebis=xMax;}
else {extrem=xMax;
bornebis=xMin;}
draw(pic,(borne,0)--(extrem,0),1.5bp+solcolor);
// Écrire "solutions"
if (solutions){
label(pic,Label("\scriptsize solutions",solcolor),((borne+extrem)/2,0),2*N);}
// Définition de la hachure
add("hach_cg",hatch(H=3mm,dir=NE,solcolor));
if (hach){
hatching(pic,borne,bornebis,"hach_cg");}
}
//
// solonaxis(pic,a,borne,position,dirsol,brack,solcolor=currentpen,
// xMin=borne-3,xMax=borne+3,ticks=Ticks(),
// solutions=true,hach=true)
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
// Solutions d'inéquations
void sol2onaxis(picture pic=currentpicture,
string a1="",
real borne1,
pair pos1=N,
int dirsol1,
string bracket1,
pen solcolor1=currentpen,
string a2="",
real borne2,
pair pos2=N,
int dirsol2,
string bracket2,
pen solcolor2=currentpen,
real xMin=min(borne1,borne2)-2.5, real xMax=max(borne1,borne2)+2.5,
ticks ticks=Ticks(),
bool hach=true)
{
solonaxis(pic,a1,borne1,pos1,dirsol1,bracket1,solcolor1,xMin,xMax,ticks,solutions=false,hach);
// Crochet
bracket(pic,a2, borne2, pos2, bracket2, 1.5bp+solcolor2);
// Solutions en couleur
if (dirsol2==0){draw(pic,(borne2,0)--(xMin,0),1.5bp+solcolor2);}
else {draw(pic,(borne2,0)--(xMax,0),1.5bp+solcolor2);}
// Intervalle solution (solcolor=solcolor1+solcolor2)
if (dirsol1==0 && dirsol2==0){
draw(pic,(min(borne1,borne2),0)--(xMin,0),(1.5bp+solcolor1+solcolor2));
}
if (dirsol1!=0 && dirsol2!=0){
draw(pic,(max(borne1,borne2),0)--(xMax,0),(1.5bp+solcolor1+solcolor2));
}
if (borne1<borne2){
if (dirsol1!=0 && dirsol2==0){
draw(pic,(borne1,0)--(borne2,0),(1.5bp+solcolor1+solcolor2));
}
}
if (borne1>borne2){
if (dirsol1==0 && dirsol2!=0){
draw(pic,(borne2,0)--(borne1,0),(1.5bp+solcolor1+solcolor2));
}
}
// Définition de la hachure
add("hachback_cg",hatch(H=3mm,dir=NW,solcolor2));
real bornebis2;
if (hach){
if (dirsol2==0){bornebis2=xMax;}
else {bornebis2=xMin;}
hatching(pic,borne2,bornebis2,"hachback_cg");}
}
//
// sol2onaxis(pic,a1,borne1,pos1,dirsol1,bracket1,solcolor1=currentpen,
// a2,borne2,pos2,dirsol2,bracket2,solcolor2=currentpen,
// xMin=min(borne1,borne2)-2.5,xMax=max(borne1,borne2)+2.5,
// ticks=Ticks(),hach=true)