%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%                                                                           %%
%% This is file `pst-fourbarlinkage.tex',                                    %%
%%                                                                           %%
%% IMPORTANT NOTICE:                                                         %%
%%                                                                           %%
%% Package `pst-fourbarlinkage'                                              %%
%%                                                                           %%
%% Jürgen Gilg & Manuel Luque & Herbert Voß <hvoss@tug.org>                  %%
%%                                                                           %%
%% This program can be redistributed and/or modified under the terms         %%
%% of the LaTeX Project Public License Distributed from CTAN archives        %%
%% in directory macros/latex/base/lppl.txt.                                  %%
%%                                                                           %%
%% DESCRIPTION:                                                              %%
%%  `pst-FourBarLinkage' is a PSTricks tools                                 %%
%%  Package to draw four-bar linkage and centrodes                           %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\csname PSTFourbarlinkage\endcsname
\let\PSTFourbarlinkage\endinput

% Require PSTricks
\ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi
\ifx\PSTXKeyLoaded\endinput\else\input pst-xkey\fi

\def\fileversion{0.01}
\def\filedate{2025/12/19}
\message{`PST-fourbarlinkage' v\fileversion, \filedate\space (hv)}

\edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax

\pst@addfams{pst-fourbarlinkage}

\define@key[psset]{pst-fourbarlinkage}{barlengths}{\edef\pst@fourbarlinkage@barlengths{#1 }}
\psset[pst-fourbarlinkage]{barlengths=20 32 30 15 }%  a b c d (mm) classe=1
\define@key[psset]{pst-fourbarlinkage}{N}{\edef\pst@fourbarlinkage@N{#1 }}
\psset[pst-fourbarlinkage]{N=360}% nombre de points
\define@key[psset]{pst-fourbarlinkage}{Nmax}{\edef\pst@fourbarlinkage@Nmax{#1 }}
\psset[pst-fourbarlinkage]{Nmax=360}% nombre de points maximum
% maximum distance between 2 points (cm)
\define@key[psset]{pst-fourbarlinkage}{dmax}{\edef\pst@fourbarlinkage@dmax{#1 }}
\psset[pst-fourbarlinkage]{dmax=1}%
% position du point M li� � la bielle BC
% en fraction de BC=b
\define@key[psset]{pst-fourbarlinkage}{posM}{\edef\pst@fourbarlinkage@posM{#1 }}
\psset[pst-fourbarlinkage]{posM=0.5 0}%
\define@boolkey[psset]{pst-fourbarlinkage}[Pst@sfourbarlinkage@]{crossed}[true]{}
\psset[pst-fourbarlinkage]{crossed=false}
\define@boolkey[psset]{pst-fourbarlinkage}[Pst@sfourbarlinkage@]{connectedpoints}[true]{}
\psset[pst-fourbarlinkage]{connectedpoints=false}
\define@boolkey[psset]{pst-fourbarlinkage}[Pst@sfourbarlinkage@]{centrodes}[true]{}
\psset[pst-fourbarlinkage]{centrodes=false}
\define@boolkey[psset]{pst-fourbarlinkage}[Pst@sfourbarlinkage@]{fixedcentrodes}[true]{}
\psset[pst-fourbarlinkage]{fixedcentrodes=false}

\pstheader{pst-fourbarlinkage.pro}

\def\psFourBarLinkage{\def\pst@par{}\pst@object{psFourBarLinkage}}
\def\psFourBarLinkage@i{% angle in degrees
    \begin@SpecialObj
  \addto@pscode{
1 setlinejoin
 FourBarLinkage begin
\pst@fourbarlinkage@barlengths\space /d exch def /c exch def /b exch def /a exch def
/N \pst@fourbarlinkage@N def
/Nmax \pst@fourbarlinkage@Nmax def
/crossed \ifPst@sfourbarlinkage@crossed true \else false \fi def
/centrodes \ifPst@sfourbarlinkage@centrodes true \else false \fi def
/fixedcentrodes \ifPst@sfourbarlinkage@fixedcentrodes true \else false \fi def
/connectedpoints \ifPst@sfourbarlinkage@connectedpoints true \else false \fi def
/MM {\pst@number\psunit mul 0.1 mul} bind def % millimeter
/dmax \pst@fourbarlinkage@dmax MM def
/Fourbar [a b c d] def
\pst@fourbarlinkage@posM /hBC exch b mul MM def /dB exch b mul MM def
/xA 0 def /yA 0 def
/xD { d MM } def /yD 0 def
/xB {a t2 cos mul MM } def
/yB {a t2 sin mul MM } def
/xC {d c t4 cos mul add MM} def
/yC {c t4 sin mul MM} def
%
% milieu de BC
/xI {xB xC add 2 div} def
/yI {yB yC add 2 div} def
% le point M li� � la bielle BC
/xM {xB dB t3 cos mul add hBC t3 90 add cos mul add} def
/yM {yB dB t3 sin mul add hBC t3 90 add sin mul add} def
% centre instantan� de rotation (centrode)
/xyCIR {xA yA xB yB xC yC xD yD
            InterLines
            /yInter exch def /xInter exch def
            xInter 0 eq yInter 0 eq and {}{xInter yInter} ifelse} def
% Cas particulier
/xyCIR1 {xA yA xB yB xC yC xD yD
            InterLines} def
%
% determiner les barres de m�me longueur
/nS [] def % courte
/nL [] def % longue
0 1 3 {/j exch def
Fourbar j get S eq {nS [j] append /nS exch def} if
Fourbar j get L eq {nL [j] append /nL exch def} if
} for
%
Fourbar-classify
%
class 1 eq class 3 eq or class 11 eq or class 13 eq or {
    /t3min 0 def % /
/arct2 [t3min 1 N {/i exch def a c neg d b i cos mul sub b neg i sin mul FourBar-Solve exch pop}
     for] def
/arct4 [t3min 1 N {/i exch def  a c neg d b i cos mul sub b neg i sin mul FourBar-Solve pop
    } for
    ] def
/Arct2 [t3min 1 Nmax {/i exch def a c neg d b i cos mul sub b neg i sin mul FourBar-Solve exch pop}
     for] def
/Arct4 [t3min 1 Nmax {/i exch def  a c neg d b i cos mul sub b neg i sin mul FourBar-Solve pop
    } for
    ] def
/curveM [ t3min 1 N {/i exch def  a c neg d b i cos mul sub b neg i sin mul FourBar-Solve /t3 i def /t2 exch def /t4 exch def xM yM} for ] def
/centrode [t3min 1 N {/i exch def  a c neg d b i cos mul sub b neg i sin mul FourBar-Solve /t3 i def /t2 exch def /t4 exch def xyCIR } for ] def
/fixedcentrode [0 1 Nmax {/i exch def  a c neg d b i cos mul sub b neg i sin mul FourBar-Solve /t3 i def /t2 exch def /t4 exch def xyCIR } for ] def
/movingcentrode [0 1 Nmax {/i exch def
     a c neg d b i cos mul sub b neg i sin mul FourBar-Solve /t3 i def /t2 exch def /t4 exch def
                t3 0 0 MovRef
                t3  xB yB MovRef
                t3  xC yC MovRef
                t3  xD yD MovRef
                InterLines
                /yInter exch def /xInter exch def
                xInter 0 eq yInter 0 eq and {}{xInter yInter} ifelse
                  } for ] def
a c neg d b N cos mul sub b neg N sin mul FourBar-Solve
/t2 exch def
/t4 exch def
/t3 N def
} if
class 2 eq class 12 eq or {
    /t2min 0 def
/arct2 [t2min 1 N {}for] def
/arct4 [t2min 1 N {/i exch def b c neg d a i cos mul sub a neg i sin mul FourBar-Solve pop} for ] def
/Arct2 [t2min 1 Nmax {}for] def
/Arct4 [t2min 1 Nmax {/i exch def b c neg d a i cos mul sub a neg i sin mul FourBar-Solve pop} for ] def
/curveM [ t2min 1 N {/i exch def b c neg d a i cos mul sub a neg i sin mul FourBar-Solve /t2 i def /t3 exch def /t4 exch def xM yM} for ] def
/centrode [ t2min 1 N {/i exch def b c neg d a i cos mul sub a neg i sin mul FourBar-Solve /t2 i def /t3 exch def /t4 exch def xyCIR} for ] def
/fixedcentrode [ t2min 1 Nmax {/i exch def b c neg d a i cos mul sub a neg i sin mul FourBar-Solve /t2 i def /t3 exch def /t4 exch def xyCIR} for ] def
/movingcentrode [0 1 Nmax {/i exch def
      b c neg d a i cos mul sub a neg i sin mul FourBar-Solve /t2 i def /t3 exch def /t4 exch def
                t3 0 0 MovRef
                t3  xB yB MovRef
                t3  xC yC MovRef
                t3  xD yD MovRef
                InterLines
                /yInter exch def /xInter exch def
                xInter 0 eq yInter 0 eq and {}{xInter yInter} ifelse
                  } for ] def
/t2 N def
b c neg d a t2 cos mul sub a neg t2 sin mul FourBar-Solve
/t3 exch def
/t4 exch def
} if
class 4 eq  {
    /t4min 0 def
/arct2 [ t4min 1 N {/i exch def a b c i cos mul d add  c i sin mul FourBar-Solve exch pop } for ] def
/arct4 [ t4min 1 N {} for] def
/Arct2 [ t4min 1 Nmax {/i exch def a b c i cos mul d add  c i sin mul FourBar-Solve exch pop } for ] def
/Arct4 [ t4min 1 Nmax {} for] def
/curveM [t4min 1 N {/i exch def a b c i cos mul d add  c i sin mul FourBar-Solve /t4 i def /t2 exch def /t3 exch def xM yM } for ] def
/centrode [t4min 1 N {/i exch def a b c i cos mul d add  c i sin mul FourBar-Solve /t4 i def /t2 exch def /t3 exch def xyCIR } for ] def
/fixedcentrode [t4min 1 Nmax {/i exch def a b c i cos mul d add  c i sin mul FourBar-Solve /t4 i def /t2 exch def /t3 exch def xyCIR } for ] def
/movingcentrode [t4min 1 Nmax {/i exch def
      a b c i cos mul d add  c i sin mul FourBar-Solve /t4 i def /t2 exch def /t3 exch def
                t3 0 0 MovRef
                t3  xB yB MovRef
                t3  xC yC MovRef
                t3  xD yD MovRef
                InterLines
                /yInter exch def /xInter exch def
                xInter 0 eq yInter 0 eq and {}{xInter yInter} ifelse
                  } for ] def
 a b c N cos mul d add  c N sin mul FourBar-Solve
/t2 exch def
/t3 exch def
/t4 N def
} if
class 5 eq {
    /t2min a dup mul d dup mul add b c add dup mul sub 2 a mul d mul div arccos neg def
    /t2max t2min neg def
    /dt t2max t2min sub def
    /T2max t2min dt Nmax div N mul add def
/arct2 [t2min 1 T2max {}for] def
/arct4 [t2min 1 T2max {/i exch def b c neg d a i cos mul sub a neg i sin mul FourBar-Solve pop} for ] def
/Arct2 [t2min 1 t2max {}for] def
/Arct4 [t2min 1 t2max {/i exch def b c neg d a i cos mul sub a neg i sin mul FourBar-Solve pop} for ] def
/curveM [t2min 1 T2max {/i exch def b c neg d a i cos mul sub a neg i sin mul FourBar-Solve /t2 i def /t3 exch def /t4 exch def xM yM } for ] def
/centrode [t2min 1 T2max {/i exch def b c neg d a i cos mul sub a neg i sin mul FourBar-Solve /t2 i def /t3 exch def /t4 exch def xyCIR } for ] def
/fixedcentrode [t2min 1 t2max {/i exch def b c neg d a i cos mul sub a neg i sin mul FourBar-Solve /t2 i def /t3 exch def /t4 exch def xyCIR } for ] def
/movingcentrode [t2min 1 t2max {/i exch def
      b c neg d a i cos mul sub a neg i sin mul FourBar-Solve /t2 i def /t3 exch def /t4 exch def
                t3 0 0 MovRef
                t3  xB yB MovRef
                t3  xC yC MovRef
                t3  xD yD MovRef
                InterLines
                /yInter exch def /xInter exch def
                xInter 0 eq yInter 0 eq and {}{xInter yInter} ifelse
                  } for ] def
/t2 T2max def
b c neg d a t2 cos mul sub a neg t2 sin mul FourBar-Solve
/t3 exch def
/t4 exch def
} if
class 6 eq {
    /t4min d dup mul c dup mul add a b add dup mul sub 2 c mul d mul div arccos neg 180 add def
    /t4max t4min neg 360 add def
    /dt t4max t4min sub def
    /T4max t4min dt 360 div N mul add def
/arct4 [t4min 1 T4max {}for] def
/arct2 [t4min 1 T4max {/i exch def a b d c i cos mul add c i sin mul FourBar-Solve exch pop} for ] def
/Arct4 [t4min 1 t4max {}for] def
/Arct2 [t4min 1 t4max {/i exch def a b d c i cos mul add c i sin mul FourBar-Solve exch pop} for ] def
/curveM [t4min 1 T4max {/i exch def a b d c i cos mul add c i sin mul FourBar-Solve /t4 i def /t2 exch def /t3 exch def xM yM } for ] def
/centrode [t4min 1 T4max {/i exch def a b d c i cos mul add c i sin mul FourBar-Solve /t4 i def /t2 exch def /t3 exch def xyCIR } for ] def
/fixedcentrode [t4min 1 t4max {/i exch def a b d c i cos mul add c i sin mul FourBar-Solve /t4 i def /t2 exch def /t3 exch def xyCIR } for ] def
/movingcentrode [t4min 1 t4max {/i exch def
      a b d c i cos mul add c i sin mul FourBar-Solve /t4 i def /t2 exch def /t3 exch def
                t3 0 0 MovRef
                t3  xB yB MovRef
                t3  xC yC MovRef
                t3  xD yD MovRef
                InterLines
                /yInter exch def /xInter exch def
                xInter 0 eq yInter 0 eq and {}{xInter yInter} ifelse
                  } for ] def
/t4 t4min dt 360 div N mul add def
a b d c t4 cos mul add c t4 sin mul FourBar-Solve
/t2 exch def
/t3 exch def
} if
class 7 eq {
    /t4min d dup mul c dup mul add a b sub dup mul sub 2 c mul d mul div arccos 180 sub def
    /t4max t4min neg def
    /dt t4max t4min sub def
    /T4max t4min dt Nmax div N mul add def
/arct4 [t4min 1 T4max {}for] def
/arct2 [t4min 1 T4max {/i exch def a b d c i cos mul add c i sin mul FourBar-Solve exch pop} for ] def
/Arct4 [t4min 1 t4max {}for] def
/Arct2 [t4min 1 t4max {/i exch def a b d c i cos mul add c i sin mul FourBar-Solve exch pop} for ] def
/curveM [t4min 1 T4max {/i exch def a b d c i cos mul add c i sin mul FourBar-Solve /t4 i def /t2 exch def /t3 exch def xM yM } for ] def
/centrode [t4min 1 T4max {/i exch def a b d c i cos mul add c i sin mul FourBar-Solve /t4 i def /t2 exch def /t3 exch def xyCIR } for ] def
/fixedcentrode [t4min 1 t4max {/i exch def a b d c i cos mul add c i sin mul FourBar-Solve /t4 i def /t2 exch def /t3 exch def xyCIR } for ] def
/movingcentrode [t4min 1 t4max {/i exch def
     a b d c i cos mul add c i sin mul FourBar-Solve /t4 i def /t2 exch def /t3 exch def
                t3   0  0 MovRef
                t3  xB yB MovRef
                t3  xC yC MovRef
                t3  xD yD MovRef
                InterLines
                /yInter exch def /xInter exch def
                xInter 0 eq yInter 0 eq and {}{xInter yInter} ifelse
                  } for ] def
/t4 t4min dt 360 div N mul add def
a b d c t4 cos mul add c t4 sin mul FourBar-Solve
/t2 exch def
/t3 exch def
} if
class 8 eq {
    /t2min a dup mul d dup mul add b c sub dup mul sub 2 a mul d mul div arccos def
    /t2max t2min neg 360 add def
    /dt t2max t2min sub def
    /T2max t2min dt Nmax div N mul add def
/arct2 [t2min 1 T2max {}for] def
/arct4 [t2min 1 T2max {/i exch def b c neg d a i cos mul sub a neg i sin mul FourBar-Solve pop} for ] def
/Arct2 [t2min 1 t2max {}for] def
/Arct4 [t2min 1 t2max {/i exch def b c neg d a i cos mul sub a neg i sin mul FourBar-Solve pop} for ] def
/curveM [t2min 1 T2max {/i exch def b c neg d a i cos mul sub a neg i sin mul FourBar-Solve /t2 i def /t3 exch def /t4 exch def xM yM} for ] def
/centrode [t2min 1 T2max {/i exch def b c neg d a i cos mul sub a neg i sin mul FourBar-Solve /t2 i def /t3 exch def /t4 exch def xyCIR } for ] def
/fixedcentrode [t2min 1 t2max {/i exch def b c neg d a i cos mul sub a neg i sin mul FourBar-Solve /t2 i def /t3 exch def /t4 exch def xyCIR } for ] def
/movingcentrode [t2min 1 t2max {/i exch def
      b c neg d a i cos mul sub a neg i sin mul FourBar-Solve /t2 i def /t3 exch def /t4 exch def
                t3   0  0 MovRef
                t3  xB yB MovRef
                t3  xC yC MovRef
                t3  xD yD MovRef
                InterLines
                /yInter exch def /xInter exch def
                xInter 0 eq yInter 0 eq and {}{xInter yInter} ifelse
                  } for ] def
/t2 T2max def
b c neg d a t2 cos mul sub a neg t2 sin mul FourBar-Solve
/t3 exch def
/t4 exch def
} if
class 9 eq {
    /t4min c dup mul d dup mul add b a sub dup mul sub 2 c mul d mul div arccos 180 sub def
    /t4max t4min neg def
    /dt t4max t4min sub def
    /T4max t4min dt 360 div N mul add def
/arct4 [t4min 1 T4max {}for] def
/arct2 [t4min 1 T4max {/i exch def a b d c i cos mul add c i sin mul FourBar-Solve exch pop} for  ] def
/Arct4 [t4min 1 t4max {}for] def
/Arct2 [t4min 1 t4max {/i exch def a b d c i cos mul add c i sin mul FourBar-Solve exch pop} for  ] def
/curveM [t4min 1 T4max {/i exch def a b d c i cos mul add c i sin mul FourBar-Solve /t4 i def /t2 exch def /t3 exch def xM yM } for ] def
/centrode [t4min 1 T4max {/i exch def a b d c i cos mul add c i sin mul FourBar-Solve /t4 i def /t2 exch def /t3 exch def xyCIR } for ] def
/fixedcentrode [t4min 1 t4max {/i exch def a b d c i cos mul add c i sin mul FourBar-Solve /t4 i def /t2 exch def /t3 exch def xyCIR } for ] def
/movingcentrode [t4min 1 t4max {/i exch def
     a b d c i cos mul add c i sin mul FourBar-Solve /t4 i def /t2 exch def /t3 exch def
                t3   0  0 MovRef
                t3  xB yB MovRef
                t3  xC yC MovRef
                t3  xD yD MovRef
                InterLines
                /yInter exch def /xInter exch def
                xInter 0 eq yInter 0 eq and {}{xInter yInter} ifelse
                  } for ] def
/t4 t4min dt 360 div N mul add def
a b d c t4 cos mul add c t4 sin mul FourBar-Solve
/t2 exch def
/t3 exch def
} if
class 10 eq {
    /t2min a dup mul d dup mul add b c sub dup mul sub 2 a mul d mul div arccos def
    /t2max t2min neg 360 add def
    /dt t2max t2min sub def
    /T2max t2min dt Nmax div N mul add def
/arct2 [t2min 1 T2max {}for] def
/arct4 [t2min 1 T2max {/i exch def b c neg d a i cos mul sub a neg i sin mul FourBar-Solve pop} for b c neg d a t2max cos mul sub a neg t2max sin mul FourBar-Solve pop] def
/Arct2 [t2min 1 t2max {}for] def
/Arct4 [t2min 1 t2max  {/i exch def b c neg d a i cos mul sub a neg i sin mul FourBar-Solve pop} for b c neg d a t2max cos mul sub a neg t2max sin mul FourBar-Solve pop] def
/curveM [t2min 1 T2max {/i exch def b c neg d a i cos mul sub a neg i sin mul FourBar-Solve /t2 i def /t3 exch def /t4 exch def xM yM} for] def
/centrode [t2min 1 T2max {/i exch def b c neg d a i cos mul sub a neg i sin mul FourBar-Solve /t2 i def /t3 exch def /t4 exch def xyCIR } for] def
/fixedcentrode [t2min 1 t2max {/i exch def b c neg d a i cos mul sub a neg i sin mul FourBar-Solve /t2 i def /t3 exch def /t4 exch def xyCIR } for] def
/movingcentrode [t2min 1 t2max {/i exch def
      b c neg d a i cos mul sub a neg i sin mul FourBar-Solve /t2 i def /t3 exch def /t4 exch def
                t3   0  0 MovRef
                t3  xB yB MovRef
                t3  xC yC MovRef
                t3  xD yD MovRef
                InterLines
                /yInter exch def /xInter exch def
                xInter 0 eq yInter 0 eq and {}{xInter yInter} ifelse
                  } for ] def
/t2 t2min dt Nmax div N mul add def
   b c neg d a t2 cos mul sub a neg t2 sin mul FourBar-Solve
/t3 exch def
/t4 exch def
} if
class 14 eq {
    /t4min 0 def
    /t4max Nmax def
/arct4 [t4min 1 N {}for] def
/arct2 [t4min 1 N {/i exch def a b d c i cos mul add c i sin mul FourBar-Solve exch pop} for  ] def
/Arct4 [t4min 1 Nmax {}for] def
/Arct2 [t4min 1 Nmax {/i exch def a b d c i cos mul add c i sin mul FourBar-Solve exch pop} for  ] def
/curveM  [t4min 1 N {/i exch def a b d c i cos mul add c i sin mul FourBar-Solve /t2 exch def /t3 exch def /t4 i def xM yM} for] def
/centrode [t4min 1 N {/i exch def a b d c i cos mul add c i sin mul FourBar-Solve /t2 exch def /t3 exch def /t4 i def xyCIR } for] def
/fixedcentrode [t4min 1 Nmax {/i exch def a b d c i cos mul add c i sin mul FourBar-Solve /t2 exch def /t3 exch def /t4 i def xyCIR } for] def
/movingcentrode [t4min 1 Nmax  {/i exch def
      a b d c i cos mul add c i sin mul FourBar-Solve /t2 exch def /t3 exch def /t4 i def
                t3   0  0 MovRef
                t3  xB yB MovRef
                t3  xC yC MovRef
                t3  xD yD MovRef
                InterLines
                /yInter exch def /xInter exch def
                xInter 0 eq yInter 0 eq and {}{xInter yInter} ifelse
                  } for ] def
/t4 N def
a b d c t4 cos mul add c t4 sin mul FourBar-Solve
/t2 exch def
/t3 exch def
} if
class 15 eq {
/arct2 [0 1 N{}for] def
/arct4 [0 1 N {/i exch def i 2 div sin a mul b div arcsin i 2 div add } for] def
/Arct2 [0 1 Nmax {}for] def
/Arct4 [0 1 Nmax {/i exch def i 2 div sin a mul b div arcsin i 2 div add } for] def
/curveM [0 1 N {/i exch def /t2 i def /t4 i 2 div dup sin a mul b div arcsin add def /t3 i 2 div dup sin a mul b div arcsin sub def xM yM} for] def
/centrode [0 1 N {/i exch def /t2 i def /t4 i 2 div sin a mul b div arcsin i 2 div add def /t3 i 2 div dup sin a mul b div arcsin sub def xyCIR } for] def
/fixedcentrode  [0 1 Nmax {/i exch def /t2 i def /t4 i 2 div dup sin a mul b div arcsin add def /t3 i 2 div dup sin a mul b div arcsin sub def xyCIR } for] def
/movingcentrode [0 1 Nmax {/i exch def /t2 i def /t4 i 2 div dup sin a mul b div arcsin add def /t3 i 2 div dup sin a mul b div arcsin sub def
                t3   0  0 MovRef
                t3  xB yB MovRef
                t3  xC yC MovRef
                t3  xD yD MovRef
                InterLines
                /yInter exch def /xInter exch def
                xInter 0 eq yInter 0 eq and {}{xInter yInter} ifelse
                  } for ] def
/t2 N def
/t4 N 2 div dup sin a mul b div arcsin add def
/t3 N 2 div dup sin a mul b div arcsin sub def
} if
class 16 eq {
/arct2 [0 1 N {}for] def
/arct4 [0 1 N {/i exch def 180 2 i sin a mul d a i cos mul sub atan mul sub } for] def
/Arct2 [0 1 Nmax {}for] def
/Arct4 [0 1 Nmax {/i exch def 180 2 i sin a mul d a i cos mul sub atan mul sub } for] def
/curveM [0 1 N {/i exch def /t4 180 2 i sin a mul d a i cos mul sub atan mul sub def /t2 i def /t3 t4 t2 sub def xM yM} for] def
/centrode [0 1 N {/i exch def /t4 180 2 i sin a mul d a i cos mul sub atan mul sub def /t2 i def /t3 t4 t2 sub def xyCIR } for] def
/fixedcentrode  [0 1 Nmax {/i exch def /t4 180 2 i sin a mul d a i cos mul sub atan mul sub def /t2 i def /t3 t4 t2 sub def xyCIR } for] def
/movingcentrode [0 1 Nmax {/i exch def /t4 180 2 i sin a mul d a i cos mul sub atan mul sub def /t2 i def /t3 t4 t2 sub def
                t3   0  0 MovRef
                t3  xB yB MovRef
                t3  xC yC MovRef
                t3  xD yD MovRef
                InterLines
                /yInter exch def /xInter exch def
                xInter 0 eq yInter 0 eq and {}{xInter yInter} ifelse
                  } for ] def
/t2 N def
/delta 2 t2 sin a mul d a t2 cos mul sub atan mul def
/t4 180 delta sub def
/t3 t4 t2 sub def
} if
class 17 eq {
    /t4min 0 def
    /t4max Nmax def
/arct4 [t4min 1 N {}for] def
/arct2 [0 1 N {/i exch def 2 i sin b mul a b i cos mul add atan mul } for] def
/Arct4 [t4min 1 t4max{}for] def
/Arct2 [0 1 t4max {/i exch def 2 i sin b mul a b i cos mul add atan mul } for] def
/curveM [0 1 N {/i exch def /t4 i def /t2 2 i sin b mul a b i cos mul add atan mul def
                            /delta 2 t4 mul t2 sub def /t3 t4 delta sub def xM yM} for] def
/centrode [0 1 N {/i exch def /t4 i def /t2 2 i sin b mul a b i cos mul add atan mul def
                            /delta 2 t4 mul t2 sub def /t3 t4 delta sub def xyCIR } for] def
/fixedcentrode [0 1 Nmax {/i exch def /t4 i def /t2 2 i sin b mul a b i cos mul add atan mul def
                            /delta 2 t4 mul t2 sub def /t3 t4 delta sub def xyCIR } for] def
/movingcentrode [0 1 Nmax {/i exch def/t4 i def /t2 2 i sin b mul a b i cos mul add atan mul def
                            /delta 2 t4 mul t2 sub def /t3 t4 delta sub def
                t3   0  0 MovRef
                t3  xB yB MovRef
                t3  xC yC MovRef
                t3  xD yD MovRef
                InterLines
                /yInter exch def /xInter exch def
                xInter 0 eq yInter 0 eq and {}{xInter yInter} ifelse
                  } for ] def
    /t4 N def
    /t2 2 b t4 sin mul a b t4 cos mul add atan mul def
    /delta 2 t4 mul t2 sub def
    /t3 t4 delta sub def
} if
class 18 eq {
    /t4min 0 def
    /t4max Nmax def
/arct4 [0 1 N {}for] def
/arct2 [0 1 N {/i exch def 0.5 180 2 d i 2 div cos mul a div arcsin mul sub i add mul} for] def
/Arct4 [0 1 Nmax {}for] def
/Arct2 [0 1 Nmax {/i exch def 0.5 180 2 d i 2 div cos mul a div arcsin mul sub i add mul} for] def
/curveM [0 1 N {/i exch def /t2 0.5 180 2 d i 2 div cos mul a div arcsin mul sub i add mul def /t4 i def
                /delta 2 d t4 2 div cos mul a div arcsin mul def
                /t3 t4 t2 sub def xM yM} for ] def
/centrode [0 1 N {/i exch def /t2 0.5 180 2 d i 2 div cos mul a div arcsin mul sub i add mul def /t4 i def
                /delta 2 d t4 2 div cos mul a div arcsin mul def
                /t3 t4 t2 sub def xyCIR } for ] def
/fixedcentrode [0 1 Nmax {/i exch def /t2 0.5 180 2 d i 2 div cos mul a div arcsin mul sub i add mul def /t4 i def
                /delta 2 d t4 2 div cos mul a div arcsin mul def
                 xyCIR } for ] def
/movingcentrode [0 1 Nmax {/i exch def
    /t4 i def
    /Delta 2 d t4 2 div cos mul a div arcsin mul def
    /t2 180 Delta sub t4 add 2 div def
    /t3 t4 t2 sub def
                t3 0 0 MovRef
                t3  xB yB MovRef
                t3  xC yC MovRef
                t3  xD yD MovRef
                InterLines
                /yInter exch def /xInter exch def
                xInter 0 eq yInter 0 eq and {}{xInter yInter} ifelse
                  } for ] def
    /t4 N def
    /Delta 2 d t4 2 div cos mul a div arcsin mul def
    /t2 180 Delta sub t4 add 2 div def
    /t3 t4 t2 sub def
} if
class 19 eq {
    /t2min 0 def
    /t2max Nmax def
    /t2 N def
/parallelogram {/t exch def
  /r d a t cos mul sub def
  /s t sin a mul neg def
  /p b def
  /q c neg def
  /D r dup mul s dup mul add p dup mul q dup mul add sub 2 p mul q mul div def
  t sin 0 lt {
   /delta D arccos def
    }
    {
    /delta D arccos neg def
    } ifelse
    /A p q D mul add def
    /B q delta sin mul def
    /t3 A s mul B r mul sub A r mul B s mul add arctan def
    /t4 t3 delta add def
} def
crossed {
% N parallelogram
/arct4 [0 1 N { parallelogram t4 }for] def
/Arct4 [0 1 Nmax { parallelogram t4 }for] def
/curveM [0 1 N{/i exch def /t2 i def i parallelogram xM yM} for ] def
/centrode [0 1 N{/i exch def /t2 i def i parallelogram xyCIR} for ] def
/fixedcentrode [0 1 Nmax {/i exch def /t2 i def i parallelogram xyCIR} for ] def
/movingcentrode [0 1 Nmax {/i exch def /t2 i def i parallelogram
                t3 0 0 MovRef
                t3  xB yB MovRef
                t3  xC yC MovRef
                t3  xD yD MovRef
                InterLines
                /yInter exch def /xInter exch def
                xInter 0 eq yInter 0 eq and {}{xInter yInter} ifelse
                  } for] def
N parallelogram
/t2 N def
    } {
    /t3 0 def
    /t4 N def
/arct4 [t2min 1 N {}for] def
/Arct4 [t2min 1 Nmax {}for] def
/curveM [0 1 N{/i exch def /t2 i def /t3 0 def /t4 t2 def xM yM} for ] def
/centrode [0 1 N{/i exch def /t2 i def /t3 0 def /t4 t2 def xyCIR } for ] def
/fixedcentrode [0 1 Nmax {/i exch def /t2 i def /t3 0 def /t4 t2 def xyCIR } for ] def
/movingcentrode [0 1 Nmax {/i exch def /t2 i def /t3 0 def /t4 t2 def
                t3   0  0 MovRef
                t3  xB yB MovRef
                t3  xC yC MovRef
                t3  xD yD MovRef
                InterLines
                /yInter exch def /xInter exch def
                xInter 0 eq yInter 0 eq and {}{xInter yInter} ifelse
                  } for] def
    /t3 0 def
    /t4 N def
    /t2 N def
    } ifelse
/arct2 [t2min 1 t2 {}for] def
/Arct2 [t2min 1 Nmax {}for] def
} if
%
FourbarDraw
connectedpoints {
0.8 setlinewidth
 a MM Arct2 0 get cos mul a MM Arct2 0 get sin mul moveto
1 1 Arct2 length 1 sub {/j exch def
    a MM Arct2 j get cos mul a MM Arct2 j get sin mul lineto
    } for
0.75 setgray stroke
 d MM c MM Arct4 0 get cos mul add c MM Arct4 0 get sin mul moveto
1 1 Arct4 length 1 sub {/j exch def
    d MM c MM Arct4 j get cos mul add c MM Arct4 j get sin mul lineto
    } for
stroke
1.25 setlinewidth
 a MM arct2 0 get cos mul a MM arct2 0 get sin mul moveto
1 1 arct2 length 1 sub {/j exch def
    a MM arct2 j get cos mul a MM arct2 j get sin mul lineto
    } for
0 0.8 0 setrgbcolor stroke
 d MM c MM arct4 0 get cos mul add c MM arct4 0 get sin mul moveto
1 1 arct4 length 1 sub {/j exch def
    d MM c MM arct4 j get cos mul add c MM arct4 j get sin mul lineto
    } for
 0.9 0 0 setrgbcolor stroke
 1 0.5 0 setrgbcolor
%curveI 0 get curveI 1 get moveto
%2 2 curveI length 2 sub {/j exch def curveI j get curveI j 1 add get lineto} for
stroke
curveM 0 get curveM 1 get moveto
2 2 curveM length 2 sub {/j exch def curveM j get curveM j 1 add get lineto} for
stroke
fixedcentrodes {
0.5 setgray
0 2 fixedcentrode length 4 sub {/j exch def
 /x1 fixedcentrode j get def
 /y1 fixedcentrode j 1 add get def
 /x2 fixedcentrode j 2 add get def
 /y2 fixedcentrode j 3 add get def
 x2 x1 sub dup mul y2 y1 sub dup mul add sqrt dmax le {x1 y1 moveto x2 y2 lineto} if
 } for
stroke
0 2 movingcentrode length 4 sub {/i exch def
 /xtemp movingcentrode i get def
 /ytemp movingcentrode i 1 add get def
/x1 xtemp t3 cos mul ytemp t3 sin mul sub xI add def
/y1 xtemp t3 sin mul ytemp t3 cos mul add yI add def
 /xtemp movingcentrode i 2 add get def
 /ytemp movingcentrode i 3 add get def
/x2 xtemp t3 cos mul ytemp t3 sin mul sub xI add def
/y2 xtemp t3 sin mul ytemp t3 cos mul add yI add def
x2 x1 sub dup mul y2 y1 dup sub mul add sqrt dmax le {x1 y1 moveto x2 y2 lineto} if
 } for
1.5 setlinewidth
1 0 0.5 setrgbcolor
stroke
} if
centrodes {
0 0 0.8 setrgbcolor
1.5 setlinewidth
0 2 centrode length 4 sub {/j exch def
 /x1 centrode j get def
 /y1 centrode j 1 add get def
 /x2 centrode j 2 add get def
 /y2 centrode j 3 add get def
 x2 x1 sub dup mul y2 y1 sub dup mul add sqrt dmax le{x1 y1 moveto x2 y2 lineto} if
 } for
stroke
gsave
0.5 setgray
[3 3] 0 setdash
xB yB moveto
xyCIR1 lineto stroke
xC yC moveto
xyCIR1 lineto stroke
grestore
gsave
1 setgray
xyCIR1 0.4 MM 0 360 arc fill
0 setgray
xyCIR1 0.4 MM 0 360 arc stroke
grestore
} if
}{
0.75 setgray
0 1 Arct2 length 1 sub {/j exch def
    a MM Arct2 j get cos mul a MM Arct2 j get sin mul 0.75 0 360 arc fill
    } for
0 1 Arct4 length 1 sub {/j exch def
    d MM c MM Arct4 j get cos mul add c MM Arct4 j get sin mul 0.75 0 360 arc fill
    } for
0.9 0 0 setrgbcolor
0 1 arct4 length 1 sub {/j exch def
    d MM c MM arct4 j get cos mul add c MM arct4 j get sin mul 0.75 0 360 arc fill
    } for
%1.25 setlinewidth
0 0.8 0 setrgbcolor
0 1 arct2 length 1 sub {/j exch def
    a MM arct2 j get cos mul a MM arct2 j get sin mul 0.75 0 360 arc fill
    } for
1 0.5 0 setrgbcolor
% 0 2 curveI length 2 sub {/j exch def curveI j get curveI j 1 add get 0.75 0 360 arc fill} for
0 2 curveM length 2 sub {/j exch def curveM j get curveM j 1 add get 0.75 0 360 arc fill} for
centrodes {
0 0 0.8 setrgbcolor
0 2 centrode length 2 sub {/j exch def centrode j get centrode j 1 add get 0.75 0 360 arc fill} for
gsave
0.5 setgray
[3 3] 0 setdash
xB yB moveto
xyCIR1 lineto stroke
xC yC moveto
xyCIR1 lineto stroke
grestore
gsave
1 setgray
xyCIR1 0.4 MM 0 360 arc fill
0 setgray
xyCIR1 0.4 MM 0 360 arc stroke
grestore
} if
fixedcentrodes {
0 0 1 setrgbcolor
0 2 fixedcentrode length 2 sub {/j exch def fixedcentrode j get fixedcentrode j 1 add get 0.75 0 360 arc fill} for
%
1 0 0.5 setrgbcolor
0 2 movingcentrode length 2 sub {/i exch def
 /xtemp movingcentrode i get def
 /ytemp movingcentrode i 1 add get def
/x1 xtemp t3 cos mul ytemp t3 sin mul sub xI add def
/y1 xtemp t3 sin mul ytemp t3 cos mul add yI add def
x1 y1 0.75 0 360 arc fill
 } for
} if
} ifelse
0 setgray
0 L 1.25 mul MM neg moveto
/Times-Roman findfont 12 scalefont setfont
class 4 le {(Grashof )} if
class 10 le class 5 ge and{(Non-Grashof )} if
class 11 ge{(Special )} if
(class : ) appendtring class 15 string cvs appendtring
crossed {( [Crossed])}{([Open])} ifelse appendtring show
end
  }%
    \end@SpecialObj
  \ignorespaces}%
\catcode`\@=\PstAtCode\relax
\endinput 