ラベル PostScript の投稿を表示しています。 すべての投稿を表示
ラベル PostScript の投稿を表示しています。 すべての投稿を表示

2015/01/01

2015年賀状

年賀状、なんとか書いた。

%!
<< /PageSize [285 420] >> setpagedevice

/setrandcolor {% def
  /m exch def
  /r1 {m 10 7.8 exp mul rand div} def
  /r2 {m 10 7.3 exp mul rand div} def
  /r3 {m 10 7.2 exp mul rand div} def
  r1 r2 r3 setrgbcolor
} def

/randdirection {rand 8 mod 3 div} def

/f {% def
  /i exch def
  /Legrand findfont
  i 10 add scalefont setfont
  randdirection 105 add rotate
  -100 randdirection 200 mul moveto
  1 1 10 { (2015 ) false charpath pop} for
  gsave
  i 5 div setrandcolor fill
  grestore
  1 1 0.9 setrgbcolor stroke
} def

1 1 100 {% for
  /n exch def
  1.3 setlinewidth
  -100 100 translate
  0 0 moveto
  100 rotate
  20 2 70 {f} for
  showpage 
} for

ごらんのとおりの手抜きコードですが、文字の配置もランダムなので、都合300ページ分をfor分で生成して、見た目がいいのを20枚くらい選ぶという方法をとりました。 おかげで結果はわりとかっこいい。

2013/12/31

2014年賀状的なもの

今年は喪中だから年賀状じゃないんだからね。

%!
<< /PageSize [285 420] >> setpagedevice

/setrandcolor {
  /m exch .1 add def
  /r1 {rand 5 mod 1 div m add} def
  /r2 {rand 3 mod 3 div m add} def
  /r3 {rand 3 mod 3 div m add} def
  r1 r2 r3 setrgbcolor
} def

/f {% def
    dup dup dup
    4 mod 0 eq {(2) 4 1 roll -1 0 rmoveto} if 
    4 mod 1 eq {(0) 3 1 roll -3 0 rmoveto} if 
    4 mod 2 eq {(1) 2 1 roll -3 0 rmoveto} if 
    4 mod 3 eq {(4 ) -5 0 rmoveto} if
} def

/drawyear { % def
  4 1 64 { % for
    /i exch def
    /v { i i mul i mul 0.0003 mul } def
    /w { i 15 add 2 div } def
    /d { -360 w mul 2 3.1415 mul 65 mul div } def % -360w/(2pi*65)
    d rotate
    /Titania findfont
    2 w mul scalefont setfont
    v 0 rmoveto
    0.001 setrandcolor
    i f show
  } for
} def

1 1 20 { % for
    /n exch def

    93 160 translate 
    135 rotate
    0 0 moveto
    drawyear

    100 rotate
    150 -140 moveto
    0 setgray
    /Palatino-Bold-Italic findfont 12 scalefont setfont
    n =string cvs show
    0 -2 rmoveto (/) show
    0 -2 rmoveto (20) show
    showpage 
} for

例年に増して芸がない感じもするけどシンプルなのがいちばんということで。

2012/12/30

2013年賀状

年賀状書いた。

%!
<< /PageSize [285 420] >> setpagedevice

% excerpt from Bill Casselman's 
% "Mathematical Illustrations - a manual of geometry and PostScript"
/ctransform { load
  1 dict begin
  /f exch def
  [{[3 1 roll f {moveto}]}
   {[3 1 roll f {lineto}]}
   {[7 1 roll
     f 6 2 roll
     f 6 2 roll
     f 6 2 roll
     {curveto}]}
   {[{closepath}]}
   pathforall
  ]
  newpath
  {aload pop exec} forall
  end
  } def

/f { % u = (x^2-y^2) / 200, v = 2xy / 100
  /y exch def
  /x exch def
  x dup mul y dup mul sub 150 div
  1.2 x mul y mul 100 div
} def

/fcn { % u = ((x-100)^2-y^2) / 7 , v = 1.2xy / 7
  /y exch def
  /x exch def
  x 100 sub dup mul y dup mul sub 28 div
  1.2 x mul y mul 7 div
} def

/setrandcolor {
  /m exch .4 add def
  /r1 {rand 1 mod 1 div m add} def
  /r2 {rand 3 mod 17 div m add} def
  /r3 {rand 10 mod 17 div m add} def
  r1 r2 r3 setrgbcolor
} def

/randcgrid {
  currentlinewidth 10 div setlinewidth
    0 .5 300 {
      /i exch def
      i 0 exch moveto 300 0 rlineto /f ctransform
      i 400 div setrandcolor stroke} for
    0 .5 300 {
      /i exch def
      i 0 moveto 0 300 rlineto /f ctransform
      i 300 div setrandcolor stroke} for
} def

/xoffset 200 def

0 1 20{
  /n exch def

  xoffset 10 add -10 translate randcgrid
  0 xoffset sub 20 translate
  0 0 moveto
  newpath
  /Titania findfont 11 scalefont setfont
  0.7 0.1 0.1 setrgbcolor
  12 5.5 moveto
  (2008 2009 2010 2011 2012 2013 2014) true charpath
  /fcn ctransform clip
  /fcn ctransform clip
  1 0.5 0.55 setrgbcolor
  fill
  stroke
  newpath
  1 0 0 setrgbcolor
  120 setlinewidth
  145 140 moveto
  145 400 lineto
  stroke

  initclip
  20 10 moveto
  /Georgia-Bold findfont 10 scalefont setfont
  0 0 0 setrgbcolor
  n =string cvs show
  (/20) show
  showpage
  0 0 moveto
} for

"Mathematical Illustrations"を読みつつパスを変換(実質的には等角写像でぐにゅっと曲げた)して生成した。/fcn が西暦の文字列を構成するパスを変換するための写像を表す関数で、/f が矩形の格子を背景のテクスチャへと変換する写像を表す関数。

SDIM0193

利用したフォントは Titania 。毎年、フォント探しに一番時間がかかってるような気がする。

毎年、親戚や家族付き合いのある友人向けに20枚くらいだけ印刷してて、今年のものは「2008年に生まれた息子も5歳を迎えます今年も来年も引き続きよろしくお願いします」と読みます。去年のものはだいぶ色きちがいになってしまったので、今年はあっさりとした配色にして、何か手書きするスペースを残しました。