%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% pst-coxeter_parameter\pst-coxeterp.tex
% Authors: J.-G. Luque and M. Luque
% Purpose: Listing of the macros of pst-coxeterp
% Created: 02/02/2008
% License: LGPL
% Project: PST-Cox V1.00
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Copyright © 2008 Jean-Gabriel Luque, Manuel Luque.
% This work may be distributed and/or modified under the condition of
% the Lesser GPL.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% This file is part of PST-Cox V1.00.
%
% PST-Cox V1.00 is free software: you can redistribute it and/or modify
% it under the terms of the Lesser GNU General Public License as published by
% the Free Software Foundation, either version 3 of the License, or
% (at your option) any later version.
%
% PST-Cox V1.00 is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% Lesser GNU General Public License for more details.
%
% You should have received a copy of the Lesser GNU General Public License
% along with PST-Cox V1.00. If not, see .
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\fileversion{0.98 Beta}
\def\filedate{2008/21/01}
\message{`pst-Coxeter-parameter' v\fileversion, \filedate\space
(Jean-Gabriel Luque and Manuel Luque)}
\csname PstCoxeterLoaded\endcsname
\let\PstCoxeter\endinput
% Require PSTricks and pst-xkey
\ifx\PSTnodeLoaded\endinput\else\input pstricks.tex\fi
\ifx\PSTXKeyLoaded\endinput\else\input pst-xkey.tex\fi
%
% Catcodes changes.
\edef\PstAtCode{\the\catcode`\@}
\catcode`\@=11\relax
%
%define the family of parameters pst-coxeter-parameter
%
\pst@addfams{pst-coxeter-parameter}
%
% There is two parameters P and Q which encodes the angle
% between the mirrors. The parameter P is used for the regular polygons
% the polytopes gamma^p_n, beta^p_n, gamma^p_2 and beta^p_2
% Example: \Polygon[P=5]
%
\define@key[psset]{pst-coxeter-parameter}{P}{%
\edef\psk@pstCoxeter@P{#1}}
%
\psset{P=6}
%
% The parameter Q is used for starry regular polygon.
% Example: \Polygon[P=5,Q=2]
%
\define@key[psset]{pst-coxeter-parameter}{Q}{%
\edef\psk@pstCoxeter@Q{#1}}
%
%
\psset{Q=1}
%
% The dimension is used for simplices, polytopes gamma^p_n and beta^p_n
% Example: \Simplex[dimension=4]
%
\define@key[psset]{pst-coxeter-parameter}{dimension}{%
\edef\psk@pstCoxeter@dimension{#1}}
\psset{dimension=3}
%
% Graphical parameters
%
% Colors
% Color of Vertices
% Example: \Polygon[colorVertices=blue,P=5]
\define@key[psset]{pst-coxeter-parameter}{colorVertices}{%
\pst@getcolor{#1}\pscolorVertices}
% by default the color of the vertices is green
\psset{colorVertices=green}
% Color of centers
% Example: \Polygon[colorCenters=blue,P=5]
\define@key[psset]{pst-coxeter-parameter}{colorCenters}{%
\pst@getcolor{#1}\pscolorCenters}
%
% by default the color of the centers is red.
\psset{colorCenters=red}
%
%
% Dot styles
% style of Vertices
% Example: \Polygon[styleVertices=*pentagon,P=5]
\def\psset@styleVertices#1{%
\@ifundefined{psds@#1}%
{\@pstrickserr{styleVertices `#1' not defined}\@eha}%
{\edef\psk@styleVertices{#1}}}
% by default the vertices are represented by a (empty) circle (styleVertices=o)
\psset@styleVertices{o}
% style of Centers
% Example: \Polygon[styleCenters=*pentagon,P=5]
\def\psset@styleCenters#1{%
\@ifundefined{psds@#1}%
{\@pstrickserr{styleCenters `#1' not defined}\@eha}%
{\edef\psk@styleCenters{#1}}}
% by default the vertices are represented by a disk (styleVertices=*)
\psset@styleCenters{*}
%
% Dot sizes
% Size of vertices
% Example: \Polygon[sizeVertices=0.1,P=5]
\newdimen\pssizeVertices
\def\psset@sizeVertices#1{\pssetlength\pssizeVertices{#1}}
\psset@sizeVertices{0.05}
% Sizes of centers
% Example: \Polygon[sizeCenters=0.1,P=5]
\newdimen\pssizeCenters
\def\psset@sizeCenters#1{\pssetlength\pssizeCenters{#1}}
\psset@sizeCenters{0.05}
%
% Boolean parameters
%
% The vertices are drawn only if the value of drawvertices is true
% Examples: \Polygon[drawvertices=false,P=5]
\newif\ifPst@drawvertices
\define@key[psset]{pst-coxeter-parameter}{drawvertices}[true]{%
\@nameuse{Pst@drawvertices#1}}
%
% The edges are drawn only if the value of drawedges is true
% Examples: \Polygon[drawedges=false,P=5]
%
\newif\ifPst@drawedges
\define@key[psset]{pst-coxeter-parameter}{drawedges}[true]{%
\@nameuse{Pst@drawedges#1}}
%
%%
% The centers are drawn only if the value of drawcenters is true
%% Examples: \Polygon[drawcenters=false,P=5]
%
\newif\ifPst@drawcenters
\define@key[psset]{pst-coxeter-parameter}{drawcenters}[true]{%
\@nameuse{Pst@drawcenters#1}}
%
% By default the vertices, edges and centers are drawn.
%
%\setkeys{psset}{drawvertices=true,drawedges=true,drawcenters=true}
\psset{drawvertices=true,drawedges=true,drawcenters=true}
%
% All the polytopes are encoded with the same way.
% For each kind of polytope, we have wrote three procedures:
% /drawVertices which allows to draw the vertices of the polytope
% /drawEdges which allows to draw the edges of the polytope
% /drawCenter which allows to draw the centers of the edges of the polytope
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%% LIST OF THE POLYTOPES
%%
% Regular real polygons
%
%
% It is a well known family of polytope with two parameters P and Q.
% This is the set of the classical polygons whose symmetric groups are dihedral 2[p]2.
% Use the macro \Polygon[P=p,Q=q] draw the polygon 2{p/q}2 in the notation of Coxeter.
% The non starry real polygons are obtained when Q=1
% The starry polygon are obtained when Q do not divided P
%
% Example:
% \Polygon[P=5] draw a pentagone
% \Polygon[P=5,Q=2] draw a regular star with five vertices.
\def\Polygon{\pst@object{Polygon}}
\def\Polygon@i{\@ifnextchar[{\Polygon@do}{\Polygon@do[]}}
\def\Polygon@do[#1]{{%
\pst@killglue
\setkeys{psset}{#1}%
\begin@ClosedObj
\addto@pscode{%
%%%% macro for the colors of the vertices and the centers
/pscolorVertices {\pst@usecolor\pscolorVertices currentrgbcolor} def
/pscolorCenters {\pst@usecolor\pscolorCenters currentrgbcolor} def
0 0 translate
%%% some usefull definition
/unit \pst@number\psunit\space def % pts -> cm
/Pi 180 def %%% use Pi instead of 180°
/p \psk@pstCoxeter@P\space def % parameter P
/q \psk@pstCoxeter@Q\space def % parameter Q
/p_1 p 1 sub def % p-1
1 setlinejoin CLW setlinewidth%
%%%%% List of the vertices
%%%%%
/TableauxPoints [
0 1 p 1 add {%
/n exch def
[
2 n Pi q mul mul mul p div cos % cos(2nqPi/p)
unit mul % pts to cm
2 n Pi q mul mul mul p div sin % sin(2nPi/p)
unit mul % pts to cm
]
} for
] def
%
%
%%%% Procedures
%
% /drawEdges: this procedure draws the edges
%
/drawEdges { 0 1 p {
/n exch def
TableauxPoints n get aload pop
/YL ED /XL ED
XL YL moveto % move to the point n of the array
TableauxPoints n 1 add get aload pop
lineto % draw a line from the point n to the point n+1
stroke
} for
} def \ifPst@drawedges
drawEdges
stroke
\fi
%%%%%%%%%%%%%%%%%%
% /drawVertices:this procedure draw the vertices
%
%
/DS \pst@number\pssizeVertices\space def
\@nameuse{psds@\psk@styleVertices}%
/drawVertices {%
/Liste exch def
0 1 p {
/compteur exch def
pscolorVertices
Liste compteur get aload pop
Dot
} for
} def \ifPst@drawvertices
TableauxPoints drawVertices
\fi
%%%%%%%%%%%%%%
% /drawCenters : draw the centers of the edges
%
/DS \pst@number\pssizeCenters\space def
\@nameuse{psds@\psk@styleCenters}%
/drawCenters {
0 1 p {
/n exch def
TableauxPoints n get aload pop
/YL ED /XL ED
TableauxPoints n 1 add get aload pop
/YR ED /XR ED
/YM YL YR add 2 div def % YM = (YL+YR)/2
/XM XL XR add 2 div def % XM = (XL+XR)/2
pscolorCenters
XM YM
Dot
stroke
}for
} def
\ifPst@drawcenters
drawCenters
\fi
}%
\end@ClosedObj
}}
%
%%%%%%%%%%%%%%%%%%% The simplices
% Simplices are the real regular polytopes whose
% roots system is A_{n+1}. The reflection groups which generates
% it is the symmetric group (order (n+1)!).
% Simplices are auto-reciprocal polytopes. The first examples are the tetrahedral (for dimension 2),
% the pentatope (in dimension 4), the sextatope in dimension 5 etc.
% In general the number of cells of dimension m ($m cm
/Pi 180 def
/p \psk@pstCoxeter@dimension\space 1 add def % dimension of the space plus 1
/p_1 p 1 sub def % dimension of the space
1 setlinejoin CLW setlinewidth%
%%%% Computation if the array of the Vertices
/TableauxPoints [
0 1 p 1 add {% for n from 0 to p+1
/n exch def
1 1 p 1 sub{ % for m from 1 to p+1
/m exch def
[
2 n Pi mul mul p div cos % cos(2nPi/p)
unit mul % pts to cm
2 n Pi mul mul p div sin % sin(2nPi/p)
unit mul % pts to cm
]
[
2 n m add Pi mul mul p div cos % cos(2nPi/p)
unit mul % pts to cm
2 n m add Pi mul mul p div sin % sin(2nPi/p)
unit mul % pts to cm
]
}for
} for
] def
%
%%%%%% Procedure
% /drawEdges : draw the edges of the simplex
% One use the array TableauxPoints
/drawEdges { 0 1 p p mul { % for n from 0 to p^2
/n exch def
TableauxPoints n 2 mul get aload pop % the point 2n of the array
/YL ED /XL ED
XL YL moveto
TableauxPoints n 2 mul 1 add get aload pop % the point 2n+1 of the array
lineto
stroke
} for
} def \ifPst@drawedges
drawEdges
stroke
\fi
%
% /drawVertices : draw the vertices of the simplex
%
/DS \pst@number\pssizeVertices\space def% define the size of the dots
\@nameuse{psds@\psk@styleVertices}% style of the dots
/drawVertices {%
/Liste exch def
0 1 p p mul { % for compteur from 0 to p^2
/compteur exch def
pscolorVertices % color of the parameters colorVertices
Liste compteur get aload pop
Dot % draw a dot
} for
} def \ifPst@drawvertices
TableauxPoints drawVertices % apply drawVertices to TableauxPoints
\fi
%
% /drawCenters : draw the centers of the simplex
%
/DS \pst@number\pssizeCenters\space def % define the size of the dots
\@nameuse{psds@\psk@styleCenters}% style of the dots
/drawCenters {
0 1 p p mul { % from n from 0 to p^2
/n exch def
TableauxPoints n 2 mul get aload pop % point $2n$ of TableauxPoints
/YL ED /XL ED
TableauxPoints n 2 mul 1 add get aload pop % point $2n+1$ of TableauxPoints
/YR ED /XR ED
/YM YL YR add 2 div def % YM:=(YL+YZ)/2
/XM XL XR add 2 div def % XM:=(XY+XZ)/2
pscolorCenters
XM YM
Dot
stroke
}for
} def
\ifPst@drawcenters
drawCenters
\fi
}
\end@ClosedObj
}}
%
%%%%%%%%%%%%%%%%%% The polytopes $\gamma^p_n$
% These polytopes are complex polytopes $p\{4\}2\{3\}2\dots 2\{3\}2$ in the notation of Coxeter.
% This means that their symmetric group is a $n!p$ order group generated by $n$ reflections
% with relations $R_1^p=R_2^2=\dots R_n^2=Id$
% $R_1R_2R_1R_2=R_2R_1R_2R_1$, $R_iR_{i+1}R_i=R_{i+1}R_i$ if i>1, $R_iR_j=R_jR_i$ if $|i-j|>1$.
% Such a complex polytope has $\left(n\atop m\right)p^n$ cells of dimension $m$ ($m2$, the polytope is not a real polytope since $R_1^2\neq Id$.
% In this case, the edges are regular polygons with $p$ vertices.
% When $n=2$, the projection is not convenient since the projection of some vertices are the same.
% For an other projection, use the macro \gammaptwo described below.
%
% The two parameters are the dimension and $p$.
%
% Use the macro \gammapn[dimension=...,P=...] to draw the projection of a polytope $\gamma^p_n$.
%
% Example : \gammapn[dimension=5,P=4]
%
\def\gammapn{\pst@object{gammapn}}
\def\gammapn@i{\@ifnextchar[{\gammapn@do}{\gammapn@do[]}}
\def\gammapn@do[#1]{{%
\pst@killglue
\setkeys{psset}{#1}%
\begin@ClosedObj
\addto@pscode{%
%%% Some usefull definitions
/pscolorVertices {\pst@usecolor\pscolorVertices currentrgbcolor} def
/pscolorCenters {\pst@usecolor\pscolorCenters currentrgbcolor} def
0 0 translate
/unit \pst@number\psunit\space def % pts -> cm
/Pi 180 def
/p \psk@pstCoxeter@P\space def % parameter p
%/p 3 def
/n \psk@pstCoxeter@dimension\space def% dimension
/n_1 n 1 sub def % n-1
/p_1 p 1 sub def % p-1
1 setlinejoin CLW setlinewidth%
%
%
% The procedures
%
% /drawEdges : draw the edges of the polytopes
/drawEdges { /pow2 1 def
1 1 n_1 {/pop %for from 1 to n-1
/pow2 pow2 p mul def%
} for % compute p^{n-1}
%
1 1 n {% for i from 1 to n
/i exch def
0 1 pow2 1 sub { % for j from 0 to p^{n-1}-1
/j exch def
/num j def % num := j
/s1 0 def % s1 := 0
/s2 0 def % s2 := 0
1 1 i 1 sub {% for k from 1 to i-1
/k exch def
/c unit k n num mul add 2 Pi mul mul p div n div cos mul def% c := cos( (p*num+k)*2*Pi/p/n)*unit
/s unit k n num mul add 2 Pi mul mul p div n div sin mul def% s := sin( (p*num+k)*2*Pi/p/n)*unit
/s1 s1 c add def %s1 := s1+c
/s2 s2 s add def %s2 := s2+s
/num num p idiv def % num := num/p
} for
i 1 add 1 n {% for k from i+1 to n
/k exch def
/c unit k n num mul add 2 Pi mul mul p div n div cos mul def% c := cos( (p*num+k)*2*Pi/p/n)*unit
/s unit k n num mul add 2 Pi mul mul p div n div sin mul def% s := sin( (p*num+k)*2*Pi/p/n)*unit
/s1 s1 c add def %s1 := s1+c
/s2 s2 s add def %s2 := s2+s
/num num p idiv def % num := num/p
} for
/x unit i 2 Pi mul mul p div n div cos mul s1 add def %x := s1+unit*cos(2*i*Pi/p/n)
/y unit i 2 Pi mul mul p div n div sin mul s2 add def %y := s2+unit*sin(2*i*Pi/n)
x y moveto %
0 1 p { % from jj from 0 to p
/jj exch def
/x unit i jj n mul add 2 Pi mul mul n div p div cos mul s1 add def %x := s1+unit*cos((i+jj*n)*Pi*2/p/n)
/y unit i jj n mul add 2 Pi mul mul n div p div sin mul s2 add def %y := s2+unit*sin((i+jj*n)*Pi*2/p/n)
x y lineto
} for
stroke
}for
} for
stroke
} def \ifPst@drawedges
drawEdges
stroke
\fi
%
% \drawVertices : draw the vertices of the polytopes
%
% Almost the same procedure than \drawEdges
/DS \pst@number\pssizeVertices\space def
\@nameuse{psds@\psk@styleVertices}%
/drawVertices {%
/pow2 1 def
1 1 n_1 {/pop
/pow2 pow2 p mul def%
} for
%
1 1 n {%
/i exch def
0 1 pow2 1 sub { % for j from 0 to p^{n-1}-1
/j exch def
/num j def
/s1 0 def
/s2 0 def
1 1 i 1 sub {% for k from 1 to i-1
/k exch def
/c unit k n num mul add 2 Pi mul mul p div n div cos mul def% cos( (p*num+k)*2*Pi/p/n)*unit
/s unit k n num mul add 2 Pi mul mul p div n div sin mul def% sin( (p*num+k)*2*Pi/p/n)*unit
/s1 s1 c add def %s1=s1+c
/s2 s2 s add def %s2=s2+s
/num num p idiv def % num:=num/p
} for
i 1 add 1 n {% for k from i+1 to n
/k exch def
/c unit k n num mul add 2 Pi mul mul p div n div cos mul def% cos( (p*num+k)*2*Pi/p/n)*unit
/s unit k n num mul add 2 Pi mul mul p div n div sin mul def% sin( (p*num+k)*2*Pi/p/n)*unit
/s1 s1 c add def %s1=s1+c
/s2 s2 s add def %s2=s2+s
/num num p idiv def % num:=num/p
} for
/x unit i 2 Pi mul mul p div n div cos mul s1 add def %x:=s1+unit*cos(2*i*Pi/p/n)
/y unit i 2 Pi mul mul p div n div sin mul s2 add def
pscolorVertices
x y
Dot
0 1 p { % for jj from 0 to p
/jj exch def
/x unit i jj n mul add 2 Pi mul mul n div p div cos mul s1 add def%x:=s1+unit*cos((i+jj*n)*Pi*2/p/n)
/y unit i jj n mul add 2 Pi mul mul n div p div sin mul s2 add def
pscolorVertices
x y
Dot
} for
stroke
}for
} for
stroke
} def \ifPst@drawvertices
%Tableaaux
drawVertices
\fi
%
% \drawCenters : draw the centers of the edges of the polytopes
%
% Almost the same procedure than \drawEdges
/DS \pst@number\pssizeCenters\space def
\@nameuse{psds@\psk@styleCenters}%
/drawCenters {
/pow2 1 def
1 1 n_1 {/pop
/pow2 pow2 p mul def%
} for
%
1 1 n {%
/i exch def
0 1 pow2 1 sub { % for j from 0 to p^{n-1}-1
/j exch def
/num j def
/s1 0 def
/s2 0 def
1 1 i 1 sub {% for k from 1 to i-1
/k exch def
/c unit k n num mul add 2 Pi mul mul p div n div cos mul def% cos( (p*num+k)*2*Pi/p/n)*unit
/s unit k n num mul add 2 Pi mul mul p div n div sin mul def% sin( (p*num+k)*2*Pi/p/n)*unit
/s1 s1 c add def %s1=s1+c
/s2 s2 s add def %s2=s2+s
/num num p idiv def % num:=num/p
} for
i 1 add 1 n {% for k from i+1 à n
/k exch def
/c unit k n num mul add 2 Pi mul mul p div n div cos mul def% cos( (p*num+k)*2*Pi/p/n)*unit
/s unit k n num mul add 2 Pi mul mul p div n div sin mul def% sin( (p*num+k)*2*Pi/p/n)*unit
/s1 s1 c add def %s1=s1+c
/s2 s2 s add def %s2=s2+s
/num num p idiv def % num:=num/p
} for
/x unit i 2 Pi mul mul p div n div cos mul s1 add def %x:=s1+unit*cos(2*i*Pi/p/n)
/y unit i 2 Pi mul mul p div n div sin mul s2 add def
1 1 p 1 sub { % for jj from 1 to p-1
/jj exch def
/x unit i jj n mul add 2 Pi mul mul n div p div cos mul s1 add x add def%x:=s1+unit*cos((i+jj*n)*Pi*2/p/n)
/y unit i jj n mul add 2 Pi mul mul n div p div sin mul s2 add y add def
} for
/x x p 0 add div def
/y y p 0 add div def
pscolorCenters
x y
Dot
stroke
}for
} for
stroke
} def
\ifPst@drawcenters
drawCenters
\fi }
\end@ClosedObj
}}
%
%%%%%%%%%%%%%%%%%% The polytopes $\beta^p_n$
% These polytopes are complex polytopes $2\{3\}2\{3\}2\dots 2\{4\}p$ in the notation of Coxeter.
% They are the reciprocal polytopes of $\gamma^p_n$
% When $p=2$, the polytope $\beta^2_n$ is an hyperoctaedre.
% When $n=2$, the projection is not convenient since the projection of some vertices are the same.
% For an other projection, use the macro \betaptwo described below.
%
% The two parameters are the dimension and $p$.
%
% Use the macro \betapn[dimension=...,P=...] to draw the projection of a polytope $\beta^p_n$.
%
% Example : \betapn[dimension=5,P=4]
%%
%
%
\def\betapn{\pst@object{betapn}}
\def\betapn@i{\@ifnextchar[{\betapn@do}{\betapn@do[]}}
\def\betapn@do[#1]{{%
\pst@killglue
\setkeys{psset}{#1}%
\begin@ClosedObj
\addto@pscode{%
% Some useful definitions
/pscolorVertices {\pst@usecolor\pscolorVertices currentrgbcolor} def
/pscolorCenters {\pst@usecolor\pscolorCenters currentrgbcolor} def
0 0 translate
/unit \pst@number\psunit\space def % pts -> cm
/Pi 180 def
/p \psk@pstCoxeter@P\space def % parameter
%/p 3 def
/n \psk@pstCoxeter@dimension\space def% dimension
/n_1 n 1 sub def % n-1
/p_1 p 1 sub def % p-1
1 setlinejoin CLW setlinewidth%
/TableauxPoints [
] def
%
%%%%% The procedures
% % /drawEdges : draw the edges of the polytopes
/drawEdges {
0 1 n { % for k from 0 to n
/k exch def
k 1 add 1 n{ % for l from k+1 to n
/l exch def
0 1 p { % for i from 0 to p
/i exch def
0 1 p { % for j from 0 to p
/j exch def
/s1 unit n i mul k add 2 Pi mul mul n div p div cos mul def % s1 := unit*cos(2*Pi*(n*i)+k)/n/p)
/s2 unit n i mul k add 2 Pi mul mul n div p div sin mul def % s2 := unit*sin(2*Pi*(n*i)+k)/n/p)
/s3 unit n j mul 1 k add add 2 Pi mul mul n div p div cos mul def % s3 := unit*cos(2*Pi*(n*j)+k)/n/p)
/s4 unit n j mul 1 k add add 2 Pi mul mul n div p div sin mul def % s4 := unit*sin(2*Pi*(n*j)+k)/n/p)
s1 s2 moveto
s3 s4 lineto
stroke
}for
}for
} for
}for
} def \ifPst@drawedges
drawEdges
stroke
\fi
%
% \drawVertices : draw the vertices of the polytopes
%
% Almost the same procedure than \drawEdges
/DS \pst@number\pssizeVertices\space def
\@nameuse{psds@\psk@styleVertices}%
/drawVertices {%
0 1 n {
/k exch def
k 1 add 1 n{
/l exch def
0 1 p 0 sub {
/i exch def
0 1 p 0 sub {
/j exch def
/s1 unit n i mul k add 2 Pi mul mul n div p div cos mul def
/s2 unit n i mul k add 2 Pi mul mul n div p div sin mul def
/s3 unit n j mul 1 k add add 2 Pi mul mul n div p div cos mul def
/s4 unit n j mul 1 k add add 2 Pi mul mul n div p div sin mul def
pscolorVertices
s1 s2 %radiusVertices 0 360 arc
Dot
%0 1 0 setrgbcolor % green
%pscolorVertices
% fill
s3 s4 %radiusVertices 0 360 arc
Dot
%0 1 0 setrgbcolor % green
%pscolorVertices
%fill
stroke
}for
}for
} for
}for
} def \ifPst@drawvertices
drawVertices
\fi
%
% \drawCenters : draw the vertices of the polytopes
%
% Almost the same procedure than \drawCenters
/DS \pst@number\pssizeCenters\space def
\@nameuse{psds@\psk@styleCenters}%
/drawCenters {
0 1 n {
/k exch def
k 1 add 1 n{
/l exch def
0 1 p 0 sub {
/i exch def
0 1 p 0 sub {
/j exch def
/s1 unit n i mul k add 2 Pi mul mul n div p div cos mul def
/s2 unit n i mul k add 2 Pi mul mul n div p div sin mul def
/s3 unit n j mul 1 k add add 2 Pi mul mul n div p div cos mul def
/s4 unit n j mul 1 k add add 2 Pi mul mul n div p div sin mul def
pscolorCenters
%newpath
s1 s3 add 2 div s2 s4 add 2 div %1.5 0 360 arc
%closepath
Dot
%1 0 0 setrgbcolor % red
stroke
}for
}for
} for
}for
} def \ifPst@drawcenters
drawCenters
\fi
}%
\end@ClosedObj
}}
%
% %%%%% Polygon $\gamma^p_2$
% A special projection for polytopes $\gamma^p_2$.
%
\def\gammaptwo{\pst@object{gammaptwo}}
\def\gammaptwo@i{\@ifnextchar[{\gammaptwo@do}{\gammaptwo@do[]}}
\def\gammaptwo@do[#1]{{%
\pst@killglue
\setkeys{psset}{#1}%
\begin@ClosedObj
\addto@pscode{%
/pscolorVertices {\pst@usecolor\pscolorVertices currentrgbcolor} def
/pscolorCenters {\pst@usecolor\pscolorCenters currentrgbcolor} def
0 0 translate
/unit \pst@number\psunit\space def % pts -> cm
/Pi 180 def
/p \psk@pstCoxeter@P\space def % parameter
/p_1 p 1 add def % p+1
1 setlinejoin CLW setlinewidth
% list of the vertices
/TableauxPointsL [
0 1 p_1 {% for n from 0 to p-1
/n exch def
0 1 p { % for n from 0 to p
/i exch def
[
2 n Pi mul mul p div cos 7.5 sin mul % cos(2nPi/p)sin(Pi/24)
2 n Pi mul mul p div sin 7.5 cos mul add % +sin(2nPi/p)cos(Pi/24)
2 i Pi mul mul p div cos 7.5 sin mul sub % -cos(2iPi/p)sin(Pi/24)
2 i Pi mul mul p div sin 7.5 cos mul sub % -sin(2iPi/p)cos(Pi/24)
%
unit mul % pts to cm
2 n Pi mul mul p div cos 7.5 cos mul % cos(2nPi/p)cos(Pi/24)
2 n Pi mul mul p div sin 7.5 sin mul sub % -sin(2nPi/p)sin(Pi/24)
2 i Pi mul mul p div cos 7.5 cos mul add % +cos(2iPi/p)cos(Pi/24)
2 i Pi mul mul p div sin 7.5 sin mul sub % -sin(2iPi/p)sin(Pi/24)
unit mul % pts to cm
]
} for
} for
] def
%
/TableauxPointsR [
0 1 p_1 {%for n from 0 to p-1
/n exch def
0 1 p {% for i from 0 to p
/i exch def
[
2 i Pi mul mul p div cos 7.5 sin mul % cos(2iPi/p)sin(Pi/24)
2 i Pi mul mul p div sin 7.5 cos mul add % +sin(2iPi/p)cos(Pi/24)
2 n Pi mul mul p div cos 7.5 sin mul sub % -cos(2nPi/p)sin(Pi/24)
2 n Pi mul mul p div sin 7.5 cos mul sub % -sin(2nPi/p)cos(Pi/24)
unit mul % pts to cm
%
2 i Pi mul mul p div cos 7.5 cos mul % cos(2iPi/p)cos(Pi/24)
2 i Pi mul mul p div sin 7.5 sin mul sub % -sin(2iPi/p)sin(Pi/24)
2 n Pi mul mul p div cos 7.5 cos mul add % +cos(2nPi/p)cos(Pi/24)
2 n Pi mul mul p div sin 7.5 sin mul sub % -sin(2nPi/p)sin(Pi/24)
unit mul % pts to cm
]
} for
} for
] def
%%%% The procedures
%
% / drawEdges draw the edges of the polygon
/drawEdges {
/Liste exch def
newpath
Liste 0 get aload pop moveto
0 1 p_1 p mul {
/compteur exch def
Liste compteur get aload pop
lineto } for
closepath stroke } def \ifPst@drawedges
TableauxPointsL drawEdges
TableauxPointsR drawEdges
\fi
%
% / drawVertices draw the vertices of the polygon
/DS \pst@number\pssizeVertices\space def
\@nameuse{psds@\psk@styleVertices}%
/drawVertices {%
/Liste exch def
0 1 p_1 p mul {
/compteur exch def
pscolorVertices
Liste compteur get aload pop
Dot
pscolorVertices
fill
} for
} def \ifPst@drawvertices
TableauxPointsL drawVertices
TableauxPointsR drawVertices
\fi
%% List of the centers
/TableauMilieuxL[
0 1 p 1 sub {% for n from 0 to p-1
/n exch def
[
2 n Pi mul mul p div cos 7.5 sin mul % cos(2nPi/p)sin(Pi/24)
2 n Pi mul mul p div sin 7.5 cos mul add % +sin(2nPi/p)cos(Pi/24)
unit mul % pts to cm
2 n Pi mul mul p div cos 7.5 cos mul % cos(2nPi/p)cos(Pi/24)
2 n Pi mul mul p div sin 7.5 sin mul sub % -sin(2nPi/p)sin(Pi/24)
unit mul % pts to cm
]
} for
] def
%
/TableauMilieuxR[
0 1 p 1 sub {% for n from 0 to p-1
/n exch def
[
2 n Pi mul mul p div cos 7.5 sin mul neg % -cos(2nPi/p)sin(Pi/24)
2 n Pi mul mul p div sin 7.5 cos mul sub % -sin(2nPi/p)cos(Pi/24)
unit mul % pts to cm
2 n Pi mul mul p div cos 7.5 cos mul % cos(2nPi/p)cos(Pi/24)
2 n Pi mul mul p div sin 7.5 sin mul sub % -sin(2nPi/p)sin(Pi/24)
unit mul % pts to cm
]
} for
] def
%
% / drawEdges draw the edges of the polygon
/DS \pst@number\pssizeCenters\space def
\@nameuse{psds@\psk@styleCenters}%
/drawCenters {%
/Liste exch def
0 1 p 1 sub {%
/compteur exch def
pscolorCenters
Liste compteur get aload pop
Dot
stroke
} for
} def \ifPst@drawcenters
TableauMilieuxL drawCenters
TableauMilieuxR drawCenters
\fi
}%
\end@ClosedObj
}}
%
%
% %%%%% Polygon $\gamma^p_2$
% A special projection for polytopes $\gamma^p_2$.
%
%
\def\betaptwo{\pst@object{betaptwo}}
\def\betaptwo@i{\@ifnextchar[{\betaptwo@do}{\betaptwo@do[]}}
\def\betaptwo@do[#1]{{%
\pst@killglue
\setkeys{psset}{#1}%
\begin@ClosedObj
\addto@pscode{%
/pscolorVertices {\pst@usecolor\pscolorVertices currentrgbcolor} def
/pscolorCenters {\pst@usecolor\pscolorCenters currentrgbcolor} def
0 0 translate
/unit \pst@number\psunit\space def % pts -> cm
/Pi 180 def
/p \psk@pstCoxeter@P\space def % parameter
/p_1 p 1 sub def % p-1
1 setlinejoin CLW setlinewidth
% List of the vertices
/TableauxPointsL24p [
0 1 p_1 {% for n from 0 to p-1
/n exch def
[
2 n Pi mul mul p div cos 7.5 sin mul % cos(2nPi/p)sin(Pi/24)
2 n Pi mul mul p div sin 7.5 cos mul add % +sin(2nPi/p)cos(Pi/24)
unit mul % pts to cm
2 n Pi mul mul p div cos 7.5 cos mul % cos(2nPi/p)cos(Pi/24)
2 n Pi mul mul p div sin 7.5 sin mul sub % -sin(2nPi/p)cos(Pi/24)
unit mul % pts to cm
]
} for
] def
%
/TableauxPointsR24p [
0 1 p_1 {% for m from 0 to p-1
/m exch def
[
2 m Pi mul mul p div cos 7.5 sin mul neg % cos(2mPi/p)sin(Pi/24)
2 m Pi mul mul p div sin 7.5 cos mul sub % -sin(2mPi/p)cos(Pi/24)
unit mul % pts to cm
2 m Pi mul mul p div cos 7.5 cos mul % cos(2mPi/p)cos(Pi/24)
2 m Pi mul mul p div sin 7.5 sin mul sub % -sin(2mPi/p)sin(Pi/24)
unit mul % pts to cm
]
} for
] def
%%%% The procedures
%
% / drawEdges draw the edges of the polygon
/drawEdges { 0 1 p_1 { %
/n exch def
TableauxPointsL24p n get aload pop
/YL ED /XL ED
0 1 p_1 {
/m ED
XL YL moveto
TableauxPointsR24p m get aload pop
lineto
% 0 0 1 setrgbcolor
stroke
} for } for
} def
\ifPst@drawedges
drawEdges
stroke
\fi
% / drawVertices draw the vertices of the polygon
/DS \pst@number\pssizeVertices\space def
\@nameuse{psds@\psk@styleVertices}%
/drawVertices {%
/Liste exch def
0 1 p_1 {
/compteur exch def
% newpath
pscolorVertices
Liste compteur get aload pop
Dot% radiusVertices 0 360 arc
%closepath
%0 1 0 setrgbcolor % green
%pscolorVertices
% fill
} for
} def
%
\ifPst@drawvertices
TableauxPointsL24p drawVertices
TableauxPointsR24p drawVertices
\fi
% / drawCenters draw the centers of the edges of the polygon
/DS \pst@number\pssizeCenters\space def
\@nameuse{psds@\psk@styleCenters}%
/drawCenters {
0 1 p_1 {
/n exch def
TableauxPointsL24p n get aload pop
/YL ED /XL ED
0 1 p_1 {
/m ED
TableauxPointsR24p m get aload pop
/YR ED /XR ED
/YM YL YR add 2 div def
/XM XL XR add 2 div def
pscolorCenters
%newpath
XM YM %1.5 0 360 arc
Dot
%closepath
%1 0 0 setrgbcolor % red
stroke
} for } for
} def
\ifPst@drawcenters
drawCenters
\fi }
\end@ClosedObj
}}
%
%
%\catcode`\@=\PstAtCode\relax
\endinput
%
%%
%% END: pst-coxeter.tex