刘华勇 张大明 李 璐 张春晓
(安徽建筑大学数理系,安徽 合肥 230601)
甲骨文,我国迄今为止发现的最为古老的成熟的古文字系统,主要是指殷商和周时期的先民刻龟甲或是兽骨上文字,又称为契文,主要是王室用作记录占卜和刻辞记事。
从书法的角度来讲,甲骨文已经具备了用笔、结构和章法等艺术要素,所以可以称为中国最早的书法艺术作品。早些书法的模拟用的图形类课程中样条曲线,Bezier曲线和NURBS曲线来模拟这些汉字或书法,从而给书法的计算机模拟带来了一些好处,对于汉字和书法的编辑带了不小的改革,但对于甲骨文的模拟和实现带了一些困难.目前用的比较多的是区间曲线来模拟,但由于甲骨文本身具有的特点,比如圆滑等,所以这样的区间曲线不能够解决这样的问题,因此急需找到一种方法来解决存在的问题,从而保护和继承这项传统的艺术。同时在保护和发展的基础上,同时,模拟的数字化甲骨文可以解决甲骨文在电脑中的排版问题和编译的作用,增加和利用利用网络传播,来文化交流这个特殊的艺术品。另外,在设计和艺术领域,需要大量不同风格的艺术字形.甲骨文因为其独特的文化内涵而深受欢迎.但是甲骨文字形呆板单一,不能满足出版广告等设计的需要。因此为了丰富甲骨文的字形,生成不同于原有甲骨文的字形,本文在描绘出轮廓线后,提出一种比圆头体具有更好模拟性的甲骨文轮廓字形即椭圆域控制点形成的甲骨文轮廓字形。
生成的甲骨文是基于圆域B样条曲线及B样条曲线表示的轮廓字形,它是对圆头体的一种改进。当想要书写的字体线条需要不同粗细时,可以直接控制控制点圆域的半径来达到目的。生成字体较好,且成本低大大提高了效率。
令R表示全体实数集合,R+表示非负实数集合.而为平面上的圆域可被定义为:
其中 P0= (x0,y0)∈R2表示中心,r0∈R+为圆域的半径。
若令Ni,k(t)为定义在给定的节点向量上的 k 阶 B 样条基函数。 令(Pi)r=(xi,yi)r,i=0,1…,n为给定的n+1个圆域,将这些圆域作为控制顶点,所生成的相应圆域B样条曲线可被定义为:
按照此形式,圆域B样条曲线可以被看成两部分,即中心线部分和半径函数部分。在这种理解下,一条圆域B样条曲线也可被等价的表示成
图1 三次圆域B样条曲线
本文所谓的骨架线实际上是由若干B样条曲线连接而成的字体的轮廓。如下图3便是图2的骨架线。
图2 甲骨文“月”
图3 轮廓线
字体的一种,主要特点是笔画粗细几乎相同,至少在同一个笔画内宽度相同。并且在笔画的悬空端以半圆封口,即为圆头,而在笔画转弯处以圆弧过渡。在圆头体中,每个笔画的轮廓有四个部分:始端、末端、二根侧边线。侧边线与笔画中心线走向一致。
介绍了圆域B样条曲线,本节也要用到圆域B样条曲线的相关知识。要想得到甲骨文字体,首先要知道它的轮廓,然后用B样条曲线来模拟它的轮廓。因为甲骨文中的单笔画,线条的粗细几乎都是相同的,所以可以直接用半径相同的圆域B样条曲线来绘制。但是在甲骨文中有的线条端点会略带有尖点,我们可以利用圆域半径来调整。
具体的操作:首先用B样条曲线把要写的甲骨文的轮廓线画出,这主要就是找控制点坐标。当控制点坐标确定以后,曲线也就出来了。当画出几条曲线之后,字体的轮廓也就出来了,但是它太细了。接下来便是设计线条的粗细。因为字体的一笔中的线条比较均匀所以可以用相同半径的圆域曲线,当一个字体由多笔组成是要适当调整半径的大小,来达到很好的模拟效果。这其实和圆域曲线是一个道理,只不过它用到的是椭圆域。
甲骨文的设计主要在于下面的这行代码(GUI):
function pushbutton2_Callback(hObject,eventdata,handles)
h_axes=findobj(gcf,′type′,′axes′);h_children_axes=allchild(h_axes);delete(h_children_axes);
hold on
but=1;n=0;xx=[];yy=[];
while but==1
[xi,yi,but]=ginput(1);
plot(xi,yi,′gp′);
n=n+1;
xx(n,1)=xi;
yy(n,1)=yi;
end
t=0:0.001:1;xx(n+1)=2*xx(n)-xx(n-1);yy(n+1)=2*yy(n)-yy(n-1);
for i=n+1:-1:1
xx(i+1)=xx(i);yy(i+1)=yy(i);
end
xx(1)=2*xx(2)-xx(3);yy(1)=2*yy(2)-yy(3);
for i=1:n-1
x=xx(i)*(1/6)*(-t.^3+3*t.^2-3*t+1)+xx(i+1)*(1/6)*(3*t.^3-6*t.^2+4)+xx(i+2)*(1/6)*(-3*t.^3+3*t.^2+3*t+1)+xx(i+3)*(1/6)*t.^3;
y=yy(i)*(1/6)*(-t.^3+3*t.^2-3*t+1)+yy(i+1)*(1/6)*(3*t.^3-6*t.^2+4)+yy(i+2)*(1/6)*(-3*t.^3+3*t.^2+3*t+1)+yy(i+3)*(1/6)*t.^3;
plot(x,y,′r′,′linewidth′,2);axis([020020]);end
通过改变半径使得线条边缘表示为不同的宽度。
运行界面如下:
说明:下图中所写字体中,左边是本文算法实现的,右边图片为网上下载。
图4 本文实现的部分甲骨文字体
图5 互联网上收集的甲骨文字体
图6 上面的字依次为本文实现的字体:朝、呈、北、丑、山、水、牛、向
图7 上面三个图来自互联网上收集的甲骨文字体
图8 上面的字依次为本文实现的字体:天、寿、卓、大
图9 互联网上收集的甲骨文字体
本文生成的甲骨文是基于圆域B样条曲线及B样条曲线表示的轮廓字形,它是对圆头体的一种改进。当想要书写的字体线条需要不同粗细时,可以直接控制控制点圆域的半径来达到目的。生成字体较好,且成本低大大提高了效率。
汉字的处理技术是一项有难度的工作,然而对于毛笔和甲骨文处理技术更是一项挑战的工作。因此本文研究的只是这个领域的很少一部分,还有很多问题需要进一步的深入探索和改进。
[1] (法)吉贝·德芒热,(法)让皮尔·晡热.曲线与曲面的数学:贝济埃模型B-样条模型NURBS模型[M].北京:商务印书馆,2000.
[2] 沈娟.基于曲线轮廓描述的甲骨文字体生成和变形系统研究[D].苏州:苏州大学,2009.
[3] 成敏.外形设计中的几何逼近及图形转换技术研究[D].杭州:浙江大学,2008.
[4] 陈笑,王国瑾.等距曲线的圆域 Bézier逼近[J].软件学报,2005,(4):617-618.
[5] Lin Q,Rokne JG.Disk B curve[J].Computer Aided Geometric Design,1998,(7):721,737.
[6] Farin G.Curves and surfaces for computer aided geometric design:a practical guide (4th edition)[M].New York:Academic Press,1997.
[7] Zhang J W.Two different forms of C-B splines[J].Computer Aided Geometric Design,1997,(1):31-41.
[8] 顾音海.甲骨文发现与研究[M].上海:上海书店出版社,2002.
[9] 祁毓麟,齐作声,等.中国书法艺术[M].沈阳:辽宁美术出版社,2003.