\documentclass[11pt,english,BCOR10mm,DIV12,bibliography=totoc,parskip=false,smallheadings
    headexclude,footexclude,oneside,english]{pst-doc}
\usepackage[utf8]{inputenc}
\usepackage{pst-eucl}
\let\pstEuclideFV\fileversion
\usepackage{multicol}
\usepackage{pst-plot,paralist}
\usepackage[mathscr]{eucal}
\lstset{pos=l,wide=false,language=PSTricks,
    morekeywords={multidipole,parallel},basicstyle=\footnotesize\ttfamily}
%
\def\Argsans#1{$\langle$#1$\rangle$}
\def\DefaultVal#1{(by default #1)}

\usepackage{biblatex}
\addbibresource{\jobname.bib}


\title{\texttt{pst-euclide}}
\subtitle{A PSTricks package for drawing geometric pictures; v.\pstEuclideFV}
\author{Dominique Rodriguez\\Herbert Voß}
\docauthor{Herbert Voß}
\date{\today}
\begin{document}
\maketitle

\begin{abstract}
  The \LPack{pst-eucl} package allow the drawing of Euclidean
  geometric figures using \LaTeX\ macros for specifying mathematical
  constraints. It is thus possible to build point using common
  transformations or intersections. The use of coordinates is limited
  to points which controlled the figure.

  \vfill
  I would like to thanks the following persons for the help they gave
  me for development of this package:

  \begin{compactitem}
  \item Denis Girou pour ses critiques pertinentes et ses
    encouragement lors de la découverte de l'embryon initial et pour
    sa relecture du présent manuel;
  \item Michael Vulis for his fast testing of the documentation using
    V\TeX\ which leads to the correction of a bug in the \PS\ code;
  \item Manuel Luque and Olivier Reboux for their remarks and their examples.
  \item Alain Delplanque for its modification propositions on automatic
    placing of points name and the ability of giving a list of points in
    \Lcs{pstGeonode}.
  \end{compactitem}
\end{abstract}


\vfill
\noindent
Thanks to:  
Manuel Luque;
Thomas Söll.



\clearpage
\tableofcontents


\clearpage
\part{The package}
\section{Special specifications}

\subsection{\PST\ Options}

The package activates the \Lcs{SpecialCoor} mode. This mode extend the
coordinates specification. Furthermore the plotting type is set to
\Lkeyset{dimen=middle}, which indicates that the position of the
drawing is done according to the middle of the line. Please look at
the user manual for more information about these setting.

At last, the working axes are supposed to be (ortho)normed.

\subsection{Conventions}

For this manual, I used the geometric French conventions for naming
the points:

\begin{compactitem}
\item $O$ is a centre (circle, axes, symmetry, homothety, rotation);
\item $I$ defined the unity of the abscissa axe, or a midpoint;
\item $J$ defined the unity of the ordinate axe;
\item $A$, $B$, $C$, $D$ are points ;
\item $M'$ is the image of $M$ by a transformation ;
\end{compactitem}

At last, although these are nodes in \PST, I treat them
intentionally as points.

\section{Basic Objects}
\subsection{Points}
%\subsubsection{default axes}

%\defcom[Creates a list of points using the common axis. \protect\ParamList{\param{PointName},
%  \param{PointNameSep}, \param{PosAngle}, \param{PointSymbol}, \param{PtNameMath}}]
\begin{BDef}
\Lcs{pstGeonode}\OptArgs\coord1\Largb{$A_1$}\coord2\Largb{$A_1$}\ldots\cAny\Largb{$A_n$}
\end{BDef}
This command defines one or more geometrical points associated with a node in the default cartesian coordinate system. Each
point has a node name $A_i$ which defines the default label put on the
picture. This label is managed by default in mathematical mode, the boolean parameter
\Lkeyword{PtNameMath} (default \true) can modify this behavior and let manage the
label in normal mode.  It is placed at a distance of \Lkeyword{PointNameSep}
(default 1em) of the center of the node with a angle of
\Lkeyword{PosAngle} (default 0). It is possible to specify another label using the
parameter \Lkeyset{PointName=default}, and an empty label can be specified
by selecting the value \Lkeyval{none}, in that case the point will have no name on the
picture.

The point symbol is given by the parameter \Lkeyset{PointSymbol=*}.  The
symbol is the same as used by the macro \Lcs{psdot}.  This parameter can be set to
\texttt{none}, which means that the point will not be drawn on the picture.

Here are the possible values for this parameter:

\begin{multicols}{3}
  \begin{compactitem}\psset{dotscale=2}
  \item \Lkeyword{*}: \psdots(.5ex,.5ex)
  \item \Lkeyword{o}: \psdots[dotstyle=o](.5ex,.5ex)
  \item \Lkeyword{+}: \psdots[dotstyle=+](.5ex,.5ex)
  \item \Lkeyword{x}: \psdots[dotstyle=x](.5ex,.5ex)
  \item \Lkeyword{asterisk} : \psdots[dotstyle=asterisk](.5ex,.5ex)
  \item \Lkeyword{oplus}: \psdots[dotstyle=oplus](.5ex,.5ex)
  \item \Lkeyword{otimes}: \psdots[dotstyle=otimes](.5ex,.5ex)
  \item \Lkeyword{triangle}: \psdots[dotstyle=triangle](.5ex,.5ex)
  \item \Lkeyword{triangle*}: \psdots[dotstyle=triangle*](.5ex,.5ex)
  \item \Lkeyword{square}: \psdots[dotstyle=square](.5ex,.5ex)
  \item \Lkeyword{square*}: \psdots[dotstyle=square*](.5ex,.5ex)
  \item \Lkeyword{diamond}: \psdots[dotstyle=diamond](.5ex,.5ex)
  \item \Lkeyword{diamond*}: \psdots[dotstyle=diamond*](.5ex,.5ex)
  \item \Lkeyword{pentagon}: \psdots[dotstyle=pentagon](.5ex,.5ex)
  \item \Lkeyword{pentagon*}: \psdots[dotstyle=pentagon*](.5ex,.5ex)
  \item \Lkeyword{|}: \psdots[dotstyle=|](.5ex,.5ex)
  \end{compactitem}
\end{multicols}

Furthermore, these symbols can be controlled with some others \PST,
several of these are :

\begin{compactitem}
\item their scale with \Lkeyword{dotscale}, the value of whom is either two numbers
  defining the horizontal and vertical scale factor, or one single value being the
  same for both,
\item their angle with parameter \Lkeyword{dotangle}.
\end{compactitem}

Please consult the \PST\ documentation for further details.
The
parameters \Lkeyword{PosAngle}, \Lkeyword{PointSymbol}, \Lkeyword{PointName} and
\Lkeyword{PointNameSep} can be set to :

\begin{compactitem}
\item either a single value, the same for all points ;
\item or a list of values delimited by accolads \texttt{\{ ... \}} and
  separated with comma \textit{without any blanks}, allowing to differenciate the
  value for each point.
\end{compactitem}

In the later case, the list can have less values than point which means that the
last value is used for all the remaining points.
%
At least, the parameter setting \Lkeyword{CurveType=none} can be used to
draw a line between the points:

\begin{compactitem}
\item opened \verb$polyline$ ;
\item closed \verb$polygon$ ;
\item open and curved \verb$curve$.
\end{compactitem}

\begin{LTXexample}[width=5cm,pos=l]
\begin{pspicture}[showgrid=true](-2,-2)(3,3)
\pstGeonode{A}
\pstGeonode[PosAngle=-135, PointNameSep=1.3](0,3){B_1}
\pstGeonode[PointSymbol=pentagon, dotscale=2, fillstyle=solid,
            fillcolor=OliveGreen, PtNameMath=false,
            PointName=$B_2$, linecolor=red](-2,1){B2}
\pstGeonode[PosAngle={90,0,-90}, PointSymbol={*,o},
            linestyle=dashed, CurveType=polygon,
            PointNameSep={1em,2em,3mm}]
  (1,2){M_1}(2,1){M_2}(1,0){M_3}
\pstGeonode[PosAngle={50,100,90}, PointSymbol={*,x,*},
            PointNameSep=3mm, CurveType=curve,
            PointName={\alpha,\beta,\gamma,default}]
  (-2,0){alpha}(-1,-2){beta}(0,-1){gamma}(2,-1.5){T}
\end{pspicture}
\end{LTXexample}

Obviously, the nodes appearing in the picture can be used as normal
\PST\ nodes. Thus, it is possible to reference a point from
\rnode{ici}{here}.
\nccurve[arrowscale=2]{->}{ici}{B_1}

%\subsubsection{User defined axes}

\Lcs{pstOIJGeonode} creates a list of points in the landmark $(O;I;J)$. Possible 
parameters are \Lkeyword{PointName}, \Lkeyword{PointNameSep}, \Lkeyword{PosAngle},
        \Lkeyword{PointSymbol}, and \Lkeyword{PtNameMath}.
\begin{BDef}
\Lcs{pstOIJGeonode}\OptArgs\coord1\Largb{$A_1$}\Largb{$O$}\Largb{$I$}\Largb{$J$}
    \coord2\Largb{$A_2$}\ldots\cAny\Largb{$A_n$}
\end{BDef}

\clearpage


\begin{LTXexample}[width=5.6cm,pos=l]
\psset{unit=.7}
\begin{pspicture*}[showgrid=true](-4,-4)(4,4)
  \pstGeonode[PosAngle={-135,-90,180}]{O}(1,0.5){I}(0.5,2){J}
  \pstLineAB[nodesep=10]{O}{I}
  \pstLineAB[nodesep=10]{O}{J}
  \multips(-5,-2.5)(1,0.5){11}{\psline(0,-.15)(0,.15)}
  \multips(-2,-8)(0.5,2){9}{\psline(-.15,0)(.15,0)}
  \psset{linestyle=dotted}%
  \multips(-5,-2.5)(1,0.5){11}{\psline(-10,-40)(10,40)}
  \multips(-2,-8)(0.5,2){9}{\psline(-10,-5)(10,5)}
  \psset{PointSymbol=x, linestyle=solid}
  \pstOIJGeonode[PosAngle={-90,0}, CurveType=curve,
    linecolor=red] (3,1){A}{O}{I}{J}(-2,1){B}(-1,-1.5){C}(2,-1){D}
\end{pspicture*}
\end{LTXexample}


\subsection{Segment mark}

A segment can be drawn using the \Lcs{ncline} command. However,
for marking a segment there is the following command:

\begin{BDef}
\Lcs{pstMarkSegment}\OptArgs\Largb{A}\Largb{B}
\end{BDef}




The symbol drawn on the segment is given by the parameter
\Lkeyword{SegmentSymbol}. Its value can be any valid command which can be
used in math mode. Its default value is \Lkeyval{pstslashh},
which produced two slashes on the segment. The segment is drawn.

Several commands are predefined for marking the segment:

