陈 凯

文同学:

见信好!

上次你来信请求我的原谅,并解释说之所以在课上打瞌睡,是因为“更喜欢将想象的心灵放飞于星空间,而不是键盘间”,看上去这也算是个好理由。那么,你应该不会反对做一个和想象有关,并且和星星也有关的实验:你可以画出多少种不同的星号呢?

你也许有点纳闷,不就是键盘上的那个星号,难道还有其他星号不成?没错,我指的就是键盘上的那颗星,请允许我在记事本里,将她那几十种多姿多彩的变换展示给你:她有时是飘落的叶、有时如飞溅的水、有时像典雅的梅、有时似含蓄的泪;她有时亭亭玉立,有时慵懒横卧,有时调皮地歪斜着脑袋看着你……你会想,“呵,这简单啊,改改字体就行了”。且慢,让我调出一种叫“MS Serif”的字体,用最小的字号画出一个星号。但,起初它一点也不像星,怎么看都是一个小方块,不过别急,让我把字号逐渐增大,这时星星的模样也就相应起了大变化,先放四道亮,再闪六道光,最后凝做一朵漂亮的雪花。

你可能有点奇怪,字体明明没变,可字的大小却变了,模样也跟着变化,好像在变魔术。启发你一下,它的道理便是一格一格的将点描绘成字,就像君士坦丁堡曾流行的马赛克镶嵌画(只是镶嵌画并不会长大也不需要长大)。

用正方形网格描点

画星星(MS Serif字体)

用六角形网格描点画星星

一颗原本可爱的描点小星星长大了一点后,样子却有点像乌龟,接下来该怎么办呢?人们想到的解决办法是为长大后的星星再重新描一次点,就像为星星做一次“整容”那样,让它边长大边变化。

好在如今大多数字体都牢牢把握着一种“美容秘诀”,随你放大缩小,模样就是不变。那是怎样的秘诀呢?你自己慢慢研究吧!不过,我敢说,就算是描点,你也未必就能轻松地完成。不信就试试吧。先划上横线几行,再划上竖线几列,然后在这些排成横、列的格子中描点画星星,要求看上去光芒长度相等,角度均匀。瞧,碰到麻烦了吧?你怎样都把握不好星星的身材,不是胖了,就是瘦了,这该怎么办呢?或许,此时联想一下蜂窝,会给你一点启发吧!

做完描点游戏,再来点高难度的挑战:把上面的描点工作交给聪明的电脑程序来做。你会发现,原以为用程序画三条线并不是什么难事,但操作中却调出了三角函数,还总是躲不过一串串烦人的小数。或许你足够聪明,一拍脑袋说:“用极坐标轴得了”,然后就想尝试着把碍手碍脚的X-Y坐标系给“炒鱿鱼”了。不过还没等极坐标轴正式上岗,你旁边十岁的学弟就已经把星号画完了。我几乎能想见他得意地挑着眉毛对你说话的样子:简直小菜一碟,让小海龟前进、后退、转弯,反复六次不就行了。

我本打算用星星来上一整节课,可一节课的时间还真是不够,星星的其他作用多着呢!你先自己想想,再上网查查,下节课我可要问你的。祝学习愉快!

——凯凯 2009年4月10日

本篇书信,纯属虚构,如有雷同,实属巧合。其中所“影射”的技术或有意隐藏的专有名词,读者们应该能猜出其真实所指吧?(答案在本期中找)

《啊!我想到了》专栏参考答案

星号在人类科学文化中作用广泛,仅就信息技术而言,她是正则表达式符号中的重要成员、是最常见的通配符之一、C语言中指针的标识、乘号的替代者等,可在answers.com查阅“*”获得非常丰富的资料;文中有意隐藏的相关技术名词有位图(光栅图)、矢量图、矢量字体、LOGO语言等;本文涉及一些编程代码,实现难度均不高,这里不一一列出;六角形网格在提高二维及三维图形处理精度方面起着重要的作用,相关内容可作为深入的研究性学习所用。