年賀状書いた。
%!
<< /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
が矩形の格子を背景のテクスチャへと変換する写像を表す関数。
利用したフォントは Titania 。毎年、フォント探しに一番時間がかかってるような気がする。
毎年、親戚や家族付き合いのある友人向けに20枚くらいだけ印刷してて、今年のものは「2008年に生まれた息子も5歳を迎えます今年も来年も引き続きよろしくお願いします」と読みます。去年のものはだいぶ色きちがいになってしまったので、今年はあっさりとした配色にして、何か手書きするスペースを残しました。