\begingroup
\psset{PointSymbol=none,PointName=none,unit=.8}
  \newcommand\Seg[1]{%
    \Lcs{#1} \begin{pspicture}[shift=*](1.75,1)
                 \pstGeonode(0.3,.5){A}(1.7,.5){B}\pstSegmentMark[SegmentSymbol=#1]{A}{B}
               \end{pspicture}}%
\begin{multicols}{3}
  \begin{compactitem}
  \item \Seg{pstslash}
  \item \Seg{pstslashh}
  \item \Seg{pstslashhh}
  \item \Seg{MarkHash}
  \item \Seg{MarkHashh}
  \item \Seg{MarkHashhh}
  \item \Seg{MarkCros}
  \item \Seg{MarkCross}
  \item \Seg{MarkArrow}
  \item \Seg{MarkArroww}
  \item \Seg{MarkArrowww}
  \end{compactitem}
\end{multicols}
\endgroup

The three commands of the family \nxLcs{MarkHash} draw a line whose inclination is
controled by the parameter \Lkeyword{MarkAngle} (default is 45). Their width and colour
depends of the width and color of the line when the drawing is done, ass shown is the
next example.



\begin{LTXexample}[width=5cm,pos=l]
\begin{pspicture}[showgrid=true](-2,-2)(2,2)
  \rput{18}{%
    \pstGeonode[PosAngle={0,90,180,-90}](2,0){A}(2;72){B}
      (2;144){C}(2;216){D}(2;288){E}} 
  \pstSegmentMark{A}{B}
  \pstSegmentMark[linecolor=green]{B}{C}
  \psset{linewidth=2\pslinewidth}
  \pstSegmentMark[linewidth=2\pslinewidth]{C}{D}
  \pstSegmentMark{D}{E}
  \pstSegmentMark{E}{A}
\end{pspicture}
\end{LTXexample}


The length and the separation of multiple hases can be set by \Lkeyword{MarkHashLength} and \Lkeyword{MarkHashSep}.



\subsection{Triangles}

The more classical figure, it has its own macro for a quick definition:

\begin{BDef}
\Lcs{pstTriangle}\OptArgs\coord1\Largb{A}\coord2\Largb{B}\coord3\Largb{C}
\end{BDef}


\begin{sloppypar}
Valid optional arguments are \Lkeyword{PointName},
  \Lkeyword{PointNameSep}, \Lkeyword{PosAngle}, \Lkeyword{PointSymbol}, \Lkeyword{PointNameA},
  \Lkeyword{PosAngleA}, \Lkeyword{PointSymbolA}, \Lkeyword{PointNameB},
  \Lkeyword{PosAngleB}, \Lkeyword{PointSymbolB}, \Lkeyword{PointNameC},
  \Lkeyword{PosAngleC}, and \Lkeyword{PointSymbolC}.
%  $(x_A;y_A)$\Arg{$A$}$(x_B;y_B)$\Arg{$B$}$(x_C;y_C)$\Arg{$C$}}
%
In order to accurately put the name of the points, there are three parameters
\Lkeyword{PosAngleA}, \Lkeyword{PosAngleB} and \Lkeyword{PosAngleC}, which are associated
respectively to the nodes \Argsans{$A$}, \Argsans{$B$} and \Argsans{$C$}. Obviously
they have the same meaning as the parameter \Lkeyword{PosAngle}. If one or more of such
parameters is omitted, the value of \Lkeyword{PosAngle} is taken.  If no angle
is specified, points name are placed on the bissector line.
\end{sloppypar}

In the same way there are parameters for controlling the symbol used
for each points: \Lkeyword{PointSymbolA}, \Lkeyword{PointSymbolB} and
\Lkeyword{PointSymbolC}. They are equivalent to the parameter
\Lkeyword{PointSymbol}. The management of the default value followed the
same rule.

\begin{LTXexample}[width=5cm,pos=l]
\begin{pspicture}[showgrid](-2,-2)(2,2)
\pstTriangle[PointSymbol=square,PointSymbolC=o,
  linecolor=blue,linewidth=1.5\pslinewidth]
  (1.5,-1){A}(0,1){B}(-1,-.5){C}
\end{pspicture}
\end{LTXexample}


\subsection{Angles}

Each angle is defined with three points. The vertex is the second
point. Their order is important because it is assumed that the angle is
specified in the direct order. The first command is the marking of a
right angle:


\begin{BDef}
\Lcs{pstRightAngle}\OptArgs\Largb{A}\Largb{B}\Largb{C}
\end{BDef}


\begin{sloppypar}
Valid optional arguments are \Lkeyword{RightAngleType}, \Lkeyword{RightAngleSize}, and
        \Lkeyword{RightAngleSize}
\end{sloppypar}

The symbol used is controlled by the parameter \Lkeyword{RightAngleType}
\nxLkeyval{default}. Its possible values are :

\begin{compactitem}
\item \Lkeyval{*} : standard symbol ;
\item \Lkeyval{german} : german symbol (given by U. Dirr) ;
\item \Lkeyval{suisseromand} : swiss romand symbol (given P. Schnewlin).
\end{compactitem}

The only parameter controlling this command, excepting the ones which
controlled the line, is \Lkeyword{RightAngleSize} which defines the size
of the symbol \DefaultVal{0.28 unit}.

For other angles, there is the command:

\begin{BDef}
\Lcs{pstMarkAngle}\OptArgs\Largb{A}\Largb{B}\Largb{C}
\end{BDef}


\begin{sloppypar}
Valid optional arguments are \Lkeyword{MarkAngleRadius}, \Lkeyword{LabelAngleOffset}, and
  \Lkeyword{Mark}
%
The \Lkeyword{label} can be any valid \TeX\ box, it is put at \Lkeyword{LabelSep}
\DefaultVal{1 unit} of the node in the direction of the bisector of the angle
modified by \Lkeyword{LabelAngleOffset}\DefaultVal{0} and positioned using
\Lkeyword{LabelRefPt} \DefaultVal{c}. Furthermore the arc used for marking has a radius
of \Lkeyword{MarkAngleRadius} \DefaultVal{.4~unit}.  At least, it is possible to place
an arrow using the parameter \Lkeyword{arrows}.Finally, it is possible to mark
the angle by specifying a \TeX{} command as argument of parameter \Lkeyword{Mark}.
\end{sloppypar}

\begin{LTXexample}[width=5cm,pos=l]
\begin{pspicture}[showgrid](-2,-2)(2,2)
\psset{PointSymbol=none}
\pstTriangle(2;15){A}(2;85){B}(2;195){C}
\psset{PointName=none}
\pstTriangle[PointNameA=default](2;-130){B'}(2;15){A'}(2;195){C'}
\pstTriangle[PointNameA=default](2;-55){B''}(2;15){A''}(2;195){C''}
\pstRightAngle[linecolor=red]{C}{B}{A}
\pstRightAngle[linecolor=blue, RightAngleType=suisseromand]{A}{B'}{C}
\pstRightAngle[linecolor=magenta, RightAngleType=german]{A}{B''}{C}
\psset{arcsep=\pslinewidth}
\pstMarkAngle[linecolor=cyan, Mark=MarkHash]{A}{C}{B}{$\theta$}
\pstMarkAngle[linecolor=red, arrows=->]{B}{A}{C}{$\gamma$}
\end{pspicture}
\end{LTXexample}


\begin{LTXexample}[width=\linewidth,pos=t]
\begin{pspicture}(-0.5,-0.5)(9,3)
\psset{PointSymbol=none,PointNameMathSize=\scriptstyle,PointNameSep=6pt,
	 RightAngleSize=0.15,PosAngle={135,225,-45,45}}
\psaxes[ticks=none,labels=none] {->}(0,0)(9,3)
\pstGeonode(1,2){A}(1,1){B}(2,1){C}(2,2){D}%
\pstRightAngle{C}{B}{A} \pstRightAngle{D}{C}{B} 
\pstRightAngle{A}{D}{C} \pstRightAngle{B}{A}{D} 
\pspolygon(A)(B)(C)(D)
\psset{RightAngleType=suisseromand}
\pstGeonode(3,2){A}(3,1){B}(4,1){C}(4,2){D}%
\pstRightAngle{C}{B}{A} \pstRightAngle{D}{C}{B} 
\pstRightAngle{A}{D}{C} \pstRightAngle{B}{A}{D} 
\pspolygon(A)(B)(C)(D)
\psset{RightAngleType=german}
\pstGeonode(5,2){A}(5,1){B}(6,1){C}(6,2){D}%
\pstRightAngle{C}{B}{A} \pstRightAngle{D}{C}{B} 
\pstRightAngle{A}{D}{C} \pstRightAngle{B}{A}{D} 
\pspolygon(A)(B)(C)(D)
\end{pspicture}
\end{LTXexample}




\subsection{Lines, half-lines and segments}

The classical line  $(\overline{AB})$!

\begin{BDef}
\Lcs{pstLineAB}\OptArgs\Largb{A}\Largb{B}
\end{BDef}

In order to control its length\footnote{which is the comble for a
line!}, the two parameters \Lkeyword{nodesepA} et \Lkeyword{nodesepB}
specify the abscissa of the extremity of the drawing part of the line.
A negative abscissa specify an outside point, while a positive
abscissa specify an internal point. If these parameters have to be
equal, \Lkeyword{nodesep} can be used instead. The default value of these
parameters is equal to 0.

\begin{LTXexample}[width=5cm,pos=l]
\begin{pspicture}[showgrid](-2,-2)(2,2)
\pstGeonode(1,1){A}(-1,-1){B}
\pstLineAB[nodesepA=-.4,nodesepB=-1, 
           linecolor=green]{A}{B}
\pstLineAB[nodesep=.4,linecolor=red]{A}{B}
\end{pspicture}
\end{LTXexample}





  \subsection{Circles}

A circle can be defined either with its center and a point of its
circumference, or with two diameterly opposed points. There is two
commands :


\begin{BDef}
\Lcs{pstCircleOA}\OptArgs\Largb{O}\Largb{A}\\
\Lcs{pstCircleAB}\OptArgs\Largb{O}\Largb{A}\\
\Lcs{pstDistAB}\OptArgs\Largb{A}\Largb{B}\\
\Lcs{pstDistVal}\OptArgs\Largb{x}
\end{BDef}

%\Lcs{pstCircleOA} draws the circle of center $O$ crossing $A$. Possible options are \Lkeyword{Radius} and
%  \Lkeyword{Diameter}. 
  
%\Lcs{pstCircleAB} draws the circle of diameter $AB$ with the same options.


For the first macro, it is possible to omit the second point and then
to specify a radius or a diameter using the parameters \Lkeyword{Radius}
and \Lkeyword{Diameter}. The values of these parameters must be specified
with one of the two following macros :

%\Lcs{pstDistAB} Specifies distance $AB$ for the parameters
%  \Lkeyword{Radius}, \Lkeyword{Diameter} and \Lkeyword{DistCoef}.
  
%\Lcs{pstDistVal} Specifies a numerical value for the parameters
%  \Lkeyword{Radius}, \Lkeyword{Diameter}, and \Lkeyword{DistCoef}.
  

The first specifies a distance between two points. The parameter
\Lkeyword{DistCoef} can be used to specify a coefficient to reduce or
enlarge this distance. To be taken into account this last parameter
must be specified before the distance. The second macro can be used to
specify an explicit numeric value.
%
We will see later how to draw the circle crossing three points.
%
  With this package, it becomes possible to draw:
  \begin{compactitem}
  \item {\color{red} the circle of center $A$ crossing $B$;}
  \item {\color{green} the circle of center $A$ whose radius is $AC$;}
  \item {\color{blue} the circle of center $A$ whose radius is $BC$;}
  \item {\color{Sepia} the circle of center $B$ whose radius is $AC$;}
  \item {\color{Aquamarine} the circle of center $B$ of diameter $AC$;}
  \item {\color{RoyalBlue} the circle whose diameter is $BC$.}
  \end{compactitem}

\enlargethispage{3\normalbaselineskip}

\bigskip
\begin{pspicture}[showgrid](-4,-3.3)(5,3)
\psset{linewidth=2\pslinewidth}
\pstGeonode[PosAngle={0,-135,90},PointSymbol={*,*,square}](1,0){A}(-2,-1){B}(0,1){C}
\pstCircleOA[linecolor=red]{A}{B}
\pstCircleOA[linecolor=green, DistCoef=2 3 div, Radius=\pstDistAB{A}{C}]{A}{}
\pstCircleOA[linecolor=blue, Radius=\pstDistAB{B}{C}]{A}{}
\pstCircleOA[linecolor=Sepia, Radius=\pstDistAB{A}{C}]{B}{}
\pstCircleOA[linecolor=Aquamarine, Diameter=\pstDistAB{A}{C}]{B}{}
\pstCircleAB[linecolor=RoyalBlue]{B}{C}
\end{pspicture}


\clearpage

\begin{lstlisting}
\begin{pspicture}[showgrid](-4,-4)(5,3)
\psset{linewidth=2\pslinewidth}
\pstGeonode[PosAngle={0,-135,90},PointSymbol={*,*,square}](1,0){A}(-2,-1){B}(0,1){C}
\pstCircleOA[linecolor=red]{A}{B}
\pstCircleOA[linecolor=green, DistCoef=2 3 div, Radius=\pstDistAB{A}{C}]{A}{}
\pstCircleOA[linecolor=blue, Radius=\pstDistAB{B}{C}]{A}{}
\pstCircleOA[linecolor=Sepia, Radius=\pstDistAB{A}{C}]{B}{}
\pstCircleOA[linecolor=Aquamarine, Diameter=\pstDistAB{A}{C}]{B}{}
\pstCircleAB[linecolor=RoyalBlue]{B}{C}
\end{pspicture}
\end{lstlisting}


  \subsection{Circle arcs}



\begin{BDef}
\Lcs{pstArcOAB}\OptArgs\Largb{O}\Largb{A}\Largb{B}\\
\Lcs{pstArcnOAB}\OptArgs\Largb{O}\Largb{A}\Largb{B}
\end{BDef}


These two macros draw circle arcs, $O$ is the center, the radius
defined by $OA$, the beginning angle given by $A$ and the final angle
by $B$. Finally, the first macro draws the arc in the direct way,
whereas the second in the indirect way. It is not necessary that the
two points are at the same distance of $O$.

\begin{LTXexample}[width=5cm,pos=l]
\begin{pspicture}[showgrid](-2,-2)(2,2)
\pstGeonode[PosAngle={180,0}](1.5;24){A}(1.8;-31){B}
\pstGeonode{O}
\psset{arrows=->,arrowscale=2}
\pstArcOAB[linecolor=red,linewidth=1pt]{O}{A}{B}
\pstArcOAB[linecolor=blue,linewidth=1pt]{O}{B}{A}
\pstArcnOAB[linecolor=green]{O}{A}{B}
\pstArcnOAB[linecolor=magenta]{O}{B}{A}
\end{pspicture}
\end{LTXexample}

\subsection{Curved abscissa}

A point can be positioned on a circle using its curved abscissa.




\begin{BDef}
\Lcs{pstCurvAbsNode}\OptArgs\Largb{O}\Largb{A}\Largb{B}\Largb{Abs}
\end{BDef}

\begin{sloppypar}
Possible optional arguments are \Lkeyword{PointSymbol}, \Lkeyword{PosAngle},
  \Lkeyword{PointName}, \Lkeyword{PointNameSep}, \Lkeyword{PtNameMath}, and \Lkeyword{CurvAbsNeg}.
%
The point \Argsans{$B$} is positioned on the circle of center
\Argsans{$O$} crossing \Argsans{$A$}, with the curved abscissa
\Argsans{Abs}. The origin is \Argsans{$A$} and the direction is
anti-clockwise by default. The parameter \Lkeyword{CurvAbsNeg}
\DefaultVal{false} can change this behavior.
\end{sloppypar}

If the parameter \Lkeyword{PosAngle} is not specified, the point label is put
automatically in oirder to be alined with the circle center and the point.

\begin{LTXexample}[width=5cm,pos=l]
\begin{pspicture}[showgrid](-2.5,-2.5)(2.5,2.5)
\pstGeonode{O}(2,0){A}
\pstCircleOA{O}{A}
\pstCurvAbsNode{O}{A}{M_1}{\pstDistVal{5}}
\pstCurvAbsNode[CurvAbsNeg=true]%
  {O}{A}{M_2}{\pstDistAB{A}{M_1}}
\end{pspicture}
\end{LTXexample}

\subsection{Generic curve}

It is possible to generate a set of points using a loop, and to give
them a generic name defined by a radical and a number. The following
command can draw a interpolated curve crossing all such kind of
points.

\begin{BDef}
\Lcs{pstGenericCurve}\OptArgs\Largb{Radical}\Largb{$n_1$}\Largb{$n_2$}
\end{BDef}

\begin{sloppypar}
Possible optional arguments are \Lkeyword{GenCurvFirst}, \Lkeyword{GenCurvInc}, and
  \Lkeyword{GenCurvLast}
The curve is drawn on the points whose name is defined using the
radical \Argsans{Radical} followed by a number from \Argsans{$n_1$} to
\Argsans{$n_2$}. In order to manage side effect, the parameters
\Lkeyword{GenCurvFirst} et \Lkeyword{GenCurvLast} can be used to specified
special first or last point. The parameter \Lkeyword{GenCurvInc} can be
used to modify the increment from a point to the next one
\DefaultVal{1}.
\end{sloppypar}


\begin{LTXexample}[width=5cm,pos=l]
\begin{pspicture}[showgrid](-2.5,-2.5)(2.5,1)
\psset{unit=.00625}
\pstGeonode{A}
\multido{\n=20+20}{18}{%
 \pstGeonode[PointName=M_{\n}](\n;\n){M_\n}}
\pstGenericCurve[GenCurvFirst=A,GenCurvInc=20,
 linecolor=blue,linewidth=.5\pslinewidth]{M_}{20}{360}
 \end{pspicture}
\end{LTXexample}

\section{Geometric Transformations}

The geometric transformations are the ideal tools to construct geometric figures. All
the classical transformations are available with the following macros  which
share the same syntaxic scheme end two parameters.

The common syntax put at the end two point lists whose second is optional or with a
cardinal at least equal. These two lists contain the antecedent points and their
respective images. In the case no image is given for some points the a  default name
is build appending a\verb$'$ to the antecedent name.

The first shared parameter is \Lkeyword{CodeFig} which draws the specific
constructions lines. Its default value is \Lkeyword{false}, and a
\Lkeyword{true} value activates this optional drawing.
The drawing is done using the line style \Lkeyword{CodeFigStyle}
\DefaultVal{dashed}, with the color \Lkeyword{CodeFigColor}
\DefaultVal{cyan}.

Their second shared parameter is \Lkeyword{CurveType} which controls the drawing of a
line crossing all images, and thus allow a quick description of a transformed figure.

\subsection{Central symmetry}

\begin{BDef}
\Lcs{pstSymO}\OptArgs\Largb{$O$}\Largb{$M_1, M_2, \cdots, M_n$}\OptArg{$M'_1, M'_2, \cdots, M'_p$}
\end{BDef}

\begin{sloppypar}
Possible optional arguments are 
  \Lkeyword{PointSymbol}, \Lkeyword{PosAngle},
  \Lkeyword{PointName}, \Lkeyword{PointNameSep}, \Lkeyword{PtNameMath},
  \Lkeyword{CodeFig}, \Lkeyword{CodeFigColor}, and \Lkeyword{CodeFigStyle}.
Draw the symmetric point in relation to point $O$. The classical
parameter of point creation are usable here, and also for all the
following functions.
\end{sloppypar}

\begin{LTXexample}[width=5cm,pos=l]
\begin{pspicture}[showgrid](-2,-2)(2,2)
\psset{CodeFig=true}
\pstGeonode[PosAngle={20,90,0}]{O}(-.6,1.5){A}(1.6,-.5){B}
\pstSymO[CodeFigColor=blue, 
  PosAngle={-90,180}]{O}{A, B}[C, D]
\pstLineAB{A}{B}\pstLineAB{C}{D}
\pstLineAB{A}{D}\pstLineAB{C}{B}
\end{pspicture}
\end{LTXexample}

\subsection{Orthogonal (or axial) symmetry}

\begin{BDef}
\Lcs{pstOrtSym}\OptArgs\Largb{$A$}\Largb{$B$}\Largb{$M_1, M_2, \cdots, M_n$}\OptArg{$M'_1, M'_2, \cdots, M'_p$}
\end{BDef}

\begin{sloppypar}
Possible optional arguments are 
\Lkeyword{PointSymbol}, \Lkeyword{PosAngle},
  \Lkeyword{PointName}, \Lkeyword{PointNameSep}, \Lkeyword{PtNameMath},
  \Lkeyword{CodeFig}, \Lkeyword{CodeFigColor}, and \Lkeyword{CodeFigStyle}.
%
Draws the symmetric point in relation to line $(AB)$.
\end{sloppypar}

\begin{LTXexample}[width=5cm,pos=l]
\psset{unit=0.6}
\begin{pspicture}[showgrid](0,-2)(8,7)
\pstTriangle(1,3){B}(5,5){C}(4,1){A}
\pstOrtSym{A}{B}{C}[D]
\psset{CodeFig=true}
\pstOrtSym[dash=2mm 2mm,CodeFigColor=red]%
  {C}{B}{A}
\pstOrtSym[SegmentSymbol=pstslash,
  linestyle=dotted,dotsep=3mm,CodeFigColor=blue]%
  {C}{A}{B}
\end{pspicture}
\end{LTXexample}


\subsection{Rotation}


\begin{BDef}
\Lcs{pstRotation}\OptArgs\Largb{$O$}\Largb{$M_1, M_2, \cdots, M_n$}\OptArg{$M'_1, M'_2, \cdots, M'_p$}\\
\Lcs{pstAngleAOB}\Largb{$A$}\Largb{$O$}\Largb{$B$}
\end{BDef}

\begin{sloppypar}
Possible optional arguments are 
  \Lkeyword{PointSymbol}, \Lkeyword{PosAngle},
  \Lkeyword{PointName}, \Lkeyword{PointNameSep}, \Lkeyword{PtNameMath}, and \Lkeyword{RotAngle}
for \Lcs{pstRotation} and \Lkeyword{AngleCoef}, \Lkeyword{RotAngle} for \Lcs{pstAngleABC}.
%
Draw the image of $M_i$ by the rotation of center $O$ and angle given by
the parameter \Lkeyword{RotAngle}. This later can be an angle specified
by three points. In such a case, the following function must be used:
\end{sloppypar}



Never forget to use the rotation for drawing a square or an equilateral
triangle. The parameter \Lkeyword{CodeFig} puts a bow with an arrow between the
point and its image, and if \Lkeyword{TransformLabel} \DefaultVal{none}
contain some text, it is put on the corresponding angle in mathematical mode.

\begin{LTXexample}[width=5cm,pos=l]
\begin{pspicture}[showgrid](-2,-2)(2,2)
\psset{arrowscale=2}
\pstGeonode[PosAngle=-135](-1.5,-.2){A}%
  (.5,.2){B}(0,-2){D}
\pstRotation[PosAngle=90,RotAngle=60,
  CodeFig,CodeFigColor=blue,
  TransformLabel=\frac{\pi}{3}]{A}{B}[C]
\pstRotation[AngleCoef=.5, 
  RotAngle=\pstAngleAOB{B}{A}{C},
  CodeFigColor=red, CodeFig,
  TransformLabel=\frac{1}{2}\widehat{BAC}]{A}{D}[E]
\end{pspicture}
\end{LTXexample}
             

 \subsection{Translation}

\begin{BDef}
\Lcs{pstTranslation}\OptArgs\Largb{$A$}\Largb{$B$}\Largb{$M_1, M_2, \cdots, M_n$}\OptArg{$M'_1, M'_2, \cdots, M'_p$}
\end{BDef}

\begin{sloppypar}
Possible optional arguments are 
\Lkeyword{PointSymbol}, \Lkeyword{PosAngle},
  \Lkeyword{PointName}, \Lkeyword{PointNameSep}, \Lkeyword{PtNameMath}, and \Lkeyword{DistCoef}
%
Draws the translated $M'_i$ of $M_i$ using the vector $\vec{AB}$. Useful for drawing a
parallel line.
\end{sloppypar}

The parameter \Lkeyword{DistCoef} can be used as a multiplicand
coefficient to modify the translation vector. The parameter \Lkeyword{CodeFig}
draws the translation vector le vecteur de translation between the
point and its image, labeled in its middle defaultly with the vector name or by the
text specified with \Lkeyword{TransformLabel} \DefaultVal{none}.

\begin{LTXexample}[width=5cm,pos=l]
\begin{pspicture}[showgrid](-2,-2)(2,2)
\psset{linecolor=green,nodesep=-1,
  PosAngle=90,arrowscale=2}
\pstGeonode(-1.5,-1.2){A}(.5,-.8){B}(.5,1){C}(-1,0){D}(-2,-2){E}
\pstTranslation{B}{A}{C}
\psset{CodeFig,TransformLabel=default}
\pstTranslation{A}{B}{D}
\pstTranslation[DistCoef=1.5]{A}{B}{E}
\pstLineAB{A}{B}\pstLineAB{C}{C'}
\end{pspicture}
\end{LTXexample}



\subsection{Homothetie}


\begin{BDef}
\Lcs{pstHomO}\OptArgs\Largb{$O$}\Largb{$M_1, M_2, \cdots, M_n$}\OptArg{$M'_1, M'_2, \cdots, M'_p$}
\end{BDef}

\begin{sloppypar}
Possible optional arguments are 
\Lkeyword{HomCoef},
  \Lkeyword{PointSymbol}, \Lkeyword{PosAngle},
  \Lkeyword{PointName}, \Lkeyword{PointNameSep}, \Lkeyword{PtNameMath}, and \Lkeyword{HomCoef}.
%
Draws $M'_i$ the image of $M_i$ by the homotethy of center $O$ and
coefficient specified with the parameter \Lkeyword{HomCoef}.
\end{sloppypar}

\begin{LTXexample}[width=5cm,pos=l]
\begin{pspicture}[showgrid](-2,-2)(2,2)
\pstGeonode[PosAngle={0,-45}](.5,1){O}%
       (-1.5,-1.2){A}(.5,-.8){B}
\pstHomO[HomCoef=.62,PosAngle=-45]{O}{A,B}[C,D]
\psset{linecolor=green,nodesep=-1}
\pstLineAB{A}{O}\pstLineAB{B}{O}
\psset{linecolor=red,nodesep=-.5}
\pstLineAB{A}{B}\pstLineAB{C}{D}
\end{pspicture}
\end{LTXexample}


\subsection{Orthogonal projection}


\begin{BDef}
\Lcs{pstProjection}\OptArgs\Largb{$A$}\Largb{$B$}\Largb{$M_1, M_2, \cdots, M_n$}\OptArg{$M'_1, M'_2, \cdots, M'_p$}
\end{BDef}

\begin{sloppypar}
Possible optional arguments are 
  \Lkeyword{PointSymbol}, \Lkeyword{PosAngle},
  \Lkeyword{PointName}, \Lkeyword{PointNameSep}, \Lkeyword{PtNameMath},
  \Lkeyword{CodeFig}, \Lkeyword{CodeFigColor}, and\Lkeyword{CodeFigStyle}
%
Projects orthogonally the point $M_i$ on the line $(AB)$. Useful for the altitude of a
triangle. The name is aligned with the point and the projected point as
shown in the exemple.
\end{sloppypar}

\begin{LTXexample}[width=5cm,pos=l]
\begin{pspicture}[showgrid](-3,-2)(2,2)
\psset{PointSymbol=none,CodeFig,CodeFigColor=red}
\pstTriangle(1,1){A}(-2,1){C}(-1,-1){B}
\pstProjection{A}{B}{C}[I]
\pstProjection{A}{C}{B}[J]
\pstProjection{C}{B}{A}[K]
\end{pspicture}
\end{LTXexample}

\section{Special object}

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  \subsection{Midpoint}



\begin{BDef}
\Lcs{pstMiddleAB}\OptArgs\Largb{$A$}\Largb{$B$}\Largb{$I$}
\end{BDef}

\begin{sloppypar}
\Lkeyword{PointSymbol}, \Lkeyword{PosAngle},
  \Lkeyword{PointName}, \Lkeyword{PointNameSep}, \Lkeyword{PtNameMath}, \Lkeyword{SegmentSymbol},
  \Lkeyword{CodeFig}, \Lkeyword{CodeFigColor}, and \Lkeyword{CodeFigStyle}
%
Draw the midpoint $I$ of segment $[AB]$. By default, the point name is
automatically put below the segment.
\end{sloppypar}

\begin{LTXexample}[width=5cm,pos=l]
\begin{pspicture}[showgrid](-3,-2)(2,2)
\pstTriangle[PointSymbol=none]%
  (1,1){A}(-1,-1){B}(-2,1){C}
\pstMiddleAB{A}{B}{C'}
\pstMiddleAB{C}{A}{B'}
\pstMiddleAB{B}{C}{A'}
\end{pspicture}
\end{LTXexample}


  \subsection{Triangle center of gravity}


\begin{BDef}
\Lcs{pstCGravABC}\OptArgs\Largb{$A$}\Largb{$B$}\Largb{$C$}\Largb{$G$}
\end{BDef}

\begin{sloppypar}
Possible optional arguments are 
\Lkeyword{PointName}, \Lkeyword{PointNameSep}, \Lkeyword{PosAngle},
        \Lkeyword{PointSymbol}, and \Lkeyword{PtNameMath}
%
Draw the $ABC$ triangle centre of gravity $G$.
\end{sloppypar}

\begin{LTXexample}[width=5cm,pos=l]
\begin{pspicture}[showgrid](-3,-2)(2,2)
\pstTriangle[PointSymbol=none]%
  (1,1){A}(-1,-1){B}(-2,1){C}
\pstCGravABC{A}{B}{C}{G}
\end{pspicture}
\end{LTXexample}


  \subsection{Centre of the circumcircle of a triangle}



\begin{BDef}
\Lcs{pstCircleABC}\OptArgs\Largb{$A$}\Largb{$B$}\Largb{$C$}\Largb{$O$}
\end{BDef}

\begin{sloppypar}
Possible optional arguments are 
\Lkeyword{PointName}, \Lkeyword{PointNameSep}, \Lkeyword{PosAngle},
        \Lkeyword{PointSymbol}, \Lkeyword{PtNameMath}, \Lkeyword{DrawCirABC}, \Lkeyword{CodeFig},
        \Lkeyword{CodeFigColor}, \Lkeyword{CodeFigStyle}, \Lkeyword{SegmentSymbolA},
        \Lkeyword{SegmentSymbolB}, and \Lkeyword{SegmentSymbolC}.
% 
Draws the circle crossing three points (the circum circle) and put its center $O$.
The effective drawing is controlled by the boolean parameter \Lkeyword{DrawCirABC}
\DefaultVal{true}. Moreover the intermediate constructs (mediator lines) can
be drawn by setting the boolean parameter \Lkeyword{CodeFig}. In that case the middle
points are marked on the segemnts using three different marks given by the parameters
\Lkeyword{SegmentSymbolA}, \Lkeyword{SegmentSymbolB} et \Lkeyword{SegmentSymbolC}.
\end{sloppypar}

\begin{LTXexample}[width=6cm,pos=l]
\begin{pspicture}[showgrid](6,6)
\pstTriangle[PointSymbol=none]%
  (4,1){A}(1,3){B}(5,5){C}
\pstCircleABC[CodeFig,CodeFigColor=blue,
  linecolor=red,PointSymbol=none]{A}{B}{C}{O}
\end{pspicture}
\end{LTXexample}


  \subsection{Perpendicular bisector of a segment}

\begin{BDef}
\Lcs{pstMediatorAB}\OptArgs\Largb{$A$}\Largb{$B$}\Largb{$I$}\Largb{$M$}
\end{BDef}

\begin{sloppypar}
Possible optional arguments are 
\Lkeyword{PointName}, \Lkeyword{PointNameSep}, \Lkeyword{PosAngle},
        \Lkeyword{PointSymbol}, \Lkeyword{PtNameMath}, \Lkeyword{CodeFig},
        \Lkeyword{CodeFigColor}, \Lkeyword{CodeFigStyle}, and \Lkeyword{SegmentSymbol}.
%
The perpendicular bisector of a segment is a line perpendicular to
this segment in its midpoint. The segment is $[AB]$, the midpoint $I$,
and $M$ is a point belonging to the perpendicular bisector line. It is
build by a rotation of $B$ of 90 degrees around $I$. This mean
that the order of $A$ and $B$ is important, it controls the position
of $M$. The command creates the two points $M$ end $I$. The
construction is controlled by the following parameters:
\end{sloppypar}

\begin{compactitem}
\item \Lkeyword{CodeFig}, \Lkeyword{CodeFigColor} and \Lkeyword{SegmentSymbol}
  for marking the right angle ;
\item \Lkeyword{PointSymbol} et \Lkeyword{PointName} for controlling the
  drawing of the two points, each of them can be specified
  separately with the parameters \Lkeyword{...A} and \Lkeyword{...B} ;
\item parameters controlling the line drawing.
\end{compactitem}


\begin{LTXexample}[width=6cm,pos=l]
\begin{pspicture}[showgrid](6,6)
\pstTriangle[PointSymbol=none](3.5,1){A}(1,4){B}(5,4.2){C}
\psset{linecolor=red,CodeFigColor=red,nodesep=-1}
\pstMediatorAB[PointSymbolA=none]{A}{B}{I}{M_I}
\psset{PointSymbol=none,PointNameB=none}
\pstMediatorAB[CodeFig=true]{A}{C}{J}{M_J}
\pstMediatorAB[PosAngleA=45,linecolor=blue]
        {C}{B}{K}{M_K}
\end{pspicture}
\end{LTXexample}



  \subsection{Bisectors of angles}



\begin{BDef}
\Lcs{pstBissectBAC}\OptArgs\Largb{$B$}\Largb{$A$}\Largb{$C$}\Largb{$N$}\\
\Lcs{pstOutBissectBAC}\OptArgs\Largb{$B$}\Largb{$A$}\Largb{$C$}\Largb{$N$}
\end{BDef}

\begin{sloppypar}
Possible optional arguments are 
\Lkeyword{PointSymbol}, \Lkeyword{PosAngle},
  \Lkeyword{PointName}, \Lkeyword{PointNameSep}, and \Lkeyword{PtNameMath}.
%
There are two bisectors for a given geometric angle: the inside one and
the outside one; this is why there is two commands. The angle is
specified by three points specified in the trigonometric direction
(anti-clockwise). The result of the commands is the specific line and
a point belonging to this line. This point is built by a rotation of
point $B$.
\end{sloppypar}


\begin{LTXexample}[width=6cm,pos=l]
\begin{pspicture}[showgrid](6,6)
\psset{CurveType=polyline,linecolor=red}
\pstGeonode[PosAngle={180,-75,45}]%
  (1,4){B}(4,1){A}(5,4){C}
\pstBissectBAC[linecolor=blue]{C}{A}{B}{A'}
\pstOutBissectBAC[linecolor=green,PosAngle=180]%
  {C}{A}{B}{A''}
\end{pspicture}
\end{LTXexample}


\section{Intersections}

Points can be defined by intersections. Six intersection types  are
managed:

\begin{compactitem}
\item line-line;
\item line-circle;
\item circle-circle;
\item function-function;
\item function-line;
\item function-circle.
\end{compactitem}

An intersection can not exist: case of parallel lines. In such a case,
the point(s) are positioned at the origin. In fact, the user has to
manage the existence of these points.

  \subsection{Line-Line}



\begin{BDef}
\Lcs{pstInterLL}\OptArgs\Largb{$A$}\Largb{$B$}\Largb{$C$}\Largb{$D$}\Largb{$M$}
\end{BDef}

\begin{sloppypar}
Possible optional arguments are 
\Lkeyword{PointSymbol}, \Lkeyword{PosAngle},
  \Lkeyword{PointName}, \Lkeyword{PointNameSep}, and \Lkeyword{PtNameMath}.
%
Draw the intersection point between lines $(AB)$ and $(CD)$.
\end{sloppypar}

\begin{description}
\item[basique]


\begin{LTXexample}[width=6cm,pos=l]
\begin{pspicture}[showgrid](-1,-2)(4,3)
\pstGeonode(0,-1){A}(3,2){B}(3,0){C}(1,2){D}
\pstInterLL[PointSymbol=square]{A}{B}{C}{D}{E}
\psset{linecolor=blue, nodesep=-1}
\pstLineAB{A}{B}\pstLineAB{C}{D}
\end{pspicture}
\end{LTXexample}


\item[Horthocentre]

\begin{LTXexample}[width=6cm,pos=l]
\begin{pspicture}[showgrid](-2,-2)(3,3)
\psset{CodeFig,PointSymbol=none}
\pstTriangle[PosAngleA=180](-1,0){A}(3,-1){B}(3,2){C}
\pstProjection[PosAngle=-90]{B}{A}{C}
\pstProjection{B}{C}{A}
\pstProjection[PosAngle=90]{A}{C}{B}
\pstInterLL[PosAngle=135,PointSymbol=square]{A}{A'}{B}{B'}{H}
\end{pspicture}
\end{LTXexample}

\end{description}

  \subsection{Circle--Line}

\begin{BDef}
\Lcs{pstInterLC}\OptArgs\Largb{$A$}\Largb{$B$}\Largb{$O$}\Largb{$C$}\Largb{$M_1$}\Largb{$M_2$}
\end{BDef}

\begin{sloppypar}
Possible optional arguments are 
\Lkeyword{PointSymbol}, \Lkeyword{PosAngle},
        \Lkeyword{PointName}, \Lkeyword{PointNameSep}, \Lkeyword{PtNameMath},
        \Lkeyword{PointSymbolA}, \Lkeyword{PosAngleA}, \Lkeyword{PointNameA},
        \Lkeyword{PointSymbolB}, \Lkeyword{PosAngleB}, \Lkeyword{PointNameB}, 
        \Lkeyword{Radius}, and \Lkeyword{Diameter}.
%
Draw the one or two intersection point(s) between the line  $(AB)$ and
the circle of centre $O$ and with radius $OC$.
\end{sloppypar}

The circle is specified with its center and either a point of its
circumference or with a radius specified with parameter \Lkeyword{radius}
or its diameter specified with parameter \Lkeyword{Diameter}. These two
parameters can be modify by coefficient \Lkeyword{DistCoef}.


The position of the wo points is such that the vectors $\vec{AB}$ abd
$\vec{M_1M_2}$ are in the same direction. Thus, if the points
definig the line are switch, then the resulting points will be also
switched. If the intersection is void, then the points are positionned
at the center of the circle.


\begin{LTXexample}[width=6cm,pos=l]
\psset{unit=0.8}
\begin{pspicture}[showgrid](-3,-2)(4,4)
\pstGeonode[PosAngle={-135,80,0}](-1,0){B}(3,-1){C}(-.9,.5){O}(0,2){A}
\pstGeonode(-2,3){I}
\pstCircleOA[linecolor=red]{O}{A}
\pstInterLC[PosAngle=-80]{C}{B}{O}{A}{D}{E}
\pstInterLC[PosAngleB=60, Radius=\pstDistAB{O}{D}]{I}{C}{O}{}{F}{G}
\pstInterLC[PosAngleB=180,DistCoef=1.3,Diameter=\pstDistAB{O}{D}]
  {I}{B}{O}{}{H}{J}
\pstCircleOA[linecolor=red,DistCoef=1.3,Diameter=\pstDistAB{O}{D}]{O}{}
\psset{nodesep=-1}
\pstLineAB[linecolor=green]{E}{C}
\pstLineAB[linecolor=cyan]{I}{C}
\pstLineAB[linecolor=magenta]{J}{I}
\end{pspicture}
\end{LTXexample}



\subsection{Circle--Circle}

\begin{BDef}
\Lcs{pstInterCC}\OptArgs\Largb{$O_1$}\Largb{$B$}\Largb{$O_2$}\Largb{$C$}\Largb{$M_1$}\Largb{$M_2$}
\end{BDef}


This function is similar to the last one. The boolean parameters
\Lkeyword{CodeFigA} et \Lkeyword{CodeFigB} allow the drawing of the arcs
at the intersection. In order to get a coherence \Lkeyword{CodeFig} allow
the drawing of both arcs. The boolean parameters \Lkeyword{CodeFigAarc} and
\Lkeyword{CodeFigBarc} specified the direction of these optional arcs:
trigonometric (by default) or clockwise. Here is a first example.

\begin{LTXexample}[width=5cm,pos=l]
\begin{pspicture}[showgrid](0,-1)(4,3)
\psset{dash=2mm 2mm}
\rput{10}{%
  \pstGeonode[PosAngle={0,-90,-90,90}]
     (1,-1){O}(2,1){A}(2,0.1){B}(2.5,1){C}}
\pstCircleOA[linecolor=red]{C}{B}
\pstInterCC[PosAngleA=135, CodeFigA=true, CodeFigAarc=false,
  CodeFigColor=magenta]{O}{A}{C}{B}{D}{E}
\pstInterCC[PosAngleA=170, CodeFigA=true, 
   CodeFigAarc=false,
   CodeFigColor=green]{B}{E}{C}{B}{F}{G}
\end{pspicture}
\end{LTXexample}


And a more complete one, which includes the special circle
specification using radius and diameter. For such specifications it
exists the parameters \Lkeyword{RadiusA}, \Lkeyword{RadiusB},
\Lkeyword{DiameterA} and \Lkeyword{DiameterB}.

\begin{LTXexample}
\begin{pspicture}[showgrid](-3,-4)(7,3)
\pstGeonode[PointName={\Omega,O}](3,-1){Omega}(1,-1){O}
\pstGeonode[PointSymbol=square, PosAngle={-90,90}](0,3){A}(2,2){B}
\psset{PointSymbol=o}
\pstCircleOA[linecolor=red, DistCoef=1 3 10 div add, Radius=\pstDistAB{A}{B}]{O}{}
\pstCircleOA[linecolor=Orange, Diameter=\pstDistAB{A}{B}]{O}{}
\pstCircleOA[linecolor=Violet, Radius=\pstDistAB{A}{B}]{Omega}{}
\pstCircleOA[linecolor=Purple, Diameter=\pstDistAB{A}{B}]{Omega}{}
\pstInterCC[DistCoef=1 3 10 div add, RadiusA=\pstDistAB{A}{B},
            DistCoef=none, RadiusB=\pstDistAB{A}{B}]{O}{}{Omega}{}{D}{E}
\pstInterCC[DiameterA=\pstDistAB{A}{B}, RadiusB=\pstDistAB{A}{B}]{O}{}{Omega}{}{F}{G}
\pstInterCC[DistCoef=1 3 10 div add, RadiusA=\pstDistAB{A}{B},
            DistCoef=none, DiameterB=\pstDistAB{A}{B}]{O}{}{Omega}{}{H}{I}
\pstInterCC[DiameterA=\pstDistAB{A}{B}, DiameterB=\pstDistAB{A}{B}]{O}{}{Omega}{}{J}{K}
\end{pspicture}
\end{LTXexample}

  \subsection{Function--function}


\begin{BDef}
\Lcs{pstInterFF}\OptArgs\Largb{$f$}\Largb{$g$}\Largb{$x_0$}\Largb{$M$}
\end{BDef}

This function put a point at the intersection between two curves
defined by a function. $x_0$ is an intersection approximated value of
the abscissa. It is obviously possible to ise this function several
time if more than one intersection is present. Each function is
describerd in \PS in the same way as the description used by
the \Lcs{psplot} macro of \PST. A constant function can be
specified, and then seaching function root is possible.

The Newton algorithm is used for the research, and the intersection
may not to be found. In such a case the point is positionned at the
origin. On the other hand, the research can be trapped (in a local
extremum near zero).

\begin{LTXexample}[width=5cm,pos=l]
\begin{pspicture}[showgrid](-3,-1)(2,4)
\psaxes{->}(0,0)(-2,0)(2,4)
\psset{linewidth=1.5pt,algebraic}
\psplot[linecolor=gray]{-2}{2}{x^2}
\psplot{-2}{2}{2-x/2}
\psset{PointSymbol=o}
\pstInterFF{2-x/2}{x^2}{1}{M_1}
\pstInterFF{2-x/2}{x^2}{-2}{M_0}
\end{pspicture}
\end{LTXexample}

\subsection{Function--line}

\begin{BDef}
\Lcs{pstInterFL}\OptArgs\Largb{$f$}\Largb{$A$}\Largb{$B$}\Largb{$x_0$}\Largb{$M$}
\end{BDef}

Puts a point at the intersection between the function $f$ and the line
$(AB)$.

\begin{LTXexample}[width=6cm,pos=l]
\begin{pspicture}[showgrid](-3,-1.5)(3,4)
\def\F{x^3/3 - x + 2/3 }
\psaxes{->}(0,0)(-3,-1)(3,4)
\psplot[linewidth=1.5pt,algebraic]{-2.5}{2.5}{\F}
\psset{PointSymbol=*}
\pstGeonode[PosAngle={-45,0}](0,-.2){N}(2.5,1){M}
\pstLineAB[nodesepA=-3cm]{N}{M}
\psset{PointSymbol=o,algebraic}
\pstInterFL{\F}{N}{M}{2}{A}
\pstInterFL[PosAngle=90]{\F}{N}{M}{0}{A'}
\pstInterFL{\F}{N}{M}{-2}{A''}
\end{pspicture}
\end{LTXexample}


\vspace{1cm}
\subsection{Function--Circle}

\begin{BDef}
\Lcs{pstInterFC}\OptArgs\Largb{$f$}\Largb{$O$}\Largb{$A$}\Largb{$x_0$}\Largb{$M$}
\end{BDef}

Puts a point at the intersection between the function $f$ and the circle
of centre $O$ and radius $OA$.

\begin{LTXexample}[width=6cm,pos=l]
\begin{pspicture}[showgrid](-3,-4)(3,4)
\def\F{2*cos(x)}
\psset{algebraic}
\pstGeonode(0.3,-1){O}(2,.5){M}
\ncline[linecolor=blue, arrowscale=2]{->}{O}{M}
\psaxes{->}(0,0)(-3,-3)(3,4)
\psplot[linewidth=1.5pt]{-3.14}{3.14}{\F}
\pstCircleOA[PointSymbol=*]{O}{M}
\psset{PointSymbol=o}
\pstInterFC{\F}{O}{M}{1}{N0}
\pstInterFC{\F}{O}{M}{-1}{N1}
\pstInterFC{\F}{O}{M}{-2}{N2}
\pstInterFC{\F}{O}{M}{2}{N3}
\end{pspicture}
\end{LTXexample}



\section{Helper Macros}

\begin{BDef}
\Lcs{psGetDistanceAB}\OptArgs\coord1\coord2\Largb{<name>}\\
\Lcs{psGetAngleABC}\OptArgs\coord1\coord2\coord3\Largb{<symbol>}
\end{BDef}


Calculates and prints the values. This is only possible on PostScript level!


\begin{pspicture}[showgrid](-1,0)(11,8)
\def\sideC{6}  \def\sideA{7}  \def\sideB{8}
\psset{PointSymbol=none,linejoin=1,linewidth=0.4pt,PtNameMath=false,labelsep=0.07,MarkAngleRadius=1.1,decimals=1,comma}
\pstGeonode[PosAngle={90,90}](0,0){A}(\sideC;10){B}
\psset{PointName=}
\pstInterCC[RadiusA=\pstDistVal{\sideB},RadiusB=\pstDistVal{\sideA},PosAngle=-90,PointNameA=C]{A}{}{B}{}{C}{C-}
\pstInterCC[RadiusA=\pstDistAB{A}{B},RadiusB=\pstDistAB{B}{C}]{C}{}{A}{}{D-}{D}
\pstInterLC[Radius=\pstDistAB{A}{C}]{C}{D}{C}{}{A'-}{A'}
\pstInterCC[RadiusA=\pstDistAB{A}{B},RadiusB=\pstDistAB{B}{C}]{A'}{}{C}{}{B'}{B'-}
\pstInterLL[PosAngle=90,PointName=default]{B'}{C}{A}{B}{E}
\pspolygon(A)(B)(C)
\pspolygon[fillstyle=solid,fillcolor=magenta,opacity=0.1](C)(E)(B)
%
\psGetAngleABC[ArcColor=blue,AngleValue=true,LabelSep=0.7,arrows=->,decimals=0,PSfont=Palatino-Roman](B)(A)(C){}
\psGetAngleABC[AngleValue=true,ArcColor=red,arrows=->,WedgeOpacity=0.6,WedgeColor=yellow!30,LabelSep=0.5](C)(B)(A){$\beta$}
\psGetAngleABC[LabelSep=0.7,WedgeColor=green,xShift=-6,yShift=-10](A)(C)(B){$\gamma$}
\psGetAngleABC[LabelSep=0.7,AngleArc=false,WedgeColor=green,arrows=->,xShift=-15,yShift=0](C)(E)(B){\color{blue}$\gamma$}
\psGetAngleABC[AngleValue=true,MarkAngleRadius=1.0,LabelSep=0.5,ShowWedge=false,xShift=-5,yShift=7,arrows=->](E)(B)(C){}
%
\pcline[linestyle=none](A)(B)\nbput{\sideC}
\pcline[linestyle=none](C)(B)\naput{\sideA}
\psGetDistanceAB[xShift=-8,yShift=4](B)(E){MW}
\psGetDistanceAB[fontscale=15,xShift=4,decimals=0](A)(C){MAC}
\psGetDistanceAB[xShift=-17,decimals=2](E)(C){MEC}
\end{pspicture}





\begin{lstlisting}
\begin{pspicture}(-1,0)(11,8)
\psgrid[gridlabels=0pt,subgriddiv=2,gridwidth=0.4pt,subgridwidth=0.2pt,gridcolor=black!60,subgridcolor=black!40]
\def\sideC{6}  \def\sideA{7}  \def\sideB{8}
\psset{PointSymbol=none,linejoin=1,linewidth=0.4pt,PtNameMath=false,labelsep=0.07,MarkAngleRadius=1.1,decimals=1,comma}
\pstGeonode[PosAngle={90,90}](0,0){A}(\sideC;10){B}
%    \pstGeonode[PosAngle={225,-75}](0,0){A}(\sideC;10){B}
\psset{PointName=}
\pstInterCC[RadiusA=\pstDistVal{\sideB},RadiusB=\pstDistVal{\sideA},PosAngle=-90,PointNameA=C]{A}{}{B}{}{C}{C-}
\pstInterCC[RadiusA=\pstDistAB{A}{B},RadiusB=\pstDistAB{B}{C}]{C}{}{A}{}{D-}{D}
\pstInterLC[Radius=\pstDistAB{A}{C}]{C}{D}{C}{}{A'-}{A'}
\pstInterCC[RadiusA=\pstDistAB{A}{B},RadiusB=\pstDistAB{B}{C}]{A'}{}{C}{}{B'}{B'-}
\pstInterLL[PosAngle=90,PointName=default]{B'}{C}{A}{B}{E}
\pspolygon(A)(B)(C)
\pspolygon[fillstyle=solid,fillcolor=magenta,opacity=0.1](C)(E)(B)
%
\psGetAngleABC[ArcColor=blue,AngleValue=true,LabelSep=0.7,arrows=->,decimals=0,PSfont=Palatino-Roman](B)(A)(C){}
\psGetAngleABC[AngleValue=true,ArcColor=red,arrows=->,WedgeOpacity=0.6,WedgeColor=yellow!30,LabelSep=0.5](C)(B)(A){$\beta$}
\psGetAngleABC[LabelSep=0.7,WedgeColor=green,xShift=-6,yShift=-10](A)(C)(B){$\gamma$}
\psGetAngleABC[LabelSep=0.7,AngleArc=false,WedgeColor=green,arrows=->,xShift=-15,yShift=0](C)(E)(B){\color{blue}$\gamma$}
\psGetAngleABC[AngleValue=true,MarkAngleRadius=1.0,LabelSep=0.5,ShowWedge=false,xShift=-5,yShift=7,arrows=->](E)(B)(C){}
%
\pcline[linestyle=none](A)(B)\nbput{\sideC}
\pcline[linestyle=none](C)(B)\naput{\sideA}
\psGetDistanceAB[xShift=-8,yShift=4](B)(E){MW}
\psGetDistanceAB[fontscale=15,xShift=4,decimals=0](A)(C){MAC}
\psGetDistanceAB[xShift=-17,decimals=2](E)(C){MEC}
\end{pspicture}
\end{lstlisting}

\clearpage



\addtocontents{toc}{\protect\newpage}

\part{Examples gallery}
\appendix
\section{Basic geometry}

\subsection{Drawing of the bissector}

\begin{LTXexample}[width=5cm,pos=l]
\begin{pspicture}[showgrid](-1,-1)(4.4,5)
\psset{PointSymbol=none,PointName=none}
\pstGeonode[PosAngle={180,130,-90},PointSymbol={*,none},
  PointName=default](2,0){B}(0,1){O}(1,4){A}
\pstLineAB[nodesepB=-1,linecolor=red]{O}{A}
\pstLineAB[nodesepB=-1,linecolor=red]{O}{B}
\pstInterLC[PosAngleB=-45]{O}{B}{O}{A}{G}{C}
\psset{arcsepA=-1, arcsepB=-1}
\pstArcOAB[linecolor=green,linestyle=dashed]{O}{C}{A}
\pstInterCC[PosAngleA=100]{A}{O}{C}{O}{O'}{OO}
\pstArcOAB[linecolor=blue,linestyle=dashed]{A}{O'}{O'}
\pstArcOAB[linecolor=blue,linestyle=dashed]{C}{O'}{O'}
\pstLineAB[nodesepB=-1,linecolor=cyan]{O}{O'}
\psset{arcsep=1pt,linecolor=magenta,Mark=MarkHash}
\pstMarkAngle{C}{O}{O'}{}
\pstMarkAngle[MarkAngleRadius=.5]{O'}{O}{A}{}
\end{pspicture}
\end{LTXexample}


\newpage

\subsection{Transformation de polygones et courbes}

Here is an example of the use of \Lkeyword{CurveType} with transformation.

\begin{LTXexample}
\begin{pspicture}(-5,-5)(10,5)
\pstGeonode{O}
\rput(-3,0){\pstGeonode[CurveType=polygon](1,0){A}(1;51.43){B}(1;102.86){C}
  (1;154.29){D}(1;205.71){E}(1;257.14){F}(1;308.57){G}}
\rput(-4,-1){\pstGeonode[CurveType=curve](1,3){M}(4,5){N}(6,2){P}(8,5){Q}}
\pstRotation[linecolor=green, RotAngle=100, CurveType=polygon]{O}{A, B, C, D, E, F, G}
\pstHomO[linecolor=red, HomCoef=.3, CurveType=curve]{O}{M,N,P,Q}
\pstTranslation[linecolor=blue, CurveType=polygon]{C}{O}{A', B', C', D', E', F', G'}
\pstSymO[linecolor=yellow, CurveType=curve]{O}{M',N',P',Q'}
\pstOrtSym[linecolor=magenta, CurveType=polygon]{Q}{F''}
  {A', B', C', D', E', F', G'}[A''', B''', C''', D''', E''', F''', G''']
\end{pspicture}
\end{LTXexample}

\newpage


\subsection{Triangle lines}


\begin{LTXexample}
\psset{unit=2}
\begin{pspicture}(-3,-2)(3,3)
\psset{PointSymbol=none}
\pstTriangle[PointSymbol=none](-2,-1){A}(1,2){B}(2,0){C}
{ \psset{linestyle=none, PointNameB=none}
  \pstMediatorAB{A}{B}{K}{KP}
  \pstMediatorAB[PosAngleA=-40]{C}{A}{J}{JP}
  \pstMediatorAB[PosAngleA=75]{B}{C}{I}{IP}
}% fin
\pstInterLL[PointSymbol=square, PosAngle=-170]{I}{IP}{J}{JP}{O}
{% encapsulation de modif parametres
  \psset{nodesep=-.8, linecolor=green}
  \pstLineAB{O}{I}\pstLineAB{O}{J}\pstLineAB{O}{K}
}% fin
\pstCircleOA[linecolor=red]{O}{A}
% pour que le symbol de O soit sur et non sous les droites
\psdot[dotstyle=square](O)
% les hauteurs et l'orthocentre
\pstProjection{B}{A}{C}
\pstProjection{B}{C}{A}
\pstProjection{A}{C}{B}
\psset{linecolor=blue}\ncline{A}{A'}\ncline{C}{C'}\ncline{B}{B'}
\pstInterLL[PointSymbol=square]{A}{A'}{B}{B'}{H}
% les medianes et le centre de gravite
\psset{linecolor=magenta}\ncline{A}{I}\ncline{C}{K}\ncline{B}{J}
\pstCGravABC[PointSymbol=square, PosAngle=95]{A}{B}{C}{G}
\end{pspicture}
\end{LTXexample}


\newpage
\subsection{Euler circle}


\begin{LTXexample}
\psset{unit=2}
\begin{pspicture}(-3,-1.5)(3,2.5)
\psset{PointSymbol=none}
\pstTriangle(-2,-1){A}(1,2){B}(2,-1){C}
{% encapsulation de modif parametres
  \psset{linestyle=none, PointSymbolB=none, PointNameB=none}
  \pstMediatorAB{A}{B}{K}{KP}
  \pstMediatorAB{C}{A}{J}{JP}
  \pstMediatorAB{B}{C}{I}{IP}
}% fin
\pstInterLL[PointSymbol=square, PosAngle=-170]{I}{IP}{J}{JP}{O}
{% encapsulation de modif parametres
  \psset{nodesep=-.8, linecolor=green}
  \pstLineAB{O}{I}\pstLineAB{O}{J}\pstLineAB{O}{K}
}% fin
\psdot[dotstyle=square](O)
\pstProjection{B}{A}{C}
\pstProjection{B}{C}{A}
\pstProjection{A}{C}{B}
\psset{linecolor=blue}\ncline{A}{A'}\ncline{C}{C'}\ncline{B}{B'}
\pstInterLL[PointSymbol=square]{A}{A'}{B}{B'}{H}
% le cercle d'Euler (centre au milieu de [OH])
\pstMiddleAB[PointSymbol=o, PointName=\omega]{O}{H}{omega}
\pstCircleOA[linecolor=Orange, linestyle=dashed, dash=5mm 1mm]{omega}{B'}
\psset{PointName=none}
% il passe par le milieu des segments joignant l'orthocentre et les sommets
\pstMiddleAB{H}{A}{AH}\pstMiddleAB{H}{B}{BH}\pstMiddleAB{H}{C}{CH}
\pstSegmentMark{H}{AH}\pstSegmentMark{AH}{A}
\psset{SegmentSymbol=wedge}\pstSegmentMark{H}{BH}\pstSegmentMark{BH}{B}
\psset{SegmentSymbol=cup}\pstSegmentMark{H}{CH}\pstSegmentMark{CH}{C}
\end{pspicture}
\end{LTXexample}

\newpage
\subsection{Orthocenter and hyperbola}

The orthocenter of a triangle whose points are on the branches of the
hyperbola ${\mathscr H} : y=a/x$ belong to this hyperbola.

\begin{LTXexample}
\psset{unit=0.7}
\begin{pspicture}(-11,-5)(11,7)
\psset{linecolor=blue, linewidth=2\pslinewidth}
\psplot[yMaxValue=6,plotpoints=500]{-10}{-.1}{1 x div}
\psplot[yMaxValue=6,plotpoints=500]{.1}{10}{1 x div}
\psset{%PointSymbol=none,
linewidth=.5\pslinewidth}
\pstTriangle[linecolor=magenta, PosAngleB=-85, PosAngleC=-90](.2,5){A}(1,1){B}(10,.1){C}
\psset{linecolor=magenta,CodeFig=true, CodeFigColor=red}
\pstProjection{B}{A}{C}
\ncline[nodesepA=-1,linestyle=dashed,linecolor=magenta]{C'}{B}
\pstProjection{B}{C}{A}
\ncline[nodesepA=-1,linestyle=dashed,linecolor=magenta]{A'}{B}
\pstProjection{A}{C}{B}
\pstInterLL[PosAngle=135,PointSymbol=square]{A}{A'}{B}{B'}{H}
\psset{linecolor=green, nodesep=-1}
\pstLineAB{A}{H}\pstLineAB{B'}{H}\pstLineAB{C}{H}
\psdot[dotstyle=square](H)
\end{pspicture}
\end{LTXexample}


\resetEUCLvalues


\newpage
\subsection{17 sides regular polygon}

Striking picture created by K. F. Gauss.
he also prooved that it is possible to build the regular polygons which
have $2^{2^p}+1$ sides, the following one has 257 sides!


\begin{pspicture}(-5.5,-5.5)(5.5,6)
  \psset{CodeFig, RightAngleSize=.14, CodeFigColor=red,
     CodeFigB=true, linestyle=dashed, dash=2mm 2mm}
  \pstGeonode[PosAngle={-90,0}]{O}(5;0){P_1}
  \pstCircleOA{O}{P_1}
  \pstSymO[PointSymbol=none, PointName=none, CodeFig=false]{O}{P_1}[PP_1]
  \ncline[linestyle=solid]{PP_1}{P_1}
  \pstRotation[RotAngle=90, PosAngle=90]{O}{P_1}[B]
  \pstRightAngle[linestyle=solid]{B}{O}{PP_1}\ncline[linestyle=solid]{O}{B}
  \pstHomO[HomCoef=.25]{O}{B}[J]  \ncline{J}{P_1}
  \pstBissectBAC[PointSymbol=none, PointName=none]{O}{J}{P_1}{PE1}
  \pstBissectBAC[PointSymbol=none, PointName=none]{O}{J}{PE1}{PE2}
  \pstInterLL[PosAngle=-90]{O}{P_1}{J}{PE2}{E}
  \pstRotation[PosAngle=-90, RotAngle=-45, PointSymbol=none, PointName=none]{J}{E}[PF1]
  \pstInterLL[PosAngle=-90]{O}{P_1}{J}{PF1}{F}
  \pstMiddleAB[PointSymbol=none, PointName=none]{F}{P_1}{MFP1}  \pstCircleOA{MFP1}{P_1}
  \pstInterLC[%PointSymbolA=none, PointNameA=none
  ]{O}{B}{MFP1}{P_1}{H}{K}
  \pstCircleOA{E}{K}    \pstInterLC{O}{P_1}{E}{K}{N_6}{N_4}
  \pstRotation[RotAngle=90,PointSymbol=none, PointName=none]{N_6}{E}[PP_6]
  \pstInterLC[PosAngleA=90,PosAngleB=-90, PointNameB=P_{13}]{PP_6}{N_6}{O}{P_1}{P_6}{P_13}
  \pstSegmentMark[SegmentSymbol=wedge]{N_6}{P_6}
  \pstSegmentMark[SegmentSymbol=wedge]{P_13}{N_6}
  \pstRotation[RotAngle=90,PointSymbol=none, PointName=none]{N_4}{E}[PP_4]
  \pstInterLC[PosAngleA=90,PosAngleB=-90,PointNameB=P_{15}]{N_4}{PP_4}{O}{P_1}{P_4}{P_15}
  \pstSegmentMark[SegmentSymbol=cup]{N_4}{P_4}
  \pstSegmentMark[SegmentSymbol=cup]{P_15}{N_4}
  \pstRightAngle[linestyle=solid]{P_1}{N_6}{P_6}
  \pstRightAngle[linestyle=solid]{P_1}{N_4}{P_4}
  \pstBissectBAC[PosAngle=90, linestyle=none]{P_4}{O}{P_6}{P_5}
  \pstInterCC[PosAngleB=90, PointSymbolA=none, PointNameA=none]{O}{P_1}{P_4}{P_5}{H}{P_3}
  \pstInterCC[PosAngleB=90, PointSymbolA=none, PointNameA=none]{O}{P_1}{P_3}{P_4}{H}{P_2}
  \pstInterCC[PosAngleA=90, PointSymbolB=none, PointNameB=none]{O}{P_1}{P_6}{P_5}{P_7}{H}
  \pstInterCC[PosAngleA=100, PointSymbolB=none, PointNameB=none]{O}{P_1}{P_7}{P_6}{P_8}{H}
  \pstInterCC[PosAngleA=135, PointSymbolB=none, PointNameB=none]{O}{P_1}{P_8}{P_7}{P_9}{H}
  \pstOrtSym[PosAngle={-90,-90,-90,-100,-135},PointName={P_{17},P_{16},P_{14},P_{12},P_{11},P_{10}}]
             {O}{P_1}{P_2,P_3,P_5,P_7,P_8,P_9}[P_17,P_16,P_14,P_12,P_11,P_10]
  \pspolygon[linecolor=green, linestyle=solid, linewidth=2\pslinewidth]
    (P_1)(P_2)(P_3)(P_4)(P_5)(P_6)(P_7)(P_8)(P_9)(P_10)(P_11)(P_12)(P_13)(P_14)(P_15)(P_16)(P_17)
\end{pspicture}


\begin{lstlisting}
\begin{pspicture}(-5.5,-5.5)(5.5,6)
  \psset{CodeFig, RightAngleSize=.14, CodeFigColor=red,
     CodeFigB=true, linestyle=dashed, dash=2mm 2mm}
  \pstGeonode[PosAngle={-90,0}]{O}(5;0){P_1}
  \pstCircleOA{O}{P_1}
  \pstSymO[PointSymbol=none, PointName=none, CodeFig=false]{O}{P_1}[PP_1]
  \ncline[linestyle=solid]{PP_1}{P_1}
  \pstRotation[RotAngle=90, PosAngle=90]{O}{P_1}[B]
  \pstRightAngle[linestyle=solid]{B}{O}{PP_1}\ncline[linestyle=solid]{O}{B}
  \pstHomO[HomCoef=.25]{O}{B}[J]  \ncline{J}{P_1}
  \pstBissectBAC[PointSymbol=none, PointName=none]{O}{J}{P_1}{PE1}
  \pstBissectBAC[PointSymbol=none, PointName=none]{O}{J}{PE1}{PE2}
  \pstInterLL[PosAngle=-90]{O}{P_1}{J}{PE2}{E}
  \pstRotation[PosAngle=-90, RotAngle=-45, PointSymbol=none, PointName=none]{J}{E}[PF1]
  \pstInterLL[PosAngle=-90]{O}{P_1}{J}{PF1}{F}
  \pstMiddleAB[PointSymbol=none, PointName=none]{F}{P_1}{MFP1}  \pstCircleOA{MFP1}{P_1}
  \pstInterLC[PointSymbolA=none, PointNameA=none]{O}{B}{MFP1}{P_1}{H}{K}
  \pstCircleOA{E}{K}    \pstInterLC{O}{P_1}{E}{K}{N_6}{N_4}
  \pstRotation[RotAngle=90,PointSymbol=none, PointName=none]{N_6}{E}[PP_6]
  \pstInterLC[PosAngleA=90,PosAngleB=-90, PointNameB=P_{13}]{PP_6}{N_6}{O}{P_1}{P_6}{P_13}
  \pstSegmentMark[SegmentSymbol=wedge]{N_6}{P_6}
  \pstSegmentMark[SegmentSymbol=wedge]{P_13}{N_6}
  \pstRotation[RotAngle=90,PointSymbol=none, PointName=none]{N_4}{E}[PP_4]
  \pstInterLC[PosAngleA=90,PosAngleB=-90,PointNameB=P_{15}]{N_4}{PP_4}{O}{P_1}{P_4}{P_15}
  \pstSegmentMark[SegmentSymbol=cup]{N_4}{P_4}
  \pstSegmentMark[SegmentSymbol=cup]{P_15}{N_4}
  \pstRightAngle[linestyle=solid]{P_1}{N_6}{P_6}
  \pstRightAngle[linestyle=solid]{P_1}{N_4}{P_4}
  \pstBissectBAC[PosAngle=90, linestyle=none]{P_4}{O}{P_6}{P_5}
  \pstInterCC[PosAngleB=90, PointSymbolA=none, PointNameA=none]{O}{P_1}{P_4}{P_5}{H}{P_3}
  \pstInterCC[PosAngleB=90, PointSymbolA=none, PointNameA=none]{O}{P_1}{P_3}{P_4}{H}{P_2}
  \pstInterCC[PosAngleA=90, PointSymbolB=none, PointNameB=none]{O}{P_1}{P_6}{P_5}{P_7}{H}
  \pstInterCC[PosAngleA=100, PointSymbolB=none, PointNameB=none]{O}{P_1}{P_7}{P_6}{P_8}{H}
  \pstInterCC[PosAngleA=135, PointSymbolB=none, PointNameB=none]{O}{P_1}{P_8}{P_7}{P_9}{H}
  \pstOrtSym[PosAngle={-90,-90,-90,-100,-135},PointName={P_{17},P_{16},P_{14},P_{12},P_{11},P_{10}}]
             {O}{P_1}{P_2,P_3,P_5,P_7,P_8,P_9}[P_17,P_16,P_14,P_12,P_11,P_10]
  \pspolygon[linecolor=green, linestyle=solid, linewidth=2\pslinewidth]
    (P_1)(P_2)(P_3)(P_4)(P_5)(P_6)(P_7)(P_8)(P_9)(P_10)(P_11)(P_12)(P_13)(P_14)(P_15)(P_16)(P_17)
\end{pspicture}
\end{lstlisting}


\newpage
\subsection{Circles \& tangents}

The drawing of the circle tangents which crosses a given point.

\begin{LTXexample}
\begin{pspicture}(15,10)
\pstGeonode(5, 5){O}(14,2){M}
\pstCircleOA[Radius=\pstDistVal{4}]{O}{}
\pstMiddleAB[PointSymbol=none, PointName=none]{O}{M}{O'}
\pstInterCC[RadiusA=\pstDistVal{4}, DiameterB=\pstDistAB{O}{M},
            CodeFigB=true, CodeFigColor=magenta, PosAngleB=45]{O}{}{O'}{}{A}{B}
\psset{linecolor=red, linewidth=1.3\pslinewidth, nodesep=-2}
\pstLineAB{M}{A}\pstLineAB{M}{B}
\end{pspicture}
\end{LTXexample}


\begin{LTXexample}
\begin{pspicture}(-2,0)(13,9)
\pstGeonode(9,3){O}(3,6){O'}\psset{PointSymbol=none, PointName=none}
\pstCircleOA[Radius=\pstDistVal{3}]{O}{}\pstCircleOA[Radius=\pstDistVal{1}]{O'}{}
\pstInterLC[Radius=\pstDistVal{3}]{O}{O'}{O}{}{M}{toto}
\pstInterLC[Radius=\pstDistVal{1}]{O}{O'}{O'}{}{M'}{toto}
\pstRotation[RotAngle=30]{O}{M}[N]
\pstRotation[RotAngle=30]{O'}{M'}[N']
\pstInterLL[PointSymbol=*, PointName=\Omega]{O}{O'}{N}{N'}{Omega}
\pstMiddleAB{O}{Omega}{I}   \pstInterCC{I}{O}{O}{M}{A}{B}
\psset{nodesepA=-1, nodesepB=-3, linecolor=blue, linewidth=1.3\pslinewidth}
\pstLineAB[nodesep=-2]{A}{Omega}\pstLineAB[nodesep=-2]{B}{Omega}
\pstRotation[RotAngle=-150]{O'}{M'}[N'']
\pstInterLL[PointSymbol=*, PointName=\Omega']{O}{O'}{N}{N''}{Omega'}
\pstMiddleAB{O}{Omega'}{J}
\pstInterCC{J}{O}{O}{M}{A'}{B'}
\psset{nodesepA=-1, nodesepB=-3, linecolor=red}
\pstLineAB{A'}{Omega'}\pstLineAB{B'}{Omega'}
\end{pspicture}
\end{LTXexample}


\newpage
\subsection{Fermat's point}

Drawing of Manuel Luque.

\begin{LTXexample}
\begin{pspicture}(-7,-6)(5,5)
\psset{PointSymbol=none, PointName=none}
\pstTriangle[PosAngleA=-160,PosAngleB=90,PosAngleC=-25](-3,-2){B}(0,3){A}(2,-1){C}%
\psset{RotAngle=-60}
\pstRotation[PosAngle=-90]{B}{C}[A']
\pstRotation{C}{A}[B']
\pstRotation[PosAngle=160]{A}{B}[C']
\pstLineAB{A}{B'}
\pstLineAB{C}{B'}
\pstLineAB{B}{A'}
\pstLineAB{C}{A'}
\pstLineAB{B}{C'}
\pstLineAB{A}{C'}
\pstCircleABC[linecolor=red]{A}{B}{C'}{O_1}
\pstCircleABC[linecolor=blue]{A}{C}{B'}{O_2}
\pstCircleABC[linecolor=Aquamarine]{A'}{C}{B}{O_3}
\pstInterCC[PointSymbolA=none]{O_1}{A}{O_2}{A}{E}{F}
\end{pspicture}
\end{LTXexample}

\newpage
\subsection{Escribed and inscribed circles of a triangle}

%% cercles inscrit et exinscrits d'un triangle


\begin{pspicture}(-6,-5)(11,15)
\psset{PointSymbol=none}
\pstTriangle[linewidth=2\pslinewidth,linecolor=red](4,1){A}(0,3){B}(5,5){C}
\psset{linecolor=blue}
\pstBissectBAC[PointSymbol=none,PointName=none]{C}{A}{B}{AB}
\pstBissectBAC[PointSymbol=none,PointName=none]{A}{B}{C}{BB}
\pstBissectBAC[PointSymbol=none,PointName=none]{B}{C}{A}{CB}
\pstInterLL{A}{AB}{B}{BB}{I} 
\psset{linecolor=magenta, linestyle=dashed}  \pstProjection{A}{B}{I}[I_C]
\pstLineAB{I}{I_C}\pstRightAngle[linestyle=solid]{A}{I_C}{I}
\pstProjection{A}{C}{I}[I_B]
\pstLineAB{I}{I_B}\pstRightAngle[linestyle=solid]{C}{I_B}{I}
\pstProjection[PosAngle=80]{C}{B}{I}[I_A]
\pstLineAB{I}{IA}\pstRightAngle[linestyle=solid]{B}{I_A}{I}
\pstCircleOA[linecolor=yellow, linestyle=solid]{I}{I_A}
\psset{linecolor=magenta, linestyle=none}
\pstOutBissectBAC[PointSymbol=none,PointName=none]{C}{A}{B}{AOB}
\pstOutBissectBAC[PointSymbol=none,PointName=none]{A}{B}{C}{BOB}
\pstOutBissectBAC[PointSymbol=none,PointName=none]{B}{C}{A}{COB}
\pstInterLL[PosAngle=-90]{A}{AOB}{B}{BOB}{I_1} \pstInterLL{A}{AOB}{C}{COB}{I_2}
\pstInterLL[PosAngle=90]{C}{COB}{B}{BOB}{I_3}  \psset{linecolor=magenta, linestyle=dashed}
\pstProjection[PointName=I_{1C}]{A}{B}{I_1}[I1C]
\pstLineAB{I_1}{I1C}\pstRightAngle[linestyle=solid]{I_1}{I1C}{A}
\pstProjection[PointName=I_{1B}]{A}{C}{I_1}[I1B]
\pstLineAB{I_1}{I1B}\pstRightAngle[linestyle=solid]{A}{I1B}{I_1}
\pstProjection[PointName=I_{1A}]{C}{B}{I_1}[I1A]
\pstLineAB{I_1}{I1A}\pstRightAngle[linestyle=solid]{I_1}{I1A}{C}
\pstProjection[PointName=I_{2B}]{A}{C}{I_2}[I2B]
\pstLineAB{I_2}{I2B}\pstRightAngle[linestyle=solid]{A}{I2B}{I_2}
\pstProjection[PointName=I_{2C}]{A}{B}{I_2}[I2C]
\pstLineAB{I_2}{I2C}\pstRightAngle[linestyle=solid]{I_2}{I2C}{A}
\pstProjection[PointName=I_{2A}]{B}{C}{I_2}[I2A]
\pstLineAB{I_2}{I2A}\pstRightAngle[linestyle=solid]{C}{I2A}{I_2}
\pstProjection[PointName=I_{3A}]{C}{B}{I_3}[I3A]
\pstLineAB{I_3}{I3A}\pstRightAngle[linestyle=solid]{C}{I3A}{I_3}
\pstProjection[PointName=I_{3C}]{A}{B}{I_3}[I3C]
\pstLineAB{I_3}{I3C}\pstRightAngle[linestyle=solid]{A}{I3C}{I_3}
\pstProjection[PointName=I_{3B}]{C}{A}{I_3}[I3B]
\pstLineAB{I_3}{I3B}\pstRightAngle[linestyle=solid]{I_3}{I3B}{A}
\psset{linecolor=black!40, linestyle=dashed}
\pstCircleOA{I_1}{I1C} \pstCircleOA{I_2}{I2B} \pstCircleOA{I_3}{I3A}
\psset{linecolor=red, linestyle=solid, nodesepA=-1, nodesepB=-1}
\pstLineAB{I1B}{I3B}\pstLineAB{I1A}{I2A}\pstLineAB{I2C}{I3C}
\end{pspicture}


\begin{lstlisting}
\begin{pspicture}(-6,-5)(11,15)
\psset{PointSymbol=none}
\pstTriangle[linewidth=2\pslinewidth,linecolor=red](4,1){A}(0,3){B}(5,5){C}
\psset{linecolor=blue}
\pstBissectBAC[PointSymbol=none,PointName=none]{C}{A}{B}{AB}
\pstBissectBAC[PointSymbol=none,PointName=none]{A}{B}{C}{BB}
\pstBissectBAC[PointSymbol=none,PointName=none]{B}{C}{A}{CB}
\pstInterLL{A}{AB}{B}{BB}{I}
\psset{linecolor=magenta, linestyle=dashed}
\pstProjection{A}{B}{I}[I_C]
\pstLineAB{I}{I_C}\pstRightAngle[linestyle=solid]{A}{I_C}{I}
\pstProjection{A}{C}{I}[I_B]
\pstLineAB{I}{I_B}\pstRightAngle[linestyle=solid]{C}{I_B}{I}
\pstProjection[PosAngle=80]{C}{B}{I}[I_A]
\pstLineAB{I}{IA}\pstRightAngle[linestyle=solid]{B}{I_A}{I}
\pstCircleOA[linecolor=yellow, linestyle=solid]{I}{I_A}
\psset{linecolor=magenta, linestyle=none}
\pstOutBissectBAC[PointSymbol=none,PointName=none]{C}{A}{B}{AOB}
\pstOutBissectBAC[PointSymbol=none,PointName=none]{A}{B}{C}{BOB}
\pstOutBissectBAC[PointSymbol=none,PointName=none]{B}{C}{A}{COB}
\pstInterLL[PosAngle=-90]{A}{AOB}{B}{BOB}{I_1}
\pstInterLL{A}{AOB}{C}{COB}{I_2}
\pstInterLL[PosAngle=90]{C}{COB}{B}{BOB}{I_3}
\psset{linecolor=magenta, linestyle=dashed}
\pstProjection[PointName=I_{1C}]{A}{B}{I_1}[I1C]
\pstLineAB{I_1}{I1C}\pstRightAngle[linestyle=solid]{I_1}{I1C}{A}
\pstProjection[PointName=I_{1B}]{A}{C}{I_1}[I1B]
\pstLineAB{I_1}{I1B}\pstRightAngle[linestyle=solid]{A}{I1B}{I_1}
\pstProjection[PointName=I_{1A}]{C}{B}{I_1}[I1A]
\pstLineAB{I_1}{I1A}\pstRightAngle[linestyle=solid]{I_1}{I1A}{C}
\pstProjection[PointName=I_{2B}]{A}{C}{I_2}[I2B]
\pstLineAB{I_2}{I2B}\pstRightAngle[linestyle=solid]{A}{I2B}{I_2}
\pstProjection[PointName=I_{2C}]{A}{B}{I_2}[I2C]
\pstLineAB{I_2}{I2C}\pstRightAngle[linestyle=solid]{I_2}{I2C}{A}
\pstProjection[PointName=I_{2A}]{B}{C}{I_2}[I2A]
\pstLineAB{I_2}{I2A}\pstRightAngle[linestyle=solid]{C}{I2A}{I_2}
\pstProjection[PointName=I_{3A}]{C}{B}{I_3}[I3A]
\pstLineAB{I_3}{I3A}\pstRightAngle[linestyle=solid]{C}{I3A}{I_3}
\pstProjection[PointName=I_{3C}]{A}{B}{I_3}[I3C]
\pstLineAB{I_3}{I3C}\pstRightAngle[linestyle=solid]{A}{I3C}{I_3}
\pstProjection[PointName=I_{3B}]{C}{A}{I_3}[I3B]
\pstLineAB{I_3}{I3B}\pstRightAngle[linestyle=solid]{I_3}{I3B}{A}
\psset{linecolor=yellow, linestyle=solid}
\pstCircleOA{I_1}{I1C} \pstCircleOA{I_2}{I2B} \pstCircleOA{I_3}{I3A}
\psset{linecolor=red, linestyle=solid, nodesepA=-1, nodesepB=-1}
\pstLineAB{I1B}{I3B}\pstLineAB{I1A}{I2A}\pstLineAB{I2C}{I3C}
\end{pspicture}
\end{lstlisting}



\newpage
\section{Some locus points}

\subsection{Parabola}

The parabola is the set of points which are at the same distance
between a point and a line.


\begin{LTXexample}
\def\NbPt{11}
\begin{pspicture}(-0.5,0)(11,10)
\psset{linewidth=1.2\pslinewidth}\renewcommand{\NbPt}{11}
\pstGeonode[PosAngle={0,-90}](5,4){O}(1,2){A}(9,1.5){B}
\newcommand\Parabole[1][100]{%
  \pstLineAB[nodesep=-.9, linecolor=green]{A}{B}
  \psset{RotAngle=90, PointSymbol=none, PointName=none}
  \multido{\n=1+1}{\NbPt}{%
    \pstHomO[HomCoef=\n\space \NbPt\space 1 add div]{A}{B}[M\n]
    \pstMediatorAB[linestyle=none]{M\n}{O}{M\n_I}{M\n_IP}
    \pstRotation{M\n}{A}[M\n_P]
    \pstInterLL[PointSymbol=square, PointName=none]{M\n_I}{M\n_IP}{M\n}{M\n_P}{P_\n}
    \ifnum\n=#1 \bgroup
      \pstRightAngle{A}{M\n}{M\n_P}
      \psset{linewidth=.5\pslinewidth, nodesep=-1, linecolor=blue}
      \pstLineAB{M\n_I}{P_\n}\pstLineAB{M\n}{P_\n}
      \pstRightAngle{P_\n}{M\n_I}{M\n}
      \psset{linecolor=red}\pstSegmentMark{M\n}{M\n_I}\pstSegmentMark{M\n_I}{O}
      \egroup \fi}}
\Parabole[2]\pstGenericCurve[linecolor=magenta]{P_}{1}{\NbPt}
\pstGeonode[PointSymbol=*, PosAngle=-90](10,3.5){B}
\Parabole\pstGenericCurve[linecolor=magenta,linestyle=dashed]{P_}{1}{\NbPt}
\end{pspicture}
\end{LTXexample}

\newpage
\subsection{Hyperbola}

The hyperbola is the set of points whose difference between their
distance of two points (the focus) is constant.

\iffalse
\begin{verbatim}
%% QQ RAPPELS : a=\Sommet, c=\PosFoyer,
%% b^2=c^2-a^2, e=c/a
%% pour une hyperbole -> e>1, donc c>a,
%% ici on choisi a=\sqrt{2}, c=2, e=\sqrt{2}
%% M est sur H <=> |MF-MF'|=2a
\end{verbatim}
\fi

\begin{LTXexample}
\begin{pspicture}[showgrid](-4,-4)(4,4)
\newcommand\Sommet{1.4142135623730951 } \newcounter{i} \setcounter{i}{1}
\newcommand\PosFoyer{2 } \newcommand\HypAngle{0} 
\newcounter{CoefDiv}\setcounter{CoefDiv}{20}
\newcounter{Inc}\setcounter{Inc}{2} \newcounter{n}\setcounter{n}{2}
\newcommand\Ri{ \PosFoyer \Sommet sub \arabic{i}\space\arabic{CoefDiv}\space div add }
\newcommand\Rii{\Ri \Sommet 2 mul add }
\pstGeonode[PosAngle=90]{O}(\PosFoyer;\HypAngle){F}
\pstSymO[PosAngle=180]{O}{F}\pstLineAB{F}{F'}  \pstCircleOA{O}{F}
\pstGeonode[PosAngle=-135](\Sommet;\HypAngle){S}
\pstGeonode[PosAngle=-45](-\Sommet;\HypAngle){S'}
\pstRotation[RotAngle=90, PointSymbol=none]{S}{O}[B]
\pstInterLC[PosAngleA=90, PosAngleB=-90]{S}{B}{O}{F}{A_1}{A_2}
\pstLineAB[nodesepA=-3,nodesepB=-5]{A_1}{O}\pstLineAB[nodesepA=-3,nodesepB=-5]{A_2}{O}
\pstMarkAngle[LabelSep=.8,MarkAngleRadius=.7,arrows=->,LabelSep=1.1]{F}{O}{A_1}{$\Psi$}
\ncline[linecolor=red]{A_1}{A_2}   \pstRightAngle[RightAngleSize=.15]{A_1}{S}{O}
\psset{PointName=none}
\whiledo{\value{n}<8}{%
  \psset{RadiusA=\pstDistVal{\Ri},RadiusB=\pstDistVal{\Rii},PointSymbol=none}
  \pstInterCC{F}{}{F'}{}{M\arabic{n}}{P\arabic{n}}
  \pstInterCC{F'}{}{F}{}{M'\arabic{n}}{P'\arabic{n}}
  \stepcounter{n}\addtocounter{i}{\value{Inc}}
  \addtocounter{Inc}{\value{Inc}}}%% fin de whiledo
\psset{linecolor=blue}
\pstGenericCurve[GenCurvFirst=S]{M}{2}{7}
\pstGenericCurve[GenCurvFirst=S]{P}{2}{7}
\pstGenericCurve[GenCurvFirst=S']{M'}{2}{7}
\pstGenericCurve[GenCurvFirst=S']{P'}{2}{7}
\end{pspicture}
\end{LTXexample}



 \subsection{Cycloid}

The wheel rolls from $M$ to $A$. The circle points are on a
cycloid.


\begin{LTXexample}
\begin{pspicture}[showgrid](-2,-1)(13,3)
\providecommand\NbPt{11}
\psset{linewidth=1.2\pslinewidth}
\pstGeonode[PointSymbol={*,none}, PointName={default,none}, PosAngle=180]{M}(0,1){O}
\pstGeonode(12.5663706144,0){A}
\pstTranslation[PointSymbol=none, PointName=none]{M}{A}{O}[B]
\multido{\nA=1+1}{\NbPt}{%
  \pstHomO[HomCoef=\nA\space\NbPt\space 1 add div,PointSymbol=none,PointName=none]{O}{B}[O\nA]
  \pstProjection[PointSymbol=none, PointName=none]{M}{A}{O\nA}[P\nA]
  \pstCurvAbsNode[PointSymbol=square, PointName=none,CurvAbsNeg=true]%
    {O\nA}{P\nA}{M\nA}{\pstDistAB{O}{O\nA}}
  \ifnum\nA=2 \bgroup
    \pstCircleOA{O\nA}{M\nA}
    \psset{linecolor=magenta, linewidth=1.5\pslinewidth}
    \pstArcnOAB{O\nA}{P\nA}{M\nA}
    \ncline{O\nA}{M\nA}\ncline{P\nA}{M}
    \egroup \fi
  }% fin du multido
\psset{linecolor=blue, linewidth=1.5\pslinewidth}
\pstGenericCurve[GenCurvFirst=M]{M}{1}{6} \pstGenericCurve[GenCurvLast=A]{M}{6}{\NbPt}
\end{pspicture}
\end{LTXexample}

\newpage
\subsection{Hypocycloids (Astroid and Deltoid)}

A wheel rolls inside a circle, and depending of the radius ratio, it
is an astroid, a deltoid and in the general case hypo-cycloids.



\begin{LTXexample}
\newcommand\HypoCyclo[4][100]{%
  \def\R{#2}\def\petitR{#3}\def\NbPt{#4}
  \def\Anglen{\n\space 360 \NbPt\space 1 add div mul}
  \psset{PointSymbol=none,PointName=none}
  \pstGeonode[PointSymbol={*,none},PointName={default,none}, PosAngle=0]{O}(\R;0){P}
  \pstCircleOA{O}{P}
  \pstHomO[HomCoef=\petitR\space\R\space div]{P}{O}[M]
  \multido{\n=1+1}{\NbPt}{%
    \pstRotation[RotAngle=\Anglen]{O}{M}[M\n]
    \rput(M\n){\pstGeonode(\petitR;0){Q}}
    \pstRotation[RotAngle=\Anglen]{M\n}{Q}[N]
    \pstRotation[RotAngle=\n\space -360 \NbPt\space 1 add div
    mul \R\space\petitR\space div mul,PointSymbol=*,PointName=none]{M\n}{N}[N\n]
    \ifnum\n=#1
      \pstCircleOA{M\n}{N\n}\ncline{M\n}{N\n}%
      {\psset{linecolor=red, linewidth=2\pslinewidth}
      \pstArcOAB{M\n}{N\n}{N}\pstArcOAB{O}{P}{N}}
    \fi}}%fin multido-newcommand
\begin{pspicture}[showgrid](-3.5,-3.4)(3.5,4)
\HypoCyclo[3]{3}{1}{17}
\psset{linecolor=blue,linewidth=1.5\pslinewidth}
\pstGenericCurve[GenCurvFirst=P]{N}{1}{6} 
\pstGenericCurve{N}{6}{12}
\pstGenericCurve[GenCurvLast=P]{N}{12}{17}
\end{pspicture}
\end{LTXexample}



\begin{LTXexample}
\newcommand\HypoCyclo[4][100]{%
  \def\R{#2}\def\petitR{#3}\def\NbPt{#4}
  \def\Anglen{\n\space 360 \NbPt\space 1 add div mul}
  \psset{PointSymbol=none,PointName=none}
  \pstGeonode[PointSymbol={*,none},PointName={default,none}, PosAngle=0]{O}(\R;0){P}
  \pstCircleOA{O}{P}
  \pstHomO[HomCoef=\petitR\space\R\space div]{P}{O}[M]
  \multido{\n=1+1}{\NbPt}{%
    \pstRotation[RotAngle=\Anglen]{O}{M}[M\n]
    \rput(M\n){\pstGeonode(\petitR;0){Q}}
    \pstRotation[RotAngle=\Anglen]{M\n}{Q}[N]
    \pstRotation[RotAngle=\n\space -360 \NbPt\space 1 add div
    mul \R\space\petitR\space div mul, PointSymbol=*, PointName=none]{M\n}{N}[N\n]
    \ifnum\n=#1
      \pstCircleOA{M\n}{N\n}\ncline{M\n}{N\n}%
      {\psset{linecolor=red, linewidth=2\pslinewidth}
      \pstArcOAB{M\n}{N\n}{N}\pstArcOAB{O}{P}{N}}
    \fi}}%fin multido-newcommand
\begin{pspicture}(-4.5,-4)(4.5,4.5)
\HypoCyclo[4]{4}{1}{27}
\psset{linecolor=blue, linewidth=1.5\pslinewidth}
\pstGenericCurve[GenCurvFirst=P]{N}{1}{7}
\pstGenericCurve{N}{7}{14}\pstGenericCurve{N}{14}{21}
\pstGenericCurve[GenCurvLast=P]{N}{21}{27}
\end{pspicture}
\end{LTXexample}


\newpage
 \section{Lines and circles envelope}

\subsection{Conics}

Let's consider a circle and a point $A$ not on the circle. The
set of all the mediator lines of segments defined by $A$ and the
circle points, create two conics depending of the position of $A$:

\begin{compactitem}
\item inside the circle: an hyperbola;
\item outside the circle: an ellipse.
\end{compactitem}

(figure of O. Reboux).

\begin{LTXexample}
\begin{pspicture}(-6,-6)(6,6)
\psset{linewidth=0.4\pslinewidth,PointSymbol=none, PointName=none}
\pstGeonode[PosAngle=-90, PointSymbol={none,*,none}, PointName={none,default,none}]
  {O}(4;132){A}(5,0){O'}
\pstCircleOA{O}{O'}
\multido{\n=5+5}{72}{%
  \pstGeonode(5;\n){M_\n}
  \pstMediatorAB[nodesep=-15,linecolor=magenta]
    {A}{M_\n}{I}{J}}% fin multido
\end{pspicture}
\end{LTXexample}

\newpage
\subsection{Cardioid}

The cardioid is defined by the circles centered on a circle and
crossing a given point.

\begin{LTXexample}
\begin{pspicture}(-6,-6)(3,5)
\psset{linewidth=0.4\pslinewidth,PointSymbol=x,nodesep=0,linecolor=magenta}
\pstGeonode[PointName=none]{O}(2,0){O'}
\pstCircleOA[linecolor=black]{O}{O'}
\multido{\n=5+5}{72}{%
  \pstGeonode[PointSymbol=none, PointName=none](2;\n){M_\n}
  \pstCircleOA{M_\n}{O'}}
  \end{pspicture}
\end{LTXexample}


\newpage
  \section{Homotethy and fractals}

\begin{LTXexample}[width=6cm.pos=l]
\begin{pspicture}(-2.8,-3)(2.8,3)
\pstGeonode[PosAngle={0,90}](2,2){A_0}(-2,2){B_0}%
\psset{RotAngle=90}
\pstRotation[PosAngle=270]{A_0}{B_0}[D_0]
\pstRotation[PosAngle=180]{D_0}{A_0}[C_0]
\pspolygon(A_0)(B_0)(C_0)(D_0)%
\psset{PointSymbol=none, PointName=none, HomCoef=.2}
\multido{\n=1+1,\i=0+1}{20}{%
  \pstHomO[PosAngle=0]{B_\i}{A_\i}[A_\n]
  \pstHomO[PosAngle=90]{C_\i}{B_\i}[B_\n]
  \pstHomO[PosAngle=180]{D_\i}{C_\i}[C_\n]
  \pstHomO[PosAngle=270]{A_\i}{D_\i}[D_\n]
  \pspolygon(A_\n)(B_\n)(C_\n)(D_\n)}% fin multido
\end{pspicture}
\end{LTXexample}

\newpage
\section{hyperbolic geometry: a triangle and its altitudes}

\begin{LTXexample}
\begin{pspicture}(-5,-5)(5,5)
\psclip{\pscircle(0,0){4}}
  \pstGeonode(1, 2){M}\pstGeonode(-2,2){N}\pstGeonode(0,-2){P}
  \psset{DrawCirABC=false, PointSymbol=none, PointName=none}%
  \pstGeonode(0,0){O}\pstGeonode(4,0){A}\pstCircleOA{O}{A}
  \pstHomO[HomCoef=\pstDistAB{O}{A} 2 mul \pstDistAB{O}{M} sub
    \pstDistAB{O}{M} div]{O}{M}[M']%
  \pstHomO[HomCoef=\pstDistAB{O}{A} 2 mul \pstDistAB{O}{P} sub
    \pstDistAB{O}{P} div]{O}{P}[P']%
  \pstHomO[HomCoef=\pstDistAB{O}{A} 2 mul \pstDistAB{O}{N} sub
    \pstDistAB{O}{N} div]{O}{N}[N']%
  \psset{linecolor=green, linewidth=1.5pt}%
  \pstCircleABC{M}{N}{M'}{OmegaMN}\pstArcOAB{OmegaMN}{N}{M}
  \pstCircleABC{M}{P}{M'}{OmegaMP}\pstArcOAB{OmegaMP}{M}{P}
  \pstCircleABC{N}{P}{P'}{OmegaNP}\pstArcOAB{OmegaNP}{P}{N}
  \psset{linecolor=blue}
  \pstHomO[HomCoef=\pstDistAB{OmegaNP}{N} 2 mul \pstDistAB{OmegaNP}{M} sub %% M
    \pstDistAB{OmegaNP}{M} div]{OmegaNP}{M}[MH']
  \pstCircleABC{M}{M'}{MH'}{OmegaMH}\pstArcOAB{OmegaMH}{MH'}{M} %% N
  \pstHomO[HomCoef=\pstDistAB{OmegaMP}{M} 2 mul \pstDistAB{OmegaMP}{N} sub
    \pstDistAB{OmegaMP}{N} div]{OmegaMP}{N}[NH']
  \pstCircleABC{N}{N'}{NH'}{OmegaNH}\pstArcOAB{OmegaNH}{N}{NH'} %% P
  \pstHomO[HomCoef=\pstDistAB{OmegaMN}{M} 2 mul \pstDistAB{OmegaMN}{P} sub
    \pstDistAB{OmegaMN}{P} div]{OmegaMN}{P}[PH']
  \pstCircleABC{P}{P'}{PH'}{OmegaPH}\pstArcOAB{OmegaPH}{P}{PH'}
\endpsclip
\end{pspicture}
\end{LTXexample}




\clearpage
\section{List of all optional arguments for \texttt{pst-eucl}}

\xkvview{family=pst-eucl,columns={key,type,default}}

\nocite{*}
\bgroup
\RaggedRight
%\bibliographystyle{plain}
\printbibliography
\egroup

\printindex


\end{document}


