%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -*- Mode: Latex -*- %%%%%%%%%%%%%%%%%%%%%%%%%%%% %% pst-eucl.tex --- Generation of geometric figures in euclidean geometry %% Copyright 2000-2005 Dominique RODRIGUEZ %% %% Author : Dominique RODRIGUEZ (EN) %% 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" ) %% %% 2005-02-21 : correction for spurious blank (thanks to Herbert Voss ) %% 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 %% %% 2005-10-09 : problem solved with CodeFigAB %% %% 2005-12-31 : use \psscalbox instead of \scalebox (hv) %% %% 2006-01-29 : minor changes for file version (hv) %% %% 2006-01-30 : correction of pstArcOAB for pscustom (dr) %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 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 \def\fileversion{1.3.5} \def\filedate{2006/01/30}% %% 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 %% 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}}% \newif\ifPst@CodeFigA \define@key[psset]{pst-eucl}{CodeFigA}{\edef\psk@CodeFigA{#1}\@nameuse{Pst@CodeFigA#1}}% \newif\ifPst@CodeFigB \define@key[psset]{pst-eucl}{CodeFigB}{\edef\psk@CodeFigB{#1}\@nameuse{Pst@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} {\psscalebox{\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) {\psscalebox{\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\pstMarkAngle{\@ifnextchar[\Pst@MarkAngle@i{\Pst@MarkAngle@i[]}}% %\def\Pst@MarkAngle@i[#1]{\@ifnextchar+{\Pst@MarkAngle@ii[#1]}{\Pst@MarkAngle@iii[#1]}}% %\def\Pst@MarkAngle@ii[#1]+#2#3#4#5{% % %% here we should check the angle size for right angles % %} %\def\Pst@MarkAngle@iii[#1]#2#3#4#5{% \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[]}}% %OLD%%\def\pstArcOAB@ii#1#2#3{%[#1]#2#3#4{% %OLD%% \bgroup\use@par% %OLD%% \rput(#1){\pstArcOAB@iii{#2}{#3}}% %OLD%% \egroup% %OLD%%}% %OLD%%\def\pstArcOAB@iii#1#2% \def\pstArcOAB@ii#1#2#3{% \begin@OpenObj% %OLD%%\addto@pscode{\pstArcOAB@iv{#1}{#2} \pstArcOAB@v}% \addto@pscode{\pstArcOAB@iv{#1}{#2}{#3} \pstArcOAB@v}% \gdef\psarc@type{0}% \showpointsfalse \end@OpenObj% }%% end \pstArcOAB@iii %OLD%%\def\pstArcOAB@iv#1#2% \def\pstArcOAB@iv#1#2#3{% %%\pst@coor /y ED /x ED /r %OLD%%0 0 /y ED /x ED /r %%new DR 2005/10/21 tx@EcldDict begin /N@#1 GetNode end /y ED /x ED /r %%new DR 2005/10/21 %OLD%%tx@EcldDict begin /N@#1 GetNode end tx@EcldDict begin /N@#2 GetNode /N@#1 GetNode ABVect end Pyth def /c 57.2957 r \tx@Div def /angleA %OLD%%tx@EcldDict begin /N@#1 GetNode end tx@EcldDict begin /N@#2 GetNode /N@#1 GetNode ABVect end exch Atan \psk@arcsepA c mul 2 div \ifcase \psarc@type add \or sub \fi def /angleB %OLD%%tx@EcldDict begin /N@#2 GetNode end tx@EcldDict begin /N@#3 GetNode /N@#1 GetNode ABVect 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\ifPst@CodeFigAarc\pstArcOAB{#2}{#6}{#7}\else\pstArcnOAB{#2}{#6}{#7}\fi\fi\fi \else% \ifPst@CodeFigA\ifPst@CodeFigAarc\pstArcOAB{#2}{#6}{#7}\else\pstArcnOAB{#2}{#6}{#7}\fi\fi% \fi \ifx\psk@CodeFigB\@undef% \ifx\psk@CodeFigA\@undef\ifPst@CodeFig\ifPst@CodeFigBarc\pstArcOAB{#4}{#6}{#7}\else\pstArcnOAB{#4}{#6}{#7}\fi\fi\fi \else% \ifPst@CodeFigB\ifPst@CodeFigBarc\pstArcOAB{#4}{#6}{#7}\else\pstArcnOAB{#4}{#6}{#7}\fi\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]{\@ScdPt}{\@image}{\@antecedent}% \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@#2 GetNode /N@#3 GetNode ABVect /N@#2 GetNode /N@#1 GetNode ABVect end 4 copy exch 4 -1 roll mul 3 -2 roll mul add 4 -2 roll mul 4 -2 roll mul sub exch Atan \ifx\psk@AngleCoef\@none\else \psk@AngleCoef\space mul \fi } %% END: pst-euclide.tex %%% Local Variables: %%% mode: latex %%% TeX-master: t %%% End: