diff options
Diffstat (limited to 'Master/texmf-dist/tex/generic/pst-eucl/pst-eucl.tex')
-rw-r--r-- | Master/texmf-dist/tex/generic/pst-eucl/pst-eucl.tex | 1460 |
1 files changed, 1460 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/pst-eucl/pst-eucl.tex b/Master/texmf-dist/tex/generic/pst-eucl/pst-eucl.tex new file mode 100644 index 00000000000..b615f5203a7 --- /dev/null +++ b/Master/texmf-dist/tex/generic/pst-eucl/pst-eucl.tex @@ -0,0 +1,1460 @@ + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -*- Mode: Latex -*- %%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% pst-eucl.tex --- Generation of geometric figures in euclidean geometry +%% Copyright 2000-2005 Dominique RODRIGUEZ +%% +%% Author : Dominique RODRIGUEZ (EN) <dominique.rodriguez@waika9.com> +%% Created the : Mon Oct 16 21:15:11 CEST 2000 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% HISTORY +%% +%% 2000-10-16 : creation of the file from a first LaTeX protype sty file +%% +%% 2001-05-7 : distribution of the first beta version +%% +%% 2002-03-21 : distribution of the second beta version +%% +%% 2002-12-01 : distribution of the pre-release 1.0 +%% +%% 2003-03-23 : direct computation of coordinates for the center of gravity and +%% the center of the circum circle, avoiding creation of intermediates +%% nodes. +%% +%% 2003-12-16 : Integration of modifications given by Alain DELPLANQUE +%% automatic computation of PosAngle for several commands, +%% and ability to give a list of point for pstGeonode, pstOIJGeonode +%% +%% 2004-09-05 : Improvement of the management of the Point name end of the param lists +%% +%% 2004-11-04 : Improvement of the management of the display of the Point name +%% +%% 2004-12-10 : New parameters for coding the circum circle : SegmentSymbolA B & C +%% +%% 2004-12-14 : New parametre RightAngleType for regional difference +%% +%% 2005-01-17 : transition towards pst-xkey (thanks to "Hendri Adriaens" <Hendri@uvt.nl>) +%% +%% 2005-02-21 : correction for spurious blank (thanks to Herbert Voss <Herbert.Voss@alumni.TU-Berlin.DE>) +%% in pstTriangleABC (search for "-- hv") +%% +%% 2005-03-25 : Modification of the transformations macros: management of a points list +%% coding for rotation & translation +%% draw a curve for a points list (geonode & oijgeonode & transform macros) +%% +%% 2005-04-10 : Modification of the transformations macros: management of a points list +%% management directly within the first point argument +%% Plotting of a curve linking a list of points +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\def\fileversion{1.3.2} +\def\filedate{2005/05/14}% +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN +%% archives in directory macros/latex/base/lppl.txt. +\message{`PST-Euclide v\fileversion, \filedate\space (Dominique RODRIGUEZ)}% +\message{ This version uses the pst-xkey package for managing parameters}% +\message{ Please read the doc, some macros have a new syntax}% +\message{ use option old for upward compatibility}% +\csname PSTEuclideLoaded\endcsname +\let\PSTEuclideLoaded\endinput +% Require PSTricks and pst-node packages +\ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi +\ifx\PSTnodesLoaded\endinput\else\input pst-node.tex\fi +\ifx\MultidoLoaded\endinput\else\input multido.tex\fi +%% prologue for postcript +\pstheader{pst-eucl.pro}% +% interface to the `xkeyval' package +\input pst-xkey.tex +\pst@addfams{pst-eucl} +\edef\PstAtCode{\the\catcode`\@}% +\catcode`\@=11\relax +% Definition of the parameters +% ---------------------------- +% symbol used for the point +\define@key[psset]{pst-eucl}{PointSymbol}{\edef\psk@PointSymbol{#1}}% +\define@key[psset]{pst-eucl}{PointSymbolA}{\edef\psk@PointSymbolA{#1}}% +\define@key[psset]{pst-eucl}{PointSymbolB}{\edef\psk@PointSymbolB{#1}}% +\define@key[psset]{pst-eucl}{PointSymbolC}{\edef\psk@PointSymbolC{#1}}% +% name used for the point +\define@key[psset]{pst-eucl}{PointName}{\edef\psk@PointName{#1}}% +\define@key[psset]{pst-eucl}{PointNameA}{\edef\psk@PointNameA{#1}}% +\define@key[psset]{pst-eucl}{PointNameB}{\edef\psk@PointNameB{#1}}% +\define@key[psset]{pst-eucl}{PointNameC}{\edef\psk@PointNameC{#1}}% +% use math mode in point name +\newif\ifPst@PtNameMath% +\define@key[psset]{pst-eucl}{PtNameMath}[false]{\@nameuse{Pst@PtNameMath#1}}% +% symbol used for marking equal length segment +\define@key[psset]{pst-eucl}{SegmentSymbol}{\edef\psk@SegmentSymbol{#1}}% +\define@key[psset]{pst-eucl}{SegmentSymbolA}{\edef\psk@SegmentSymbolA{#1}}% +\define@key[psset]{pst-eucl}{SegmentSymbolB}{\edef\psk@SegmentSymbolB{#1}}% +\define@key[psset]{pst-eucl}{SegmentSymbolC}{\edef\psk@SegmentSymbolC{#1}}% +\define@key[psset]{pst-eucl}{Mark}{\edef\psk@Mark{#1}}% +\define@key[psset]{pst-eucl}{MarkAngle}{\edef\psk@MarkAngle{#1}}% +% disance from point to its label +\define@key[psset]{pst-eucl}{PointNameSep}{\edef\psk@PointNameSep{#1}}% +% position angle for positionning a point name +\define@key[psset]{pst-eucl}{PosAngle}{\edef\psk@PosAngle{#1}}% +\define@key[psset]{pst-eucl}{PosAngleA}{\edef\psk@PosAngleA{#1}}% +\define@key[psset]{pst-eucl}{PosAngleB}{\edef\psk@PosAngleB{#1}}% +\define@key[psset]{pst-eucl}{PosAngleC}{\edef\psk@PosAngleC{#1}}% +% dimension of the right angle mark +\define@key[psset]{pst-eucl}{RightAngleSize}{\edef\psk@RightAngleSize{#1}}% +\define@key[psset]{pst-eucl}{RightAngleType}{\edef\psk@RightAngleType{#1}}% +% radius of an angle mark +\define@key[psset]{pst-eucl}{MarkAngleRadius}{\edef\psk@MarkAngleRadius{#1}}% +% angular offset position of the label for marking an angle +\define@key[psset]{pst-eucl}{LabelAngleOffset}{\edef\psk@LabelAngleOffset{#1}}% +% position radius of the label for marking an angle +\define@key[psset]{pst-eucl}{LabelSep}{\edef\psk@LabelSep{#1}}% +% ref point of the label +\define@key[psset]{pst-eucl}{LabelRefPt}{\edef\psk@LabelRefPt{#1}}% +% curve type for point list +\define@key[psset]{pst-eucl}{CurveType}{\edef\psk@CurveType{#1}}% +% coefficient of homothetie +\define@key[psset]{pst-eucl}{HomCoef}{\edef\psk@HomCoef{#1}}% +% angle of rotation +\define@key[psset]{pst-eucl}{RotAngle}{\edef\psk@RotAngle{#1}}% +% label for coding the transfortion +\define@key[psset]{pst-eucl}{TransformLabel}{\edef\psk@TransformLabel{#1}}% +\define@key[psset]{pst-eucl}{CurveType}{\edef\psk@CurveType{#1}}% +% private parameter +\newif\ifPst@CentralSym +\define@key[psset]{pst-eucl}{Central@Sym}[false]{\@nameuse{Pst@CentralSym#1}}% +% for drawing the circum-circle +\newif\ifPst@DrawCirABC +\define@key[psset]{pst-eucl}{DrawCirABC}[true]{\@nameuse{Pst@DrawCirABC#1}}% +% for coding a construction +\newif\ifPst@CodeFig +\define@key[psset]{pst-eucl}{CodeFig}[false]{\@nameuse{Pst@CodeFig#1}}% +\define@key[psset]{pst-eucl}{CodeFigA}{\edef\psk@CodeFigA{#1}}% +\define@key[psset]{pst-eucl}{CodeFigB}{\edef\psk@CodeFigB{#1}}% +\define@key[psset]{pst-eucl}{CodeFigColor}{\edef\psk@CodeFigColor{#1}}% +\define@key[psset]{pst-eucl}{CodeFigStyle}{\edef\psk@CodeFigStyle{#1}}% +\newif\ifPst@CodeFigAarc% +\define@key[psset]{pst-eucl}{CodeFigAarc}[true]{\@nameuse{Pst@CodeFigAarc#1}} +\newif\ifPst@CodeFigBarc% +\define@key[psset]{pst-eucl}{CodeFigBarc}[true]{\@nameuse{Pst@CodeFigBarc#1}} +%% for specifying a distance for the circle +\define@key[psset]{pst-eucl}{Radius}{\edef\psk@Radius{#1}}% +\define@key[psset]{pst-eucl}{RadiusA}{\edef\psk@RadiusA{#1}}% +\define@key[psset]{pst-eucl}{RadiusB}{\edef\psk@RadiusB{#1}}% +\define@key[psset]{pst-eucl}{Diameter}{\edef\psk@Diameter{#1}}% +\define@key[psset]{pst-eucl}{DiameterA}{\edef\psk@DiameterA{#1}}% +\define@key[psset]{pst-eucl}{DiameterB}{\edef\psk@DiameterB{#1}}% +% for specifying a distance for the circle +\define@key[psset]{pst-eucl}{DistCoef}{\edef\psk@DistCoef{#1}}% +\define@key[psset]{pst-eucl}{AngleCoef}{\edef\psk@AngleCoef{#1}}% +% for curvilign abscissa placement +\newif\ifPst@CurvAbsNeg% +\define@key[psset]{pst-eucl}{CurvAbsNeg}[false]{\@nameuse{Pst@CurvAbsNeg#1}}% +% first and last point of a generic curve +\define@key[psset]{pst-eucl}{GenCurvFirst}{\edef\psk@GenCurvFirst{#1}}% +\define@key[psset]{pst-eucl}{GenCurvLast}{\edef\psk@GenCurvLast{#1}}% +% increment of a generic curve +\define@key[psset]{pst-eucl}{GenCurvInc}{\edef\psk@GenCurvInc{#1}}% +%% Default values +% -------------- +\psset{% + PointSymbol=default, PointSymbolA=undef, PointSymbolB=undef, PointSymbolC=undef, + PointName=default, PointNameA=undef, PointNameB=undef, PointNameC=undef, + PtNameMath=true, PointNameSep=default, PosAngle=undef, PosAngleA=undef, + PosAngleB=undef, PosAngleC=undef, Mark=undef, SegmentSymbol=MarkHashh, + SegmentSymbolA=MarkHashh, SegmentSymbolB=MarkHash, SegmentSymbolC=MarkHashhh, + RightAngleSize=.4, RightAngleType=default, LabelAngleOffset=0, LabelSep=1, + LabelRefPt=c, MarkAngle=undef, MarkAngleRadius=.4, HomCoef=.5, RotAngle=60, + CurveType=none, TransformLabel=none, Central@Sym=false, DrawCirABC=true, + CodeFig=false, CodeFigColor=cyan, CodeFigStyle=dashed, CodeFigA=undef, + CodeFigB=undef, CodeFigAarc=true, CodeFigBarc=true, Radius=none, RadiusA=undef, + RadiusB=undef, Diameter=none, DiameterA=undef, DiameterB=undef, DistCoef=none, + AngleCoef=none, CurvAbsNeg=false, GenCurvFirst=none, GenCurvLast=none, + GenCurvInc=1}%}% +\SpecialCoor %% for using polar coordinates, node position, ... +\psset{dimen=middle}% remark of ML +\def\@undef{undef}% +\def\@default{default}% +\def\@german{german}% +\def\@suisseromand{suisseromand}% +\def\@polygon{polygon} +\def\@polyline{polyline} +\def\@curve{curve} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% CORRECTION OF BUG +\def\pst@newnode#1#2#3#4{% +% DG/SR modification begin - Nov. 9, 2000 - Patch 11 + \pst@killglue +% DG/SR modification end +\leavevmode +\pst@getnode{#1}\pst@thenode +\pst@Verb{% +\pst@nodedict +{#3} +\ifx\psk@name\relax false \else \psk@name true \fi +\pst@thenode +#2 +{#4} +\tx@NewNode +end}% +\global\let\psk@name\relax +\pstree@nodehook +\global\let\pstree@nodehook\relax} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% list for marking segment +\def\SegSymLst{MarkHash,MarkHashh,MarkHashhh,MarkCros,MarkCross,pstslash,pstslashh,pstslashhh,circ,times,cup,triangle,wedge} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% create a curve after a points list +\def\pst@MngTransformCurve{%DR 25032005 + \ifx\psk@CurveType\@none\else% + \ifx\psk@CurveType\@polygon\expandafter\pspolygon\@@GenCourbe\else% + \ifx\psk@CurveType\@polyline\expandafter\psline\@@GenCourbe\else% + \ifx\psk@CurveType\@curve\expandafter\pscurve\@@GenCourbe% + \fi\fi\fi\fi}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% macros for managing a list of parameters +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %% begin DR 2005/04/10 +\def\@List#1{\xdef\@NewList{none}\@List@i#1,\@nil\ignorespaces} +\def\@List@i#1,{% +\@List@ii#1==\@nil +\@ifnextchar\@nil{\@gobble}{\@List@i}} +\def\@List@ii#1=#2\@nil{% +\ifx\@NewList\@none\xdef\@NewList{#1}\else\xdef\@NewList{\@NewList,#1}\fi}% + %% end DR 2005/04/10 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\def\@InitListMng{% + \def\LastValidPN{default}\def\LastValidPNS{default}\def\LastValidPA{undef}\def\LastValidPS{default}} +%%begin modif alaindelplanque 11/2003 (VALID) +%% car(liste) -- param1,param2,... -> param1 +\def\PstParamListFirst#1,#2/{#1} +%% cdr(liste) -- param1,param2,... -> param2,... +\def\PstParamListLasts#1,#2/{#2} +\def\Pst@ManageParamList#1{%DR 02092004 #1->point node name + \edef\OldPointName{\psk@PointName}% + \edef\psk@PointName{\expandafter\PstParamListFirst\OldPointName,undef/}% + \ifx\psk@PointName\@undef\edef\psk@PointName{\LastValidPN}\else\edef\LastValidPN{\psk@PointName}\fi + \edef\OldPointNameSep{\psk@PointNameSep}% + \edef\psk@PointNameSep{\expandafter\PstParamListFirst\OldPointNameSep,default/}% + \ifx\psk@PointNameSep\@default\edef\psk@PointNameSep{\LastValidPNS}\else\edef\LastValidPNS{\psk@PointNameSep}\fi + \edef\OldPosAngle{\psk@PosAngle}% + \edef\psk@PosAngle{\expandafter\PstParamListFirst\OldPosAngle,undef/}% + \ifx\psk@PosAngle\@undef\edef\psk@PosAngle{\LastValidPA}\else\edef\LastValidPA{\psk@PosAngle}\fi + \edef\OldPointSymbol{\psk@PointSymbol}% + \edef\psk@PointSymbol{\expandafter\PstParamListFirst\OldPointSymbol,undef/}% + \ifx\psk@PointSymbol\@undef\edef\psk@PointSymbol{\LastValidPS}\else\edef\LastValidPS{\psk@PointSymbol}\fi + \Pst@geonodelabel{#1}%DR 02092004 + \edef\psk@PointName{\expandafter\PstParamListLasts\OldPointName,undef/}% + \edef\psk@PointNameSep{\expandafter\PstParamListLasts\OldPointNameSep,default/}% + \edef\psk@PosAngle{\expandafter\PstParamListLasts\OldPosAngle,undef/}% + \edef\psk@PointSymbol{\expandafter\PstParamListLasts\OldPointSymbol,undef/}}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% create a point with an associated node, +%% #1 -> options +%% #2 -> coordinates +%% #3 -> node name +\def\pstGeonode{\@ifnextchar[\Pst@Geonode{\Pst@Geonode[]}} +\def\Pst@Geonode[#1]{\@ifnextchar({\Pst@Geonode@i[#1]}{\Pst@Geonode@i[#1](0,0)}} +\def\Pst@Geonode@i[#1]{% + \begingroup% + \@InitListMng% DR 22032005 + \edef\@@GenCourbe{}%%for accumulating points% DR 22032005 + \psset{#1}\Pst@Geonode@ii} +\def\Pst@Geonode@ii(#1)#2{% + \pnode(#1){#2} + \xdef\@@GenCourbe{\@@GenCourbe(#2)}%%for accumulating points% DR 22032005 + \Pst@ManageParamList{#2}% + \@ifnextchar(\Pst@Geonode@ii{\pst@MngTransformCurve\endgroup}}% DR 22032005 +%%end modif alaindelplanque 11/2003 (VALID) +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% create a point with an associated node, in a new +%% landmark +%% #1 -> options +%% #2 -> coordinates +%% #3 -> node name +%% #4 -> O: new center of the landmark +%% #5 -> I: abscissa reference +%% #6 -> J: ordinate reference +\def\pstOIJGeonode{\@ifnextchar[\Pst@OIJGeonode{\Pst@OIJGeonode[]}}% +\def\Pst@OIJGeonode[#1]{%NEW DR 14112001 (for default (0,0) ccordinates) + \@ifnextchar({\Pst@OIJGeonode@i[#1]}{\Pst@OIJGeonode[#1](0,0)}}% +\def\Pst@OIJGeonode@i[#1]{% + \begingroup + \@InitListMng% DR 22032005 + \edef\@@GenCourbe{}%%for accumulating points% DR 22032005 + \psset{#1}\Pst@OIJGeonode@ii} +\def\Pst@OIJGeonode@ii(#1)#2#3#4#5{\Pst@OIJGeonode@iii{#3}{#4}{#5}(#1){#2}} +\def\Pst@OIJGeonode@iii#1#2#3(#4)#5{% + \rput(#1){% + \pst@@getcoor{#4}% + \rput(!\pst@coor\space + tx@EcldDict begin /N@#2 GetNode /N@#3 GetNode end + 4 index mul 3 -1 roll 5 index mul add + \pst@number\psyunit dup mul div exch + 4 -1 roll mul 3 -1 roll 4 -1 roll mul add + \pst@number\psxunit dup mul div exch){\pnode{#5}}}% + \xdef\@@GenCourbe{\@@GenCourbe(#5)}%%for accumulating points% DR 22032005 + \Pst@ManageParamList{#5}% + \@ifnextchar({\Pst@OIJGeonode@iii{#1}{#2}{#3}}{\pst@MngTransformCurve\endgroup}}% DR 22032005 +%%end modif DR 11/2003 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% #1 -> point coordinates +\def\Pst@geonodelabel#1{%% {nodename} + \ifx\psk@PointSymbol\@none\else% + \ifx\psk@PointSymbol\@default\edef\psk@PointSymbol{*}\fi% + \psdot[dotstyle=\psk@PointSymbol](#1)% + \fi%DR 02092004 + \Pst@PutPointLabel{#1}%DR 041104 +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\def\Pst@PutPointLabel#1{%DR 041104 + \ifx\psk@PointName\@none\else + \rput{*0}([nodesep=\ifx\psk@PointNameSep\@default{1em}\else\psk@PointNameSep\fi, + angle=\ifx\psk@PosAngle\@undef{0}\else\psk@PosAngle\fi]#1)% + {\ifPst@PtNameMath$\Pst@WhichLabel{#1}$\else\Pst@WhichLabel{#1}\fi} + \fi}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\def\Pst@WhichLabel#1{\ifx\psk@PointName\@default#1\else\psk@PointName\fi}%DR 0 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% #2 #3 -> nodes defining the segment to mark +\def\pstSegmentMark{\@ifnextchar[\Pst@SegmentMark{\Pst@SegmentMark[]}}% +\def\Pst@SegmentMark[#1]#2#3{% + \bgroup\psset{#1}% % Affectation of local parameters + \ncline[nodesep=0]{#2}{#3} + \ncput[nrot=:U]{$\csname\psk@SegmentSymbol\endcsname$}% + \egroup% +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% macros for marking +\def\pstslash{/}% +\def\pstslashh{/\!\!/}\let\pstslashslash=\pstslashh% +\def\pstslashhh{/\!\!/\!\!/}\let\pstslashslashslash=\pstslashhh% +%%begin modif alaindelplanque 11/2003 +\def\MarkHash{% + \rput{\ifx\psk@MarkAngle\@undef45\else\psk@MarkAngle\fi} + {\psline(-10\pslinewidth,0)(10\pslinewidth,0)}} +\def\MarkHashh{% + \rput{\ifx\psk@MarkAngle\@undef45\else\psk@MarkAngle\fi}(-3\pslinewidth,0) + {\psline(-10\pslinewidth,0)(10\pslinewidth,0)} + \rput{\ifx\psk@MarkAngle\@undef45\else\psk@MarkAngle\fi}(3\pslinewidth,0) + {\psline(-10\pslinewidth,0)(10\pslinewidth,0)}} +\def\MarkHashhh{% + \rput{\ifx\psk@MarkAngle\@undef45\else\psk@MarkAngle\fi}(-6\pslinewidth,0) + {\psline(-10\pslinewidth,0)(10\pslinewidth,0)} + \rput{\ifx\psk@MarkAngle\@undef45\else\psk@MarkAngle\fi} + {\psline(-10\pslinewidth,0)(10\pslinewidth,0)} + \rput{\ifx\psk@MarkAngle\@undef45\else\psk@MarkAngle\fi}(6\pslinewidth,0) + {\psline(-10\pslinewidth,0)(10\pslinewidth,0)}} +\def\MarkCros{ + \psline(-4\pslinewidth,4\pslinewidth)(4\pslinewidth,-4\pslinewidth) + \psline(-4\pslinewidth,-4\pslinewidth)(4\pslinewidth,4\pslinewidth)} +\def\MarkCross{ + \psline(-4\pslinewidth,8\pslinewidth)(4\pslinewidth,0) + \psline(-4\pslinewidth,0)(4\pslinewidth,8\pslinewidth) + \psline(-4\pslinewidth,-8\pslinewidth)(4\pslinewidth,0) + \psline(-4\pslinewidth,0)(4\pslinewidth,-8\pslinewidth)} +\def\MarkCirc{\pscircle(0,0){2\pslinewidth}} +%%end modif alaindelplanque 11/2003 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% #2 #3 #4 -> 3 nodes for defining the right angle +\def\pstRightAngle{\@ifnextchar[\Pst@RightAngle{\Pst@RightAngle[]}}% +\def\Pst@RightAngle[#1]#2#3#4{% + \bgroup\psset{#1}% % Affectation of local parameters + %% not good at all, but \rput{0}(#3){\rput{(#2)}{stuff}} doesn't work... + \rput(#3){% + \ifx\psk@RightAngleType\@default + \pspolygon(0,0)%%modif 12/2004 + (!tx@EcldDict begin /N@#4 GetNode exch Atan end \psk@RightAngleSize\space exch PtoC) + (!tx@EcldDict begin /N@#4 GetNode exch Atan /N@#2 GetNode exch Atan end + 2 copy sub abs 91 gt + { 2 copy lt { exch 360 add exch } { 360 add } ifelse } if %%DR 2005/01/14 + %%2 copy lt { exch 360 sub exch } if + add 2 div 2 sqrt \psk@RightAngleSize\space mul exch PtoC) + (!tx@EcldDict begin /N@#2 GetNode exch Atan end \psk@RightAngleSize\space + exch PtoC) + \else\ifx\psk@RightAngleType\@german + \pstMarkAngle[MarkAngleRadius=\psk@RightAngleSize, + LabelSep=\psk@RightAngleSize\space .5 mul]{#2}{#3}{#4} + {\scalebox{\psk@RightAngleSize}{\pscircle*{.08}}} + \else\ifx\psk@RightAngleType\@suisseromand + \rput{*0} + (!tx@EcldDict begin /N@#4 GetNode exch Atan /N@#2 GetNode exch Atan end + 2 copy lt { exch 360 sub exch } if add 2 div .45 \psk@RightAngleSize\space mul exch PtoC) + {\scalebox{\psk@RightAngleSize}{\pscircle*{.08}}} + \pspolygon(0,0) + (!tx@EcldDict begin /N@#4 GetNode exch Atan end \psk@RightAngleSize\space exch PtoC) + (!tx@EcldDict begin /N@#2 GetNode exch Atan end \psk@RightAngleSize\space exch PtoC) + \fi\fi\fi} + \egroup% +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% #2 #3 #4 -> 3 nodes for defining the angle +%% #5 -> label +\def\pstMarkAngle{\@ifnextchar[\Pst@MarkAngle{\Pst@MarkAngle[]}}% +\def\Pst@MarkAngle[#1]#2#3#4#5{% + \bgroup\psset{#1}% % Affectation of local parameters + %\rput(#3){\psarc(0,0){\psk@MarkAngleRadius}{(#2)}{(#4)}}% + %\rput[\psk@LabelRefPt]% + % {*0}([nodesep=\psk@LabelSep, angle= \psk@LabelAngle]#3){#5}% + \rput(#3){% + \psarc(0,0){\psk@MarkAngleRadius}{(#2)}{(#4)}% + \rput[\psk@LabelRefPt]{*0} + (!tx@EcldDict begin /N@#4 GetNode exch Atan /N@#2 GetNode exch Atan end + 2 copy lt { exch 360 sub exch } if + add 2 div \psk@LabelAngleOffset\space add \psk@LabelSep\space exch PtoC){#5} + %%begin modif alaindelplanque 11/2003 + \ifx\psk@MarkAngle\@undef\psset{MarkAngle=90}\fi + \ifx\psk@Mark\@undef\else + \rput{!tx@EcldDict begin + /N@#3 GetNode /N@#4 GetNode ABVect Atan + /N@#3 GetNode /N@#2 GetNode ABVect Atan + end 2 copy lt \pslbrace exch 360 sub exch \psrbrace if add 2 div 90 add} + (0,0){\rput{-90}(\psk@MarkAngleRadius,0){\csname\psk@Mark\endcsname}} + \fi} + %%end modif alaindelplanque 11/2003 + \egroup% +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% #2 #4 #6 -> coordinates for nodes +%% #3 #5 #7 -> nodes name +\def\pstTriangle{\@ifnextchar[\Pst@Triangle{\Pst@Triangle[]}}% +\def\Pst@Triangle[#1]{%NEW DR 14112001 (for default (0,0) coordinates) + \def\pst@par{#1}% + \@ifnextchar(\Pst@Trianglei{\Pst@Trianglei(0,0)}}% +\def\Pst@Trianglei(#1)#2(#3)#4(#5)#6{% + %\pst@killglue% <------------------------------------------------- hv - DR 050315 + \bgroup\pst@killglue% <------------------------------------------- DR 050315 + %%begin modif alaindelplanque 11/2003 + \pst@@getcoor{#1}\xdef\@@coordi{\pst@coor}%% <-------------------- hv + \pst@@getcoor{#3}\xdef\@@coordiii{\pst@coor}%% <------------------ hv + \pst@@getcoor{#5}\xdef\@@coordv{\pst@coor}%% <-------------------- hv + %%end modif alaindelplanque 11/2003 + %\bgroup\use@par% % Affectation of local parameters<---- DR 050315 + \use@par% % Affectation of local parameters<---- DR 050315 + %%begin modif alaindelplanque 11/2003 + \bgroup\ifx\psk@PosAngleA\@undef + \psset{PosAngle={!tx@EcldDict begin \@@coordiii\space\@@coordi\space ABVect exch Atan dup + \@@coordv\space\@@coordi\space ABVect exch Atan exch sub dup abs 180 gt { dup + dup abs div 360 mul sub } if 2 div add 180 add end}}%% <------ hv + \else\psset{PosAngle=\psk@PosAngleA}\fi + %%end modif alaindelplanque 11/2003 + \ifx\psk@PosAngleA\@undef\else\psset{PosAngle=\psk@PosAngleA}\fi + \ifx\psk@PointSymbolA\@undef\else\psset{PointSymbol=\psk@PointSymbolA}\fi + \ifx\psk@PointNameA\@undef\else\psset{PointName=\psk@PointNameA}\fi + \Pst@Geonode@i[](#1){#2}\egroup%%NEW DR 15112001 + %%begin modif alaindelplanque 11/2003 + \bgroup\ifx\psk@PosAngleB\@undef + \psset{PosAngle={!tx@EcldDict begin \@@coordi\space\@@coordiii\space ABVect exch Atan dup + \@@coordv\space\@@coordiii\space ABVect exch Atan exch sub dup abs 180 gt { dup + dup abs div 360 mul sub } if 2 div add 180 add end}}%% <------ hv + \else\psset{PosAngle=\psk@PosAngleB}\fi + %%end modif alaindelplanque 11/2003 + \ifx\psk@PosAngleB\@undef\else\psset{PosAngle=\psk@PosAngleB}\fi + \ifx\psk@PointSymbolB\@undef\else\psset{PointSymbol=\psk@PointSymbolB}\fi + \ifx\psk@PointNameB\@undef\else\psset{PointName=\psk@PointNameB}\fi + \Pst@Geonode@i[](#3){#4}\egroup%%NEW DR 15112001 + %%begin modif alaindelplanque 11/2003 + \ifx\psk@PosAngleC\@undef + \psset{PosAngle={!tx@EcldDict begin \@@coordiii\space\@@coordv\space ABVect exch Atan dup + \@@coordi\space\@@coordv\space ABVect exch Atan exch sub dup abs 180 gt { dup + dup abs div 360 mul sub } if 2 div add 180 add end}}%% <------ hv + \else\psset{PosAngle=\psk@PosAngleC}\fi%% <----------------------- hv + %%end modif alaindelplanque 11/2003 + \ifx\psk@PosAngleC\@undef\else\psset{PosAngle=\psk@PosAngleC}\fi + \ifx\psk@PointSymbolC\@undef\else\psset{PointSymbol=\psk@PointSymbolC}\fi + \ifx\psk@PointNameC\@undef\else\psset{PointName=\psk@PointNameC}\fi + \Pst@Geonode@i[](#5){#6}%%NEW DR 15112001 + \pst@TraceTriangle{#2}{#4}{#6}% + \egroup% +}% +\def\pst@TraceTriangle#1#2#3{\pspolygon(#1)(#2)(#3)}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Line, circle, Arc +%% #2 #3 -> 2 nodes defining the line +\def\pstLineAB{\ncline}%@ifnextchar[\Pst@LineAB{\Pst@LineAB[]}}% +%\def\Pst@LineAB[#1]#2#3{\ncline[#1]{#2}{#3}}% +%% #2 #3 -> 2 nodes defining the center and a point on the circle +\def\pstCircleOA{\pst@object{pstCircleOA}}% +\def\pstCircleOA@i#1#2{% + \bgroup\use@par% + \rput(#1){% + \begin@ClosedObj + \def\pst@linetype{4}% + \addto@pscode{% + tx@EcldDict begin + /N@#1 GetNode + \ifx\psk@Radius\@none + \ifx\psk@Diameter\@none + 2 copy /N@#2 GetNode ABDist + \else\psk@Diameter 2 div + \fi + \else\psk@Radius\space + \fi + end + \psk@dimen CLW mul sub 0 360 arc closepath}% + \showpointsfalse + \end@ClosedObj + }% + \egroup% +}% +%% #2 #3 -> 2 nodes defining a diameter of the circle +\def\pstCircleAB{\pst@object{pstCircleAB}}% +\def\pstCircleAB@i#1#2{% + \bgroup\use@par% + \Pst@MiddleAB[PointSymbol=none, PointName=none]{#2}{#1}{@MAB}{} + \rput(#1){% + \begin@ClosedObj + \def\pst@linetype{4}% + \addto@pscode{% + tx@NodeDict begin + tx@NodeDict /N@@MAB load GetCenter + end + 2 copy + tx@EcldDict begin /N@#2 GetNode ABDist end + \psk@dimen CLW mul sub 0 360 arc closepath}% + \showpointsfalse + \end@ClosedObj + }% + \egroup% +}% +%% #2 #3 #4 -> 3 nodes defining the center and two points on the circle +\def\pstArcOAB{\pst@object{pstArcOAB}}% +\def\pstArcnOAB{\pst@object{pstArcnOAB}}% +\def\pstArcnOAB@i{\def\psarc@type{1}\pstArcOAB@i}% +\def\pstArcOAB@i{\pstArcOAB@ii}%\@ifnextchar[\pstArcOAB@ii{\pstArcOAB@ii[]}}% +\def\pstArcOAB@ii#1#2#3{%[#1]#2#3#4{% + \bgroup\use@par% + \rput(#1){\pstArcOAB@iii{#2}{#3}}% + \egroup% +}% +\def\pstArcOAB@iii#1#2{% + \begin@OpenObj% + \addto@pscode{\pstArcOAB@iv{#1}{#2} \pstArcOAB@v}% + \gdef\psarc@type{0}% + \showpointsfalse + \end@OpenObj% +}%% end \pstArcOAB@iii +\def\pstArcOAB@iv#1#2{% + \pst@coor /y ED /x ED /r + tx@EcldDict begin /N@#1 GetNode end + Pyth def /c 57.2957 r \tx@Div def /angleA + tx@EcldDict begin /N@#1 GetNode end + exch Atan \psk@arcsepA c mul 2 div + \ifcase \psarc@type add \or sub \fi def + /angleB + tx@EcldDict begin /N@#2 GetNode end + exch Atan \psk@arcsepB c mul 2 div + \ifcase \psarc@type sub \or add \fi def + %ifshowpoints\psarc@showpoints\fi + \ifx\psk@arrowA\@empty + \ifnum\psk@liftpen=2 r angleA \tx@PtoC + y add exch x add exch + moveto + \fi + \fi% +}%% end \pstArcOAB@iv +\def\pstArcOAB@v{% + x y r angleA + \ifx\psk@arrowA\@empty\else + { ArrowA CP } { \ifcase\psarc@type add \or sub \fi }% + \tx@ArcArrow + \fi + angleB + \ifx\psk@arrowB\@empty\else + { ArrowB } { \ifcase\psarc@type sub \or add \fi }% + \tx@ArcArrow + \fi + \ifcase\psarc@type arc \or arcn \fi% +}%% end \pstArcOAB@v +\def\pstArcOAB@showpoints{% + gsave newpath x y moveto x y r \pst@tempa \pst@tempb + \ifcase\psarc@type arc \or arcn \fi + closepath CLW 2 div SLW [ \psk@dash\space ] 0 setdash stroke + grestore % +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% HOMOTETHIE +%% #2 -> centre +%% #3 -> antecedent +%% #4 -> node name of the homothetic of #1 +\def\pstHomO{\@ifnextchar[\Pst@HomO{\Pst@HomO[]}}% +\expandafter\ifx\csname psteucl@old\endcsname\relax%% NEW SYNTAX %% DR 2005/04/10 +\def\Pst@HomO[#1]#2{% + \bgroup% + \@InitListMng\def\LastValidSS{default}%%SS means SegmentSymbol + \psset{#1}\def\@HomCtr{#2}% Affectation of local parameters + \edef\@@GenCourbe{}%%for accumulating points + \Pst@HomO@i% +}% +\def\Pst@HomO@i#1{% + \@List{#1}\edef\@antecedentLst{\@NewList} + \@ifnextchar[\Pst@HomO@ii{\Pst@HomO@ii[default]}% +}% +\def\Pst@HomO@ii[#1]{% + \@List{#1}\edef\@imageLst{\@NewList} + \edef\@antecedent{\expandafter\PstParamListFirst\@antecedentLst,undef/} + \edef\@image{\expandafter\PstParamListFirst\@imageLst,default/} + \Pst@HomO@iii% +}% +\def\Pst@HomO@iii{% + \ifx\@image\@default\def\@image{\@antecedent '}\fi + \rput(\@HomCtr){% + \rput(! + tx@EcldDict begin /N@\@antecedent\space GetNode end + \psk@HomCoef\space mul exch \psk@HomCoef\space mul exch + \pst@number\psyunit div exch \pst@number\psxunit div + exch){\pnode{\@image}}% + }%%end rput + \xdef\@@GenCourbe{\@@GenCourbe(\@image)}%%for accumulating points + \ifPst@CentralSym\ifPst@CodeFig% + \edef\psk@OldSegmentSymbol{\psk@SegmentSymbol}% + \edef\psk@SegmentSymbol{\expandafter\PstParamListFirst\psk@OldSegmentSymbol,undef/}% + \ifx\psk@SegmentSymbol\@undef\edef\psk@SegmentSymbol{\LastValidSS}\else\edef\LastValidSS{\psk@SegmentSymbol}\fi + \bgroup% + \psset{linecolor=\psk@CodeFigColor, linestyle=\psk@CodeFigStyle}% + \pstSegmentMark{\@image}{\@HomCtr}% + \pstSegmentMark{\@HomCtr}{\@antecedent}% + \egroup% + \edef\psk@SegmentSymbol{\expandafter\PstParamListLasts\psk@OldSegmentSymbol,undef/}% + \fi\fi% + \Pst@ManageParamList{\@image}% + \edef\@antecedentLst{\expandafter\PstParamListLasts\@antecedentLst,undef/}% + \edef\@imageLst{\expandafter\PstParamListLasts\@imageLst,default/}% + \edef\@LastValidantecedent{\@antecedent}\def\@LastValidimage{\@image} + \edef\@antecedent{\expandafter\PstParamListFirst\@antecedentLst,undef/}% + \edef\@image{\expandafter\PstParamListFirst\@imageLst,default/} + \ifx\@antecedent\@undef\def\@End{\pst@MngTransformCurve\egroup} + \else\def\@End{\Pst@HomO@iii}\fi% + \@End% +}% +\else%% OLD SYNTAX +\def\Pst@HomO[#1]#2{% + \bgroup% + \@InitListMng\def\LastValidSS{default}%% + \psset{#1}\def\@HomCtr{#2}% Affectation of local parameters + \edef\@@GenCourbe{}%%for accumulating points + \Pst@HomO@i-% +}% +\def\Pst@HomO@i-#1#2{% + \rput(\@HomCtr){% + \rput(! + tx@EcldDict begin /N@#1 GetNode end + \psk@HomCoef\space mul exch \psk@HomCoef\space mul exch + \pst@number\psyunit div exch \pst@number\psxunit div + exch){\pnode{#2}}% + }%%end rput + \xdef\@@GenCourbe{\@@GenCourbe(#2)}%%for accumulating points + \ifPst@CentralSym\ifPst@CodeFig% + \edef\psk@OldSegmentSymbol{\psk@SegmentSymbol}% + \edef\psk@SegmentSymbol{\expandafter\PstParamListFirst\psk@OldSegmentSymbol,undef/}% + \ifx\psk@SegmentSymbol\@undef\edef\psk@SegmentSymbol{\LastValidSS}\else\edef\LastValidSS{\psk@SegmentSymbol}\fi + \bgroup% + \psset{linecolor=\psk@CodeFigColor, linestyle=\psk@CodeFigStyle}% + \pstSegmentMark{#2}{\@HomCtr}% + \pstSegmentMark{\@HomCtr}{#1}% + \egroup% + \edef\psk@SegmentSymbol{\expandafter\PstParamListLasts\psk@OldSegmentSymbol,undef/}% + \fi\fi% + \Pst@ManageParamList{#2}% + \@ifnextchar-{\Pst@HomO@i}{\pst@MngTransformCurve\egroup}% +}% +\fi% END OLD SYNTAX %% DR 2005/04/10 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Central Symmetry +%% #2 -> centre +%% #3 -> antecedent +%% #4 -> node name of the symmetrical point of #3 +\def\pstSymO{\@ifnextchar[\Pst@SymO{\Pst@SymO[]}}% +\def\Pst@SymO[#1]{\Pst@HomO[SegmentSymbol=\SegSymLst,#1, HomCoef=-1, Central@Sym=true]}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Middle of a Segment +%% #2 #3 -> 2 nodes defining the segment +%% #4 -> node name of the middle of [#2 #3] +\def\pstMiddleAB{\@ifnextchar[\Pst@MiddleAB{\Pst@MiddleAB[]}}% +\def\Pst@MiddleAB[#1]#2#3#4{% + \bgroup\psset{#1, HomCoef=.5}% % Affectation of local parameters + %%begin modif alaindelplanque 11/2003 + \ifx\psk@PosAngle\@undef% Calcul automatique de PosAngle + \psset{PosAngle={!tx@EcldDict begin /N@#3 GetNode exch /N@#2 GetNode end + 4 1 roll sub 3 1 roll sub Atan}} + \fi + %%end modif alaindelplanque 11/2003 + \expandafter\ifx\csname psteucl@old\endcsname\relax\Pst@HomO[]{#2}{#3}[#4]% + \else\Pst@HomO[]{#2}{#3}{#4}\fi%%%DR 14042005 + \ifPst@CodeFig% + \psset{linecolor=\psk@CodeFigColor, linestyle=\psk@CodeFigStyle}% + \pstSegmentMark{#2}{#4}% + \pstSegmentMark{#4}{#3}% + \fi% + \egroup +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Centre of Gravity of a Triangle +%% #2 #3 #4 -> 3 nodes defining the triangle +%% #5 -> node name of the centre of gravity of #2 #3 #4 +\def\pstCGravABC{\@ifnextchar[\Pst@CGravABC{\Pst@CGravABC[]}}% +\def\Pst@CGravABC[#1]#2#3#4#5{% + \bgroup\psset{#1}% % Affectation of local parameters + \Pst@OIJGeonode@i[](! 1 3 div dup){#5}{#2}{#3}{#4}%DR: 22/03/03 + \egroup +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Centre of the circoncrit circle +%% #2 #3 #4 -> 3 nodes defining the triangle +%% #5 -> node name of the centre of the circle +\def\pstCircleABC{\@ifnextchar[\Pst@CircleABC{\Pst@CircleABC[]}}% +\def\Pst@CircleABC[#1]#2#3#4#5{% + \bgroup\psset{#1}% % Affectation of local parameters + \rput(#2){%DR: 22/03/03 + \rput(! + tx@EcldDict begin + /N@#3 GetNode 2 copy Pyth 3 1 roll exch Atan %Rb Thetab + dup 3 1 roll %Thetab Rb Thetab + /N@#4 GetNode 2 copy Pyth 3 1 roll exch Atan %Thetab Rb Thetab Rc Thetac + 3 -1 roll sub dup cos 2 index mul 3 1 roll sin mul %Xb Xc Yc + dup dup mul 2 index dup mul add 3 -1 roll 3 index mul sub 2 div exch div + exch 2 div exch 3 -1 roll Rotate + \pst@number\psyunit div exch \pst@number\psxunit div exch + end){\Pst@Geonode@i[](0,0){#5}}}% + %\Pst@InterLL[]{@Middle#2#3}{@Middle#2#3P}{@Middle#2#4}{@Middle#2#4P}{#5}%DR: 22/03/03 + \ifPst@DrawCirABC\pstCircleOA{#5}{#2}\fi + \ifPst@CodeFig + \psset{PointSymbol=none, PointName=none, linecolor=\psk@CodeFigColor, linestyle=\psk@CodeFigStyle, nodesep=-1}% + \expandafter\ifx\csname psteucl@old\endcsname\relax%% NEW SYNTAX 14042005 + \Pst@HomO[HomCoef=.5]{#2}{#3}[@Middle#2#3]% + \Pst@Rotation[RotAngle=90, CodeFig=false]{@Middle#2#3}{#2}[@Middle#2#3P]% + \Pst@HomO[HomCoef=.5]{#2}{#4}[@Middle#2#4]% + \Pst@Rotation[RotAngle=90, CodeFig=false]{@Middle#2#4}{#2}[@Middle#2#4P]% + \Pst@HomO[HomCoef=.5]{#4}{#3}[@Middle#4#3]% + \else%% OLD SYNTAX + \Pst@HomO[HomCoef=.5]{#2}{#3}{@Middle#2#3}% + \Pst@Rotation[RotAngle=90, CodeFig=false]{@Middle#2#3}{#2}{@Middle#2#3P}% + \Pst@HomO[HomCoef=.5]{#2}{#4}{@Middle#2#4}% + \Pst@Rotation[RotAngle=90, CodeFig=false]{@Middle#2#4}{#2}{@Middle#2#4P}% + \Pst@HomO[HomCoef=.5]{#4}{#3}{@Middle#4#3}% + \fi + \ncline{#5}{@Middle#4#3}% + \ncline{#5}{@Middle#2#3}% + \ncline{#5}{@Middle#2#4}% + \psset{linestyle=solid}% + \Pst@RightAngle[]{#5}{@Middle#4#3}{#4}% + \Pst@RightAngle[]{#5}{@Middle#2#3}{#3}% + \Pst@RightAngle[]{#5}{@Middle#2#4}{#2}% + \Pst@SegmentMark[SegmentSymbol=\psk@SegmentSymbolA]{#4}{@Middle#4#3}% + \Pst@SegmentMark[SegmentSymbol=\psk@SegmentSymbolA]{@Middle#4#3}{#3}% + \Pst@SegmentMark[SegmentSymbol=\psk@SegmentSymbolB]{#3}{@Middle#2#3}% + \Pst@SegmentMark[SegmentSymbol=\psk@SegmentSymbolB]{@Middle#2#3}{#2}% + \Pst@SegmentMark[SegmentSymbol=\psk@SegmentSymbolC]{#2}{@Middle#2#4}% + \Pst@SegmentMark[SegmentSymbol=\psk@SegmentSymbolC]{@Middle#2#4}{#4}% + \fi + \egroup +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TRANSLATION +%% #2 #3 -> 2 nodes defining the translation vector +%% #4 -> antecedent +%% #5 -> node name of the image +\expandafter\ifx\csname psteucl@old\endcsname\relax%% NEW SYNTAX %% DR 2005/04/10 +\def\pstTranslation{\@ifnextchar[\Pst@Translation{\Pst@Translation[]}}% +\def\Pst@Translation[#1]#2#3{% + \bgroup% + \@InitListMng% + \psset{#1}\def\@VectorOrigin{#2}\def\@VectorEnd{#3}% + \edef\@@GenCourbe{}%%for accumulating points + \Pst@Translation@i% +}% +\def\Pst@Translation@i#1{% + \@List{#1}\edef\@antecedentLst{\@NewList} + \@ifnextchar[\Pst@Translation@ii{\Pst@Translation@ii[default]}% +}% +\def\Pst@Translation@ii[#1]{% + \@List{#1}\edef\@imageLst{\@NewList} + \edef\@antecedent{\expandafter\PstParamListFirst\@antecedentLst,undef/} + \edef\@image{\expandafter\PstParamListFirst\@imageLst,default/} + \Pst@Translation@iii% +}% +\def\Pst@Translation@iii{% + \ifx\@image\@default\def\@image{\@antecedent '}\fi + \rput(\@VectorOrigin){% + \rput(! + tx@EcldDict begin /N@\@VectorEnd\space GetNode + \ifx\psk@DistCoef\@none + \else\psk@DistCoef\space mul exch \psk@DistCoef\space mul exch\fi + /N@\@antecedent\space GetNode end + 3 -1 roll add exch 3 -1 roll add exch + \pst@number\psyunit div exch \pst@number\psxunit div exch)% + {\pnode{\@image}}% + }% + \xdef\@@GenCourbe{\@@GenCourbe(\@image)}%%for accumulating points + \ifPst@CodeFig% + \bgroup% + \psset{linecolor=\psk@CodeFigColor, linestyle=\psk@CodeFigStyle}% + \ncline[arrows=->,nodesep=0]{\@antecedent}{\@image} + \ifx\psk@TransformLabel\@none + \else + \ifx\psk@TransformLabel\@default% + \ncput*{$\ifx\psk@DistCoef\@none\else\psk@DistCoef\fi\overrightarrow{\@VectorOrigin\@VectorEnd}$} + \else\ncput{\psk@TransformLabel}\fi + \fi% + \egroup% + \fi% + \Pst@ManageParamList{\@image}% + \edef\@antecedentLst{\expandafter\PstParamListLasts\@antecedentLst,undef/}% + \edef\@imageLst{\expandafter\PstParamListLasts\@imageLst,default/}% + \edef\@LastValidantecedent{\@antecedent}\def\@LastValidimage{\@image} + \edef\@antecedent{\expandafter\PstParamListFirst\@antecedentLst,undef/}% + \edef\@image{\expandafter\PstParamListFirst\@imageLst,default/} + \ifx\@antecedent\@undef\def\@End{\pst@MngTransformCurve\egroup} + \else\def\@End{\Pst@Translation@iii}\fi% + \@End% +}% +\else%% OLD SYNTAX +\def\pstTranslation{\@ifnextchar[\Pst@Translation{\Pst@Translation[]}}% +\def\Pst@Translation[#1]#2#3{% + \bgroup + \@InitListMng% + \psset{#1}\def\@VectorOrigin{#2}\def\@VectorEnd{#3}% + \edef\@@GenCourbe{}%%for accumulating points + \Pst@Translation@i-% +}% +\def\Pst@Translation@i-#1#2{% + \rput(\@VectorOrigin){% + \rput(! + tx@EcldDict begin /N@\@VectorEnd\space GetNode + \ifx\psk@DistCoef\@none + \else\psk@DistCoef\space mul exch \psk@DistCoef\space mul exch\fi + /N@#1 GetNode end + 3 -1 roll add exch 3 -1 roll add exch + \pst@number\psyunit div exch \pst@number\psxunit div exch)% + {\pnode{#2}}% + }% + \xdef\@@GenCourbe{\@@GenCourbe(#2)}%%for accumulating points + \ifPst@CodeFig% + \bgroup + \psset{linecolor=\psk@CodeFigColor, linestyle=\psk@CodeFigStyle, nodesep=0}% + \ncline[arrows=->]{#1}{#2} + \ifx\psk@TransformLabel\@none + \else% + \ifx\psk@TransformLabel\@default% + \ncput*{\ifx\psk@DistCoef\@none\else\psk@DistCoef\fi$\overrightarrow{\@VectorOrigin\@VectorEnd}$} + \else\ncput{\psk@TransformLabel}\fi + \fi% + \egroup + \fi + \Pst@ManageParamList{#2}% + \@ifnextchar-{\Pst@Translation@i}{\pst@MngTransformCurve\egroup}% +}% +%%%%%%%%%%%%%%%%%%%%% +\fi% END OLD SYNTAX %% DR 2005/04/10 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% ROTATION +%% #2 -> centre of rotation +%% #3 -> antecedent +%% #4 -> node name of the image +\expandafter\ifx\csname psteucl@old\endcsname\relax%% NEW SYNTAX %% DR 2005/04/10 +\def\pstRotation{\@ifnextchar[\Pst@Rotation{\Pst@Rotation[]}}% +\def\Pst@Rotation[#1]#2{% + \bgroup + \@InitListMng% + \psset{#1}\def\@RotCtr{#2}\edef\@@GenCourbe{}%%for accumulating points + \Pst@Rotation@i% +}% +\def\Pst@Rotation@i#1{% + \@List{#1}\edef\@antecedentLst{\@NewList} + \@ifnextchar[\Pst@Rotation@ii{\Pst@Rotation@ii[default]}% +}% +\def\Pst@Rotation@ii[#1]{% + \@List{#1}\edef\@imageLst{\@NewList} + \edef\@antecedent{\expandafter\PstParamListFirst\@antecedentLst,undef/} + \edef\@image{\expandafter\PstParamListFirst\@imageLst,default/} + \Pst@Rotation@iii% +}% +\def\Pst@Rotation@iii{% + \ifx\@image\@default\def\@image{\@antecedent '}\fi + \rput(\@RotCtr){% + \rput(!tx@EcldDict begin /N@\@antecedent\space GetNode \psk@RotAngle\space Rotate end + \pst@number\psyunit div exch \pst@number\psxunit div exch)% + {\pnode{\@image}}% + }%% end \rput + \xdef\@@GenCourbe{\@@GenCourbe(\@image)}%%for accumulating points + \ifPst@CodeFig% + \bgroup + \psset{linecolor=\psk@CodeFigColor, linestyle=\psk@CodeFigStyle}% + \pstArcOAB[arrows=->]{\@RotCtr}{\@antecedent}{\@image}% + \ncline{\@RotCtr}{\@antecedent}\ncline{\@RotCtr}{\@image} + \ifx\psk@TransformLabel\@none\else\pstMarkAngle{\@antecedent}{\@RotCtr}{\@image}{$\psk@TransformLabel$}\fi + \egroup + \fi% + \Pst@ManageParamList{\@image}% + \edef\@antecedentLst{\expandafter\PstParamListLasts\@antecedentLst,undef/}% + \edef\@imageLst{\expandafter\PstParamListLasts\@imageLst,default/}% + \edef\@LastValidantecedent{\@antecedent}\def\@LastValidimage{\@image} + \edef\@antecedent{\expandafter\PstParamListFirst\@antecedentLst,undef/}% + \edef\@image{\expandafter\PstParamListFirst\@imageLst,default/} + \ifx\@antecedent\@undef\def\@End{\pst@MngTransformCurve\egroup} + \else\def\@End{\Pst@Rotation@iii}\fi% + \@End% +}% +%%%%%%%%%%%%%%%%%%%%% +\else%% OLD SYNTAX +\def\pstRotation{\@ifnextchar[\Pst@Rotation{\Pst@Rotation[]}}% +\def\Pst@Rotation[#1]#2{% + \bgroup + \@InitListMng% + \psset{#1}\def\@RotCtr{#2} + \edef\@@GenCourbe{}%%for accumulating points + \Pst@Rotation@i-% +}% +\def\Pst@Rotation@i-#1#2{% + \rput(\@RotCtr){% + \rput(!tx@EcldDict begin /N@#1 GetNode \psk@RotAngle\space Rotate end + \pst@number\psyunit div exch \pst@number\psxunit div exch)% + {\pnode{#2}}% + }%% end \rput + \xdef\@@GenCourbe{\@@GenCourbe(#2)}%%for accumulating points + \ifPst@CodeFig% + \bgroup + \psset{linecolor=\psk@CodeFigColor, linestyle=\psk@CodeFigStyle}% + \pstArcOAB[arrows=->]{\@RotCtr}{#1}{#2}% + \ncline{\@RotCtr}{#1}\ncline{\@RotCtr}{#2} + \ifx\psk@TransformLabel\@none\else\pstMarkAngle{#1}{\@RotCtr}{#2}{$\psk@TransformLabel$}\fi + \egroup + \fi% + \Pst@ManageParamList{#2}% + \@ifnextchar-{\Pst@Rotation@i}{\pst@MngTransformCurve\egroup}% +}% +\fi% END OLD SYNTAX %% DR 2005/04/10 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Intersection between two lines +%% #2 #3 -> nodes defining the first line +%% #4 #5 -> nodes defining the second line +%% #6 -> node name of the image +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\def\pstInterLL{\@ifnextchar[\Pst@InterLL{\Pst@InterLL[]}}% +\def\Pst@InterLL[#1]#2#3#4#5#6{% + \bgroup\psset{#1}% % Affectation of local parameters + \rput(! + tx@EcldDict begin + /N@#2 GetNode /N@#3 GetNode /N@#4 GetNode /N@#5 GetNode InterLines + end + \pst@number\psyunit div exch \pst@number\psxunit div exch){\pnode{#6}}% + \Pst@geonodelabel{#6}% + \egroup% +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Intersection between one line and one circle +%% #2 #3 -> nodes defining the first line +%% #4 #5 -> nodes defining the center and a point onto C +%% #6 -> node name of the first point +%% #7 -> label +%% #8 -> node name of the second point +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\def\pstInterLC{\@ifnextchar[\Pst@InterLC{\Pst@InterLC[]}}% +\def\Pst@InterLC[#1]#2#3#4#5#6#7{% + \bgroup\psset{#1}% % Affectation of local parameters + \rput(#4){% + \rput(! + tx@EcldDict begin + /N@#2 GetNode /N@#3 GetNode 4 copy EqDr + \ifx\psk@Radius\@none + \ifx\psk@Diameter\@none + /N@#4 GetNode /N@#5 GetNode ABDist + \else\psk@Diameter 2 div + \fi + \else\psk@Radius + \fi + InterLineCircle /Glby exch def /Glbx exch def + \pst@number\psyunit div exch \pst@number\psxunit div exch + end){\pnode{#6}}% + \rput(! + tx@EcldDict begin + Glbx \pst@number\psxunit div Glby \pst@number\psyunit div + end){\pnode{#7}}}% + \bgroup\ifx\psk@PosAngleA\@undef\else\psset{PosAngle=\psk@PosAngleA}\fi% + \ifx\psk@PointSymbolA\@undef\else\psset{PointSymbol=\psk@PointSymbolA}\fi% + \ifx\psk@PointNameA\@undef\else\psset{PointName=\psk@PointNameA}\fi% + \Pst@geonodelabel{#6}\egroup% + \ifx\psk@PosAngleB\@undef\else\psset{PosAngle=\psk@PosAngleB}\fi% + \ifx\psk@PointSymbolB\@undef\else\psset{PointSymbol=\psk@PointSymbolB}\fi% + \ifx\psk@PointNameB\@undef\else\psset{PointName=\psk@PointNameB}\fi% + \Pst@geonodelabel{#7}% + \egroup% +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Intersection between two circles +%% #2 #3 -> nodes defining the first circle +%% #4 #5 -> nodes defining the second circle +%% #6 -> node name of the first point +%% #7 -> node name of the second point +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\def\pstInterCC{\@ifnextchar[\Pst@InterCC{\Pst@InterCC[]}}% +\def\Pst@InterCC[#1]#2#3#4#5#6#7{% + \bgroup\psset{#1}% % Affectation of local parameters + \rput(#2){% + \rput(! + tx@EcldDict begin + \ifx\psk@RadiusA\@undef + \ifx\psk@DiameterA\@undef + \ifx\psk@Radius\@none + \ifx\psk@Diameter\@none + /N@#3 GetNode Pyth + \else\psk@Diameter 2 div + \fi + \else\psk@Radius\space + \fi + \else\psk@DiameterA 2 div + \fi + \else\psk@RadiusA\space + \fi + \ifx\psk@RadiusB\@undef + \ifx\psk@DiameterB\@undef + \ifx\psk@Radius\@none + \ifx\psk@Diameter\@none + /N@#4 GetNode /N@#5 GetNode ABDist + \else\psk@Diameter 2 div + \fi + \else\psk@Radius\space + \fi + \else\psk@DiameterB 2 div + \fi + \else\psk@RadiusB\space + \fi + /N@#4 GetNode Pyth InterCircles /N@#4 GetNode + exch Atan dup /xoC exch def Rotate /Glby exch def /Glbx exch def + xoC Rotate + end + \pst@number\psyunit div exch \pst@number\psxunit div exch) + {\pnode{#6}}% + \rput(! + tx@EcldDict begin + Glbx \pst@number\psxunit div Glby \pst@number\psyunit div + end)% + {\pnode{#7}}% + }% + \bgroup\ifx\psk@PosAngleA\@undef\else\psset{PosAngle=\psk@PosAngleA}\fi + \ifx\psk@PointSymbolA\@undef\else\psset{PointSymbol=\psk@PointSymbolA}\fi + \ifx\psk@PointNameA\@undef\else\psset{PointName=\psk@PointNameA}\fi + \Pst@geonodelabel{#6}\egroup% + \bgroup\ifx\psk@PosAngleB\@undef\else\psset{PosAngle=\psk@PosAngleB}\fi + \ifx\psk@PointSymbolB\@undef\else\psset{PointSymbol=\psk@PointSymbolB}\fi + \ifx\psk@PointNameB\@undef\else\psset{PointName=\psk@PointNameB}\fi + \Pst@geonodelabel{#7}\egroup% + \psset{linecolor=\psk@CodeFigColor, linestyle=\psk@CodeFigStyle, arcsep=-1}% + \ifx\psk@CodeFigA\@undef% + \ifx\psk@CodeFigB\@undef\ifPst@CodeFig\pstArcOAB{#2}{#6}{#7}\fi\fi + \else% + \ifPst@CodeFigAarc\pstArcOAB{#2}{#6}{#7}\else\pstArcnOAB{#2}{#6}{#7}\fi% + \fi + \ifx\psk@CodeFigB\@undef% + \ifx\psk@CodeFigA\@undef\ifPst@CodeFig\pstArcOAB{#4}{#6}{#7}\fi\fi + \else% + \ifPst@CodeFigBarc\pstArcOAB{#4}{#6}{#7}\else\pstArcnOAB{#4}{#6}{#7}\fi% + \fi + \egroup% +}% +%% Intersection between two functions +%% #2 #3 -> f and g (functions) +%% #4 -> approximation of the root +%% #5 -> node name of the first point +\def\pstInterFF{\@ifnextchar[\Pst@InterFF{\Pst@InterFF[]}}% +\def\Pst@InterFF[#1]#2#3#4#5{% + \bgroup\psset{#1}% % Affectation of local parameters + \rput(! + tx@EcldDict begin + #4 { #3 } { #2 } NewtonSolving pop + end){\pnode{#5}}% + \Pst@geonodelabel{#5}% + \egroup% +} +%% Intersection between a function and a line +%% #2 -> f (function) +%% #3 #4 -> points defining the line +%% #5 -> approximation of the root +%% #6 -> node name of the first point +\def\pstInterFL{\@ifnextchar[\Pst@InterFL{\Pst@InterFL[]}}% +\def\Pst@InterFL[#1]#2#3#4#5#6{% + \bgroup\psset{#1}% % Affectation of local parameters + \rput(! + tx@EcldDict begin + #5 { /N@#3 GetNode /N@#4 GetNode EqDr 1 index div + \pst@number\psxunit div 3 1 roll div x mul add } { #2 } + NewtonSolving pop + end){\pnode{#6}}% + \Pst@geonodelabel{#6}% + \egroup% +} +%% Intersection between a function and a circle +%% #2 -> f (function) +%% #3 #4 -> points defining the circle (center and point) +%% #5 -> approximation of the root +%% #6 -> node name of the first point +\def\pstInterFC{\@ifnextchar[\Pst@InterFC{\Pst@InterFC[]}}% +\def\Pst@InterFC[#1]#2#3#4#5#6{% + \bgroup\psset{#1}% % Affectation of local parameters + \rput(! + tx@EcldDict begin + #5 { /N@#3 GetNode 2 copy /N@#4 GetNode ABDist \pst@number\psxunit div + 3 1 roll \pst@number\psyunit div exch \pst@number\psxunit div exch x #2 ABDist sub } { 0 } NewtonSolving pop + pop dup /x exch def #2 + end){\pnode{#6}}% + \Pst@geonodelabel{#6}% + \egroup% +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% ORTHOGONAL PROJECTION +%% #2 #3 -> nodes defining the line where to project +%% #4 -> antecedent +%% #5 -> node name of the image +%% #6 -> label +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\expandafter\ifx\csname psteucl@old\endcsname\relax%% NEW SYNTAX %% DR 2005/04/10 +\def\pstProjection{\@ifnextchar[\Pst@Projection{\Pst@Projection[]}}% +\def\Pst@Projection[#1]#2#3{% + \bgroup% + \@InitListMng% + \psset{#1}\def\@FrstPt{#2}\def\@ScdPt{#3}% Affectation of local parameters + \edef\@@GenCourbe{}%%for accumulating points + \Pst@Projection@i% +}% +\def\Pst@Projection@i#1{% + \@List{#1}\edef\@antecedentLst{\@NewList} + \@ifnextchar[\Pst@Projection@ii{\Pst@Projection@ii[default]}% +}% +\def\Pst@Projection@ii[#1]{% + \@List{#1}\edef\@imageLst{\@NewList} + \edef\@antecedent{\expandafter\PstParamListFirst\@antecedentLst,undef/} + \edef\@image{\expandafter\PstParamListFirst\@imageLst,default/} + \Pst@Projection@iii% +}% +\def\Pst@Projection@iii{% + \Pst@Projection@iv{\@antecedent}{\@image} + %%begin modif alaindelplanque 11/2003 + %% automatic computation of PosAngle + \ifx\psk@PosAngle\@undef% + \psset{PosAngle={!tx@EcldDict begin /N@\@image\space GetNode exch /N@\@antecedent\space GetNode end 4 1 roll + sub 3 1 roll sub neg exch atan=20}} + \fi + %%end modif alaindelplanque 11/2003 + \xdef\@@GenCourbe{\@@GenCourbe(\@image)}%%for accumulating points + \Pst@ManageParamList{\@image}% + \ifPst@CodeFig% + \psset{linecolor=\psk@CodeFigColor, linestyle=\psk@CodeFigStyle}% + \pstRightAngle[linestyle=solid]{\@antecedent}{\@image}{\@ScdPt}% + \ncline{\@antecedent}{\@image}% + \fi% + \edef\@antecedentLst{\expandafter\PstParamListLasts\@antecedentLst,undef/}% + \edef\@imageLst{\expandafter\PstParamListLasts\@imageLst,default/}% + \edef\@LastValidantecedent{\@antecedent}\def\@LastValidimage{\@image} + \edef\@antecedent{\expandafter\PstParamListFirst\@antecedentLst,undef/}% + \edef\@image{\expandafter\PstParamListFirst\@imageLst,default/} + \ifx\@antecedent\@undef\def\@End{\pst@MngTransformCurve\egroup} + \else\def\@End{\Pst@Projection@iii}\fi% + \@End% +}% +\def\Pst@Projection@iv#1#2{% + \ifx\@image\@default\def\@image{\@antecedent '}\fi + \rput(\@FrstPt){% translation onto #1 + \rput(!tx@EcldDict begin /N@#1 GetNode /N@\@ScdPt\space GetNode Project end + \pst@number\psyunit div exch \pst@number\psxunit div exch)% + {\pnode{#2}}% + }% +}% +%%%%%%%%%%%%%%%%%%%%% +\else%% OLD SYNTAX +\def\pstProjection{\@ifnextchar[\Pst@Projection{\Pst@Projection[]}}% +\def\Pst@Projection[#1]#2#3{% + \bgroup% + \@InitListMng% + \psset{#1}\def\@FrstPt{#2}\def\@ScdPt{#3}% Affectation of local parameters + \edef\@@GenCourbe{}%%for accumulating points + \Pst@Projection@i-% +}% +\def\Pst@Projection@i-#1#2{% + \Pst@Projection@ii{#1}{#2} + %%begin modif alaindelplanque 11/2003 + %% automatic computation of PosAngle + \ifx\psk@PosAngle\@undef% + \psset{PosAngle={!tx@EcldDict begin /N@#2 GetNode exch /N@#1 GetNode end 4 1 roll + sub 3 1 roll sub neg exch atan=20}} + \fi + %%end modif alaindelplanque 11/2003 + \xdef\@@GenCourbe{\@@GenCourbe(#2)}%%for accumulating points + \Pst@ManageParamList{#2}% + \ifPst@CodeFig% + \psset{linecolor=\psk@CodeFigColor, linestyle=\psk@CodeFigStyle}% + \pstRightAngle[linestyle=solid]{#1}{#2}{\@ScdPt}% + \ncline{#1}{#2}% + \fi% + \@ifnextchar-{\Pst@Projection@i}{\pst@MngTransformCurve\egroup}% +}% +\def\Pst@Projection@ii#1#2{% + \rput(\@FrstPt){% translation onto #1 + \rput(!tx@EcldDict begin /N@#1 GetNode /N@\@ScdPt\space GetNode Project end + \pst@number\psyunit div exch \pst@number\psxunit div exch)% + {\pnode{#2}}% + }% +}% +\fi% END OLD SYNTAX %% DR 2005/04/10 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% ORTHOGONAL SYMMETRY +%% #2 #3 -> nodes defining the symmetrical axis +%% #4 -> antecedent node +%% #5 -> node name of the symmetrical point +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\expandafter\ifx\csname psteucl@old\endcsname\relax%% NEW SYNTAX %% DR 2005/04/10 +\def\pstOrtSym{\@ifnextchar[\Pst@OrtSym{\Pst@OrtSym[]}}% +\def\Pst@OrtSym[#1]#2#3{% + \bgroup% + \@InitListMng% + \psset{#1}\def\@FrstPt{#2}\def\@ScdPt{#3}% % Affectation of local parameters + \edef\@@GenCourbe{}%%for accumulating points + \Pst@OrtSym@i% +} +\def\Pst@OrtSym@i#1{ + \@List{#1}\edef\@antecedentLst{\@NewList} + \@ifnextchar[\Pst@OrtSym@ii{\Pst@OrtSym@ii[default]}% +}% +\def\Pst@OrtSym@ii[#1]{ + \@List{#1}\edef\@imageLst{\@NewList} + \edef\@antecedent{\expandafter\PstParamListFirst\@antecedentLst,undef/} + \edef\@image{\expandafter\PstParamListFirst\@imageLst,default/} + \Pst@OrtSym@iii% +}% +\def\Pst@OrtSym@iii{ + \ifx\@image\@default\def\@image{\@antecedent '}\fi + \rput(\@FrstPt){% translation onto #1 + \rput(! + tx@EcldDict begin /N@\@antecedent\space GetNode 2 copy /N@\@ScdPt\space GetNode Project + /N@\@antecedent\space GetNode ABVect 2 mul 3 -1 roll exch add 3 1 roll 2 mul add exch end + \pst@number\psyunit div exch \pst@number\psxunit div exch)% + {\pnode{\@image}}% + }% + \ifPst@CodeFig% + \bgroup + \Pst@Projection@iv{\@antecedent}{@ProjOrth\@antecedent on\@FrstPt\@ScdPt} + \psset{linecolor=\psk@CodeFigColor, linestyle=\psk@CodeFigStyle}% + \Pst@RightAngle[linestyle=solid]{\@FrstPt}{@ProjOrth\@antecedent on\@FrstPt\@ScdPt}{\@antecedent}% + \Pst@SegmentMark[]{\@image}{@ProjOrth\@antecedent on\@FrstPt\@ScdPt}% + \Pst@SegmentMark[]{@ProjOrth\@antecedent on\@FrstPt\@ScdPt}{\@antecedent}% + \egroup + \fi% + \xdef\@@GenCourbe{\@@GenCourbe(\@image)}%%for accumulating points + \Pst@ManageParamList{\@image}% + \edef\@antecedentLst{\expandafter\PstParamListLasts\@antecedentLst,undef/}% + \edef\@imageLst{\expandafter\PstParamListLasts\@imageLst,default/}% + \edef\@LastValidantecedent{\@antecedent}\def\@LastValidimage{\@image} + \edef\@antecedent{\expandafter\PstParamListFirst\@antecedentLst,undef/}% + \edef\@image{\expandafter\PstParamListFirst\@imageLst,default/} + \ifx\@antecedent\@undef\def\@End{\pst@MngTransformCurve\egroup} + \else\def\@End{\Pst@OrtSym@iii}\fi% + \@End% +}% +%%%%%%%%%%%%%%%%%%%%% +\else%% OLD SYNTAX +\def\pstOrtSym{\@ifnextchar[\Pst@OrtSym{\Pst@OrtSym[]}}% +\def\Pst@OrtSym[#1]#2#3{% + \bgroup% + \@InitListMng% + \psset{#1}\def\@FrstPt{#2}\def\@ScdPt{#3}% % Affectation of local parameters + \edef\@@GenCourbe{}%%for accumulating points + \Pst@OrtSym@i-% +} +\def\Pst@OrtSym@i-#1#2{ + \rput(\@FrstPt){% translation onto #1 + \rput(! + tx@EcldDict begin /N@#1 GetNode 2 copy /N@\@ScdPt\space GetNode Project + /N@#1 GetNode ABVect 2 mul 3 -1 roll exch add 3 1 roll 2 mul add exch end + \pst@number\psyunit div exch \pst@number\psxunit div exch)% + {\pnode{#2}}% + }% + \ifPst@CodeFig% + \bgroup + \Pst@Projection@ii{#1}{@ProjOrth#1on\@FrstPt\@ScdPt} + \psset{linecolor=\psk@CodeFigColor, linestyle=\psk@CodeFigStyle}% + \Pst@RightAngle[linestyle=solid]{\@FrstPt}{@ProjOrth#1on\@FrstPt\@ScdPt}{#1}% + \Pst@SegmentMark[]{#2}{@ProjOrth#1on\@FrstPt\@ScdPt}% + \Pst@SegmentMark[]{@ProjOrth#1on\@FrstPt\@ScdPt}{#1}% + \egroup + \fi% + \xdef\@@GenCourbe{\@@GenCourbe(#2)}%%for accumulating points + \Pst@ManageParamList{#2}% + \@ifnextchar-{\Pst@OrtSym@i}{\pst@MngTransformCurve\egroup}% +}% +\fi% END OLD SYNTAX %% DR 2005/04/10 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% mediator line +%% #2 #3 -> nodes defining the segment +%% #4 -> middle of the segment +%% #5 -> node belonging to the mediator line +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\def\pstMediatorAB{\@ifnextchar[\Pst@MediatorAB{\Pst@MediatorAB[]}}% +\def\Pst@MediatorAB[#1]#2#3#4#5{% + \bgroup\psset{#1}% % Affectation of local parameters + \bgroup + \ifx\psk@PointSymbolA\@undef\else\psset{PointSymbol=\psk@PointSymbolA}\fi + \ifx\psk@PointNameA\@undef\else\psset{PointName=\psk@PointNameA}\fi + %\Pst@HomO[HomCoef=.5]{#2}{#3}{#4} + \Pst@MiddleAB[]{#2}{#3}{#4} + \egroup + \bgroup + \ifx\psk@PointSymbolB\@undef\else\psset{PointSymbol=\psk@PointSymbolB}\fi + \ifx\psk@PointNameB\@undef\else\psset{PointName=\psk@PointNameB}\fi + \expandafter\ifx\csname psteucl@old\endcsname\relax% + \Pst@Rotation[RotAngle=90, CodeFig=false]{#4}{#3}[#5]%%%DR 26032005 + \else\Pst@Rotation[RotAngle=90, CodeFig=false]{#4}{#3}{#5}\fi%%%DR 14042005 + \egroup + \ifPst@CodeFig + \bgroup\psset{linecolor=\psk@CodeFigColor} + \Pst@RightAngle[]{#3}{#4}{#5} + \Pst@SegmentMark[]{#2}{#4}\Pst@SegmentMark[]{#4}{#3}% + \egroup + \fi + \ncline{#4}{#5} + \egroup +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% bissectrice +%% #2 #3 #4 -> nodes defining the angle in #3 anti-clockwise +%% #5 -> node belonging to the bissectrice +%% #6 -> label +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\def\pstBissectBAC{\@ifnextchar[\Pst@BissectBAC{\Pst@BissectBAC[]}}% +\def\Pst@BissectBAC[#1]#2#3#4#5{% + \bgroup\psset{#1}% % Affectation of local parameters + \rput(#3){% + \rput(! + tx@EcldDict begin /N@#4 GetNode exch Atan /N@#2 GetNode end + 2 copy 5 2 roll exch Atan 2 copy lt { exch 360 sub exch } if sub + 2 div tx@EcldDict begin Rotate end + \pst@number\psyunit div exch \pst@number\psxunit div exch)% + {\pnode{#5}}% + \Pst@geonodelabel{#5}% + \ncline{#3}{#5}% + }%% end \rput + \egroup% +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% outside bissectrice +%% #2 #3 #4 -> nodes defining the angle in #3 anti-clockwise +%% #5 -> node belonging to the bissectrice +%% #6 -> label +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\def\pstOutBissectBAC{\@ifnextchar[\Pst@OutBisBAC{\Pst@OutBisBAC[]}}% +\def\Pst@OutBisBAC[#1]#2#3#4#5{% + \bgroup\psset{#1}% % Affectation of local parameters + \rput(#3){% + \rput(! + tx@EcldDict begin /N@#4 GetNode exch Atan /N@#2 GetNode end + 2 copy 5 2 roll exch Atan 2 copy lt { exch 360 sub exch } if sub + 2 div 90 add tx@EcldDict begin Rotate end + \pst@number\psyunit div exch \pst@number\psxunit div exch)% + {\pnode{#5}}% + \Pst@geonodelabel{#5}% + \ncline{#3}{#5}% + }%% end \rput + \egroup% +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Creation of a point according to a curvilign abscissa +%% #2 -> center of the circle +%% #3 -> point origin of the circle +%% #4 -> point to be placed +\def\pstCurvAbsNode{\@ifnextchar[\Pst@CurvAbsNode{\Pst@CurvAbsNode[]}}% +\def\Pst@CurvAbsNode[#1]#2#3#4#5{% + \bgroup\psset{#1}% % Affectation of local parameters + \Pst@@CurvAbsNode{#2}{#3}{#4}{#5}% + %%begin modif alaindelplanque 11/2003 + %% \ifx\psk@PointSymbol\@none\else{\Pst@geonodelabel{#4}}\fi% + \ifx\psk@PointSymbol\@none + \else + %% automatic computation of PosAngle + \ifx\psk@PosAngle\@undef% + \psset{PosAngle={!tx@EcldDict begin /N@#4 GetNode exch /N@#2 GetNode end 4 1 roll + sub 3 1 roll sub neg exch Atan}} + \fi + \Pst@geonodelabel{#4} + \fi% + %%end modif alaindelplanque 11/2003 + \Pst@geonodelabel{#4}% + \egroup% + %% AJOUTER LE MARQUAGE CodeFig +}% +\def\Pst@@CurvAbsNode#1#2#3#4{% + \rput(#1){% + \rput(! + tx@EcldDict begin + /N@#2 GetNode 2 copy 0 0 ABDist #4 exch div Pi div 180 mul + \ifPst@CurvAbsNeg neg \fi Rotate + end + \pst@number\psyunit div exch \pst@number\psxunit div exch)% + {\pnode{#3}}% + }%% end \rput +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% GENERIC CURVES +%% #2 -> Radical name +%% #3 -> initial counter value +%% #4 -> maximal counter value +\def\pstGenericCurve{\@ifnextchar[\Pst@GenericCurve{\Pst@GenericCurve[]}}% +\def\Pst@GenericCurve[#1]#2#3#4{% + \bgroup\psset{#1}% % Affectation of local parameters + \edef\@@GenCourbe{\ifx\psk@GenCurvFirst\@none\else(\psk@GenCurvFirst)\fi}% + \pst@cnth=#4 + \advance\pst@cnth by -#3%\@GenCurve% del DR + \advance\pst@cnth by \psk@GenCurvInc%1 modif DR 020225 + \divide\pst@cnth by \psk@GenCurvInc + \multido{\i@GenCurve=#3+\psk@GenCurvInc}{\pst@cnth}{% + \xdef\@@GenCourbe{\@@GenCourbe(#2\i@GenCurve)}} + \edef\@@GenCourbe{% + \@@GenCourbe% + \ifx\psk@GenCurvLast\@none\else(\psk@GenCurvLast)\fi}% + %\psset{showpoints=true} + \expandafter\pscurve\@@GenCourbe + \egroup% +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Parallel line +%% #2 #3 -> nodes defining the line +%% #3 -> antecedent node +%% #4 -> node name of the image +%% #5 -> label +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Orthogonal line +%% #2 #3 -> nodes defining the line +%% #3 -> antecedent node +%% #4 -> node name of the image +%% #5 -> label +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Special macros for parameters +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Distance between two points +\def\pstDistAB#1#2{% + tx@EcldDict begin /N@#1 GetNode /N@#2 GetNode ABDist end + \ifx\psk@DistCoef\@none\else + \psk@DistCoef\space mul + \fi +} +%% Distance specified with a number +\def\pstDistVal#1{ + #1 \pst@number\psxunit mul + \ifx\psk@DistCoef\@none\else + \psk@DistCoef\space mul + \fi +} +%% angle defined by three points +\def\pstAngleAOB#1#2#3{ + tx@EcldDict begin /N@#3 GetNode /N@#2 GetNode end + 2 copy 6 2 roll + tx@EcldDict begin ABVect end exch Atan + dup 0 lt { 360 add } if + tx@EcldDict begin /N@#1 GetNode end + 5 -2 roll tx@EcldDict begin ABVect end exch Atan + dup 0 lt { 360 add } if +% 2 copy lt { exch 360 sub exch } if + sub + \ifx\psk@AngleCoef\@none\else + \psk@AngleCoef\space mul + \fi +} +%% END: pst-euclide.tex +%%% Local Variables: +%%% mode: latex +%%% TeX-master: t +%%% End: |