Retour

droite.tex

Télécharger le fichier
%########################################################################################
%########################### MACROS POUR LES DROITES GRADUÉES ###########################
%###########################         v 0.2 du 7/1/2008        ###########################
%########################################################################################
%
% Auteur : Christian TELLECHEA
% Site   : www.bricamath.net
%
\newcommand*{\Position}[1]{\ifdim #1cm=0cm c \fi \ifdim #1cm>0cm b \fi \ifdim #1cm<0cm t \fi}
% _________________________________________________
%|                                                 |
%|      Marque un point sur la droite graduée      |
%|_________________________________________________|
% #1 optionnel : épaisseur du point, par défaut 3.5pt
\newcommand*{\MarquePoint}[2][3.5]{\psdots[dotsize=#1pt 0](! #2 0)}
% __________________________________________________________
%|                                                          |
%|      Marque un trait vertical sur la droite graduée      |
%|__________________________________________________________|
% #1 optionnel : hauteur du trait de part et d'autre de la droite. Par défaut 0.25cm
\newcommand*{\MarqueTrait}[2][0.25]{\psline[linewidth=1pt](! #2 -#1)(! #2 #1)}
% _________________________________________________________________
%|                                                                 |
%|      Affiche un texte à une abscisse et une hauteur donnée      |
%|_________________________________________________________________|
%#1 : abscisse
%#2 : decalage vertical (espace en cm entre le haut ou la bas de la lettre et la droite graduée)
%#3 : texte
\newcommand*{\AfficheTexte}[3]{\rput[\Position{#2}](! #1 #2){#3}}
% ________________________________________________________
%|                                                        |
%|             Affiche une flèche verticale               |
%|      au dessus ou au dessous de la droite graduée      |
%|                  avec ou sans texte                    |
%|________________________________________________________|
\makeatletter
\newcommand{\AfficheFleche}[3][0.15]{\@ifnextchar[{\AfficheFleche@i[#1]{#2}{#3}}{\AfficheFleche@i[#1]{#2}{#3}[]}}
\def\AfficheFleche@i[#1]#2#3[#4]{%
% #1  :   décalage vertical entre bout de la flèche et la droite. Par défaut=0.15
% #2  :   abscisse de la flèche
% #3  :   hauteur de la flèche en cm (positif:flèche au dessus, négatif:flèche au dessous)
% #4  :   Optionnel : texte à afficher
\pstVerb{/Signe #3 dup 0 eq {pop 0}{dup 0 lt {pop 1 neg}{pop 1} ifelse} ifelse def}% renvoie -1 0 ou 1 selon le signe de #3
\psline[arrowsize=2pt 3]{->}(! #2 #3 abs #1 abs add Signe mul)(!#2 #1 abs Signe mul)%
\rput[\Position{#3}](! #2 #3 abs #1 abs add 0.1 add Signe mul){#4}%
}
% ___________________________________________
%|                                           |
%|        ENVIRONNEMENT DroiteGraduée        |
%|          Trace une droite gradué          |
%|___________________________________________|
\newenvironment{DroiteGraduee}[8][all]{%
% Les arguments de l'environnement
% #1 : Optionnel = affichage des nombres. Par défaut all (none est le contraire)
% #2 : largeur totale de la droite en cm
% #3 : abscisse de la 1ère graduation
% #4 : abscisse de la dernière graduation
% #5 : Nombre d'intervalles sudivisant la graduation principale
% #6 : Incrément entre 2 graduations principales
% #7 : Nombre de graduations principales à afficher avant la première
% #8 : Nombre de graduations principales à afficher après la dernière
	\newdimen\x@gauche \newdimen\x@droite \newdimen\x@@unite
	\newdimen\c@rrection \newdimen\n@m \newdimen\d@n
	\x@@unite=1cm%       pour les conversions
	\c@rrection=0.6cm%   largeur de la flèche
	\x@gauche=-#7cm \advance\x@gauche #3cm \x@droite=#4cm \advance\x@droite #8cm
	\pst@divide\x@gauche\x@@unite\x@@gauche%      conversion pt-->cm
	\n@m=-\c@rrection \advance\n@m #2cm%          n@m=largeur-epaisseur_fleche
	\d@n=-\x@gauche \advance\d@n\x@droite%        d@n=xdroite-xgauche
	\pst@divide\n@m\d@n\x@unite%                  x@unit=(largeur-largeur_fleche)/(xdroite-xgauche)
	\pst@divide\c@rrection{\x@unite cm}{\Fl@che}
	\newdimen\EpFl@che \EpFl@che=\Fl@che cm
	\advance\x@droite\EpFl@che \pst@divide\x@droite\x@@unite\x@@droite% on corrige de la largeur de la flèche, et on convertit
	\psset{xunit=\x@unite cm,yunit=1cm,arrowsize=4pt 3}%
	\begin{pspicture}(\x@@gauche,-1)(\x@@droite,1)%
		\psaxes[comma,labelsep=5pt,labels=#1,Ox=#3,Dx=#6,yAxis=false,subticks=#5,ticksize=-0.15cm 0.15cm,tickwidth=1.5pt,subticksize=0.7,subtickwidth=0.8pt,subtickcolor=black]{->}(#3,0)(\x@@gauche,-1)(\x@@droite,1)
	}
	{\end{pspicture}}
% ___________________________________________________
%|                                                   |
%|      Représentation graphique de l'ensemble       |
%|    des solutions d'une inéquation du 1è degrés    |
%|___________________________________________________|
%
\makeatletter
\newcommand*{\GraphiqueInequation}[3][n]{\@ifnextchar[{\GraphiqueInequation@i[#1]{#2}{#3}}{\GraphiqueInequation@i[#1]{#2}{#3}[5]}}
\def\GraphiqueInequation@i[#1]#2#3[#4]{%
% #1   :   optionnel = 0 par défaut (pas de hachure pour ce qui ne convient pas) sinon #1=H ou h
% #2   :   signe de l'inégalité  < ou <= ou =< ou > ou >= ou =>
% #3   :   nombre à afficher au dessus de la borne
% #4   :   optionnel = largeur de la représentation en cm. Par défaut 5.
	\newdimen\xMaxi \xMaxi=#4cm \divide\xMaxi2
	\psset{unit=1 cm,arrowsize=4pt 3}
	\begin{pspicture*}(-\xMaxi,-0.3)(\xMaxi,1.2)%
		\pstVerb{% début code PostScript
			/DecalCrochet 0.07 def /DecalOrigine 0.07 def /EpFleche 0.2 def /Angle 0 def
			/Inferieur (#2)(<)eq (#2)(<=)eq or (#2)(=<)eq or def
			/Superieur (#2)(>)eq (#2)(>=)eq or (#2)(=>)eq or def
			/Large (#2)(<=)eq (#2)(=<)eq or (#2)(>=)eq or (#2)(=>)eq or def
			/Stricte (#2)(<)eq (#2)(>)eq or def
			Superieur {/Signe 1 def} if
			Inferieur	{/Signe 1 neg def} if
			(#1)(H)eq (#1)(h)eq or {/yHachures 0.15 def}{/yHachures 0 def} ifelse
			Large {
				/TaillePoint 0.075 def /TailleTrait 0 def /xOrigine 0 def
				/xCrochet DecalCrochet Signe neg mul def /xHachures xCrochet def
				Inferieur {/Angle 180 def} if
				} if
			Stricte {
				/TaillePoint 0 def /TailleTrait 0.15 def /xOrigine DecalOrigine def
				/xCrochet DecalCrochet Signe mul def /xHachures 0 def
				Superieur {/Angle 180 def} if
				} if
			/xExtremeHachures #4 2 div Signe neg mul def
			/xExtreme #4 2 div Signe mul def
			Superieur {/xExtreme xExtreme EpFleche sub def} if
			Inferieur {/xExtremeHachures xExtremeHachures 2 EpFleche mul sub def} if
			/xOrigine xOrigine Signe mul def
		}%% fin code PostScript
	\psline[linewidth=1pt]{->}(! #4 2 div neg 0)(! #4 2 div 0)%      tracé de la droite
	\psline[linewidth=2.5pt](! xExtreme 0)(! xOrigine 0)%            on repasse en gras
	\psellipse*(! 0 0)(! TaillePoint TaillePoint)%                   marque éventuellement le point
	\psline[linewidth=1pt](! 0 TailleTrait neg)(! 0 TailleTrait)%    trace éventuellement un trait
	\rput[c]{! Angle}(! xCrochet 0){\LARGE\textbf{[}}%               on place le crochet
	\rput[b](! 0 0.4){#3}%                                           affichage de la borne
	\psframe[linestyle=none,fillstyle=hlines,hatchwidth=0.5pt,hatchsep=3pt](! xHachures yHachures neg)(! xExtremeHachures yHachures)% hachures
	\end{pspicture*}
}
\makeatother