% --- cilinder körlapja ---
/lap {
  /i 0 def
  1 1 24 {
    -15 i mul rotate
    0 0 moveto
    r 0 lineto
    15 i  mul rotate
    0 0 r -15 i mul -15 i 1 add mul arcn
    i 12 lt
      {i 14 div}
      {13 i 11 sub sub 14 div}
      ifelse
    setgray fill
    /i i 1 add def
  } for
} def

                                                        % --- cilinder "cső" része ---
/cso {
  /i 1 def
  -3 0 moveto
  1 1 12 {
    0 -12 rlineto
    0 -12 3 180 15 i 1 sub mul add 180 15 i mul add arc
    0 12 rlineto
    0 0 3 180 15 i mul add 180 15 i 1 sub mul add arcn
    i 14 div setgray fill
    15 i mul rotate
    -3 0 moveto
    -15 i mul rotate
    i 1 add
    /i exch def
  } for
} def
                                                            % ------ főprogram ------
                                                            % --- induló paraméterek ---
20 20 scale
10 20 translate
0 setlinewidth

                                                            % --- cilinder ---
1 .5 scale
gsave
/r 3 def
lap
0 -12 translate
/r 5 def
lap
grestore
cso