一种生成毛笔笔迹的方法

文档序号:6515660阅读:354来源:国知局
一种生成毛笔笔迹的方法
【专利摘要】本发明提供一种生成毛笔笔迹的方法,选取一能显示基本图形的设备,充当画布;获取设备被按下的轨迹点位置;初始化相关变量;设备上有移动发生,记下移动后的当前轨迹点位置;求当前轨迹点跟前一轨迹点之间的中点坐标来替代当前轨迹点坐标;计算出当前笔迹的实际笔宽;将轨迹点变换成绘制点;在设备上设置线帽;依次连接绘制点;轨迹点向前赋值;直到设备弹开,然后绘制出最后一笔笔迹。本发明的生成毛笔笔迹的方法,通过分析轨迹点分布特征生成毛笔笔迹,可按顺序接收轨迹,结合基本绘图函数模拟绘制,不同使用者有各自的特色笔迹,绘制效率高,还可实时显示。
【专利说明】一种生成毛笔笔迹的方法
【技术领域】
[0001]本发明涉及绘图领域,尤其涉及一种由轨迹点模拟毛笔笔迹的方法。
【背景技术】
[0002]近年来绘图领域关于模拟人体输入发展迅速。在此过程中,模拟出毛笔字效果成为该领域的焦点。传统的做法是:由设备获取一列轨迹点,然后将这些轨迹点跟后台安排好的字体库做匹配运算,然后把最贴近的那种字体风格显示出来。比如说,有:王羲之风格、黄庭坚风格等。这种做法,虽然也是可以模拟出毛笔笔迹效果,但存在如下不足:
[0003](I)绘制过程无法实时显示出效果,必须等确定绘制完后,经过后台匹配运算后才能显现出笔迹效果;
[0004](2)不同的使用者应该会有不同的风格,然而这种方式只能显示出后台预设的几种风格,没有特色。
[0005]基于上面不足点,就急需一种绘制高效率、实时显示、不同使用者有各自的特色的模拟毛笔笔迹方法。本发明就是为了解决这个问题而提出的一种的方法。
【发明内容】

[0006]本发明要解决的技术问题,在于提供一种生成毛笔笔迹的方法,通过分析轨迹点分布特征生成毛笔笔迹,可按顺序接收轨迹,结合基本绘图函数模拟绘制,不同使用者有各自的特色笔迹,绘制效率高,还可实时显示。
[0007]本发明是这样实现的:一种生成毛笔笔迹的方法,包括
[0008]步骤10、选取一能显示基本图形的设备,充当画布;
[0009]步骤20、获取设备被按下的轨迹点位置:DownPoint ;
[0010]步骤30、初始化相关变量:
[0011]步骤301、设置基础笔宽 PenWidthO,并令前一笔笔迹 PrePenWidth=PenWidthO ;
[0012]步骤302、设置绘制点Pointk (k=l, 2,3,..η)的个数,即η的取值;然后令:Pointl=DownPoint ;
[0013]Point2=Pointl ;
[0014]Point3=Pointl ;
[0015]Point4=Pointl ;
[0016]…
[0017]Pointn=Pointl ;其中,步骤301和步骤302不限先后顺序;
[0018]步骤40、设备上有移动发生,记下移动后的当前轨迹点位置=MovePoint ;
[0019]步骤50、求步骤40的当前轨迹点跟前一轨迹点之间的中点坐标,并记录下来替换掉当前轨迹点的坐标;求该中点坐标的公式为:
[0020]Pointn.X= (MovePoint.X+Point (n_l).X) /2 ;
[0021]Pointn.Y= (MovePoint.Y+Point (n~l).Y) /2 ;[0022]步骤60、计算出当前笔迹的实际笔宽,移动的速度越大,PenWidth越小;
[0023]步骤70、将轨迹点变换成绘制点,即对轨迹点Pointk (k=l,2,3,…η)的坐标值进行变换,形成绘制点的坐标值,变换公式如下:
[0024]令:x=Pointk.X;
[0025]y=Pointk.Y;
[0026]XI =X^r Co s+y S i η;
[0027]yl=_x*rSin+y*rCos;
[0028]DrawPointk.X=xl*2;
[0029]DrawPointk.Y=yl;
[0030]其中:rSin=sin(A),rCos=cos (A),0〈=A〈=360 ;Pointk.X 为轨迹点的 X 轴坐标值、Pointk.Y为轨迹点的Y轴坐标值、DrawPointk.X为绘制点的X轴坐标值、DrawPointk.Y为绘制点的Y轴坐标值、A为旋转角度,是个可设定的常量,是个经验值,且该A值在步骤70中设置;该步骤70至少执行一次;
[0031]步骤80、在设备上设置线帽;[0032]步骤90、依次连接绘制点,完成笔迹的绘制;[0033]步骤100、轨迹点向前赋值,即:[0034]Pointl=Point2 ;[0035]Point2=Point3 ;`[0036]Point3=Point4 ;[0037]…[0038]Pointn=Point (n_l);[0039]步骤110、如果设备上有移动动作继续发生,则返回到步骤40 ;如果设备弹开,记下弹开的轨迹点UpPoint的位置坐标;[0040]令:Pointn.X=UpPoint.X ;[0041]Pointn.Y=UpPoint.Y ;[0042]步骤120,利用步骤70至90绘制出最后一笔笔迹。[0043]进一步的,所述步骤60中出当前笔迹的实际笔宽计算过程如下:[0044]步骤611、取轨迹点Pointl、Point2‘“Pointn中任意两个点,并计算该两个点的距离 Len ;[0045]步骤612、令kl=Len/m, m为经验值,m的取值范围为:m>0[0046]步骤613、令k2=l -kl,如果k2〈=0,那么令k2=0.2 ;这里0.2是一个常量,可视为一经验值,意义就是笔宽的最小比例值;[0047]步骤 614、计算当前笔宽:PenWidth=PenWidthO*k2 ;[0048]步骤615、将当前笔宽赋值给prePenWidth,以便计算下一笔笔宽时用。[0049]其中,所述步骤614中,如果计算所得的当前笔宽落差大于2(常数,可视为经验值,
意义就是:允许的前后两个笔迹的笔宽最大落差),即,如果Abs (prePenWidth-PenWidth)>2,那么,调整计算所得的当前笔宽:PenWidth=prePenWidth+ (PenWidth-prePenWidth) *2/(Abs (PenWidth-prePenWidth))。这样可防止前后两笔笔宽因落差太大,而导致笔迹有停顿感。[0050]进一步的,所述步骤30还包括初始化墨迹稀释度preAlpha:即
[0051]步骤303、令preAlpha=PenAlphaO,其中PenAlphaO为初始化透明度的常数,可视为经验值;其中,步骤301、步骤302和步骤303不限先后顺序;所述步骤60还包括当前笔迹的墨迹稀释度的计算,移动的速度越大,墨迹稀释度就越小;所述步骤80还包括设备对笔迹透明度的处理。这样绘成的笔迹效果看起来更逼真。
[0052]进一步的所述墨迹稀释度的具体计算过程是:
[0053]步骤621、令PenAlpha=PenAlphaO*k3 ;其中,k3>0,是一经验值,移动的速度越大,k3越小,反之移动的速度越小,k3越大;
[0054]步骤622、判断前后两笔的透明度落差,如果:
[0055]abs (PenAlpha-preAlpha) >3 (这里3是个常数,可视为经验值),
[0056]那么按下面公式调整:
[0057]PenAlpha=preAlpha+(PenAlpha-preAlpha)*3/ (Abs (PenAlpha-preAlpha))
[0058]步骤623、将PenAlpha赋值给preAlpha,以便计算下一笔透明度用:
[0059]preAlpha=PenAlpha。
[0060]进一步的,所述步骤30还包括初始化笔迹的颜色=PenColorO ;所述步骤80还包括设备对绘制笔颜色属性的设置。
[0061]进一步的,所述步骤90中变换后的点连接用直线段、样条曲线或者函数曲线连接,实现不同的绘制效果。
[0062]进一步的,所述步骤70连续执行两次以上时,每次执行的旋转角度A的值相同或不相同,所谓一次指的是采取某个A值对每个Pointk都用公式变换得到DrawPointk,且该A值需在步骤70中设置。
[0063]本发明具有如下优点:本发明的生成毛笔笔迹的方法,通过分析轨迹点分布特征生成毛笔笔迹,可按顺序接收轨迹,结合基本绘图函数模拟绘制,不同使用者有各自的特色笔迹,绘制效率高,还可实时显示。
【专利附图】

【附图说明】
[0064]下面参照附图结合实施例对本发明作进一步的说明。
[0065]图1为本发明方法执行流程图。
[0066]图2为本发明实施一的最终绘制效果图。
[0067]图3为本发明实施二的最终绘制效果图。
[0068]图4为本发明实施三的最终绘制效果图。
[0069]图5为本发明实施四的最终绘制效果图。
【具体实施方式】
[0070]如图1所示,本发明的生成毛笔笔迹的方法,包括
[0071]步骤10、选取一能显示基本图形(如直线、曲线等)的设备,充当画布;
[0072]步骤20、获取设备被按下的轨迹点位置=DownPoint ;
[0073]步骤30、初始化相关变量:
[0074]步骤301、设置基础笔宽PenWidthO,并令前一笔笔迹PrePenWidth=PenWidthO ;根据需要还可设置笔迹的颜色=PenColorO ;
[0075]步骤302、设置绘制点Pointk (k=l, 2,3,..η)的个数,即η的取值;然后令:
[0076]Pointl=DownPoint ;
[0077]Point2=Pointl ;
[0078]Point3=Pointl ;
[0079]Point4=Pointl ;
[0080]…
[0081]Pointn=Pointl ;
[0082]步骤303、初始化墨迹稀释度 preAlpha:令 preAlpha=PenAlphaO,其中 PenAlphaO为表示透明度的常数;如果限定透明度范围在[0,255],即O表示完全透明,255表示完全不透明,那么常数PenAlphaO取值范围即是[0,255],这里可以将其视为一经验值,可以根据实际情况做相应的调整。其中,步骤301、步骤302和步骤303不限先后顺序。步骤40、设备上有移动发生,记下移动后的当前轨迹点位置=MovePoint ;步骤50、求步骤40的当前轨迹点跟前一轨迹点之间的中点坐标,并记录下来替换掉当前轨迹点的坐标;求该中点坐标的公式为:
[0083]Pointn.X= (MovePoint.X+Point (η-1).X) /2 ;
[0084]Pointn.Y= (MovePoint.Y+Point(η_1).Y)/2 ;
[0085]步骤60、计算出当前笔 迹的实际笔宽,移动的速度越大,Penffidth越小;该步骤还可包括当前笔迹的墨迹稀释度的计算,移动的速度越大,墨迹稀释度就越小;
[0086]其中,当前笔迹的实际笔宽计算过程如下:
[0087]步骤611、取轨迹点Pointl、Point2…Pointn中任意两个点,也可以固定取某两点,并计算该两个点的距离Len ;其中,取轨迹点Pointl、Point2…Pointn中任意两个点是指:每次均随机选择两个任意的点,或当前取的点与上一次取的点相同。
[0088]步骤612、令kl=Len/m,m为经验值,m的取值范围为m>0,该值的意义:对某个输入源,取两个不同的m值:ml、m2,分别对其进行模拟计算,如果ml>m2那么由ml模拟出来的笔迹整体笔宽会比较小,反之会比较大:
[0089]步骤613、令k2=l-kl,如果k2〈=0,那么令k2=0.2,0.2可视为一常数,经验值,意义就是:允许的最小笔宽比例值;
[0090]步骤614、计算当前笔宽:PenWidth=PenWidthO*k2 ;如果计算所得的当前笔宽与前一笔宽prePenWidth落差大于2,这里2可视为一经验值,意义:前后两笔允许的最大笔宽落差,即,
[0091]如果Abs (prePenWidth-PenWidth) >2,那么,调整计算所得的当前笔宽:PenWidth=prePenffidth+(Penffidth-prePenffidth)*2/(Abs(Penffidth-prePenffidth))。
[0092]步骤615、将当前笔宽赋值给prePenWidth,以便计算下一笔笔宽时用。
[0093]所述墨迹稀释度的具体计算过程是:
[0094]步骤621、令PenAlpha=PenAlphaO*k3 ;其中,k3>0,是一经验值,移动的速度越大,k3越小,反之移动的速度越小,k3越大;取值时,可以令k3=k2,或者可以指定一个固定值,甚至通过其他的方式计算得到的一个合理的值。
[0095]步骤622、判断前后两笔的透明度落差,如果:[0096]abs (PenAlpha-preAlpha) >3 (这里 3 为一经验值),
[0097]那么按下面公式调整:
[0098]PenAlpha=preAlpha+(PenAlpha-preAlpha)*3/ (Abs (PenAlpha-preAlpha))
[0099]步骤623、将PenAlpha赋值给preAlpha,以便下一笔计算透明度用:
[0100]preAlpha=PenAlpha。
[0101]步骤70、将轨迹点变换成绘制点,即对轨迹点Pointk (k=l, 2,3,…η)的坐标值进行变换,形成绘制点的坐标值,变换公式如下:
[0102]令:x=Pointk.X;
[0103]y=Pointk.Y;
[0104]xl=x*rCos+y*rSin;
[0105]yl=-x*rSin+y*rCos;
[0106]DrawPointk.X=xl*2;
[0107]DrawPointk.Y=yl;
[0108]其中:rSin=sin(A),rCos=c`os (A), 0<=A<=360 ;Pointk.X 为轨迹点的 X 轴坐标值、Pointk.Y为轨迹点的Y轴坐标值、DrawPointk.X为绘制点k的X轴坐标值、DrawPointk.Y为绘制点k的Y轴坐标值、A为旋转角度,且该A值在步骤30或步骤70中设置,这里的A为一常数,每执行一次步骤70,就是对所有轨迹点进行变换,在同一次变换中,A的值要取同一个值;该步骤可以执行至少一次,对任意两次的变换,A的值可以取不同值;且每变换一次相当于获取一组绘制点。
[0109]步骤80、在设备上设置线帽,所谓线帽就是笔迹之间的连接方式,这里采取圆形连接,一般设备的绘图接口都有有提供相关的设置,只要调用即可;若前面步骤有包含墨迹稀释度的计算及笔迹的颜色=PenColorO的初始化,则该步骤还包括设备对笔迹透明度的处理及设备对绘制笔颜色属性的设置。
[0110]步骤90、依次连接绘制点,完成笔迹的绘制;其连接可以用样条曲线连接或直线段连接,甚至其他的函数曲线,根据不同的连接曲线,产生的效果会不一样。
[0111]步骤100、轨迹点向前赋值,SP:
[0112]Pointl=Point2 ;
[0113]Point2=Point3 ;
[0114]Point3=Point4 ;
[0115]…
[0116]Pointn=Point (n_l);
[0117]步骤110、如果设备上有移动动作继续发生,则返回到步骤40 ;如果设备弹开,记下弹开的轨迹点UpPoint的位置坐标;
[0118]令:Pointn.X=UpPoint.X ;
[0119]Pointn.Y=UpPoint.Y ;
[0120]步骤120,利用步骤70至90绘制出最后一笔笔迹。
[0121]实施例一
[0122]步骤10、选取一能显示基本图形(如直线、曲线等)的设备,充当画布;
[0123]步骤20、获取设备被按下的轨迹点位置=DownPoint ;[0124]步骤30、初始化相关变量:
[0125]步骤301、设置基础笔宽PenWidthO,并令前一笔笔迹PrePenWidth=PenWidthO ;根据需要还可设置笔迹的颜色=PenColorO ;
[0126]步骤302、设置绘制点Pointk (k=l, 2,3,..η)的个数为4,即η=4 ;然后令:
[0127]Pointl=DownPoint ;
[0128]Point2=Pointl ;
[0129]Point3=Pointl ;
[0130]Point4=Pointl ;
[0131]步骤40、设备上有移动发生,记下移动后的当前轨迹点位置=MovePoint ;
[0132]步骤50、求步骤40的当前轨迹点Point4跟前一轨迹点Point3之间的中点坐标,并记录下来替换掉当前轨迹点Point4的坐标;求该中点坐标的公式为:
[0133]Point4.X= (MovePoint.X+Point3.X) /2 ;
[0134]Point4.Y= (MovePoint.Y+Point3.Y) /2 ;
[0135]步骤60、计算出 当前笔迹的实际笔宽,移动的速度越大,PenWidth越小;其中,当前笔迹的实际笔宽计算过程如下:
[0136]步骤611、取轨迹点Pointl、Point2…Point4中任意两个点,也可以固定某两点,并计算该两个点的距离Len ;
[0137]步骤612、令 kl=Len/m, m=12 ;
[0138]步骤613、令 k2=l-kl,如果 k2〈=0,那么令 k2=0.2 ;
[0139]步骤614、计算当前笔宽:PenWidth=PenWidthO*k2 ;如果计算所得的当前笔宽与前一笔宽prePenWidth落差大于2,即,
[0140]如果Abs (prePenWidth-PenWidth) >2,那么,调整计算所得的当前笔宽:PenWidth=prePenffidth+(Penffidth-prePenffidth)*2/(Abs(Penffidth-prePenffidth))。
[0141]步骤615、将当前笔宽赋值给prePenWidth,以便计算下一笔笔宽时用。
[0142]步骤70、将轨迹点变换成绘制点,即对轨迹点Pointk (k=l, 2,3,…η)的坐标值进行变换,形成绘制点的坐标值,变换公式如下:先设置
[0143]Α=-45° ,则 rSin=sin (A) =sin (-45。), rCos=cos (A) =cos (-45° );
[0144]X=Pointk.X;
[0145]y=Pointk.Y;
[0146]xl=x*rCos+y*rSin=x*cos(-45° )+y*sin(_45° );
[0147]yl=-x*rSin+y*rCos=-x*sin(-45。 )+y*cos(_45° );
[0148]DrawPointk.X=xI*2DrawPointk.Y=yl
[0149]解释如下:Pen.ScaleTransform(0.5, 1.0),作用是将X方向的笔宽缩小一半,这里直接跟步骤70 =DrawPointk.X=xl*2;相对应,因为直接将X缩小一半,为了笔迹在原先的位置显示,笔迹将坐标扩大对应的倍数。这里0.5、2是常数,可视为经验值,并且要求两个值大于零,且相乘为1.如果不加上旋转因素,那么结果将是:在X方向笔宽是最小的,在Y方向笔宽是最大的,其他方向就是这两个方向的分解值,经过实践得出这种效果不好,必须让其旋转一个角度,比如A=45度,就是45度时笔宽是最小的,跟45度方向垂直的的方向笔宽到达最大值,其他方向的笔宽就是这两个方向的分解值。这是本发明的原理,即变换步骤70的目的。在一些绘图设备接口会提供一些接口,直接调用就可以实现这种效果,如果没有就必须按本发明规规矩矩的设计执行。
[0150]本实施例中,步骤70连续执行三次,且每执行一次就相当于得到一组绘制点,并且每次的A值取不同值,-45°,135° ,45°。
[0151]步骤80、在设备上设置线帽及绘制笔颜色属性。
[0152]步骤90、依次连接绘制点,完成笔迹的绘制;其连接是用样条曲线连接。
[0153]步骤100、轨迹点向前赋值,即:
[0154]Pointl=Point2 ;
[0155]Point2=Point3 ;
[0156]Point3=Point4 ;
[0157]步骤110、如果设备上有移动动作继续发生,则返回到步骤40 ;如果设备弹开,记下弹开的轨迹点UpPoint的位置坐标;
[0158]令:Pointn.X=UpPoint.X ;
[0159]Pointn.Y=UpPoint.Y ;
[0160]步骤120,利用步骤70至90绘制出最后一笔笔迹。最后绘制的效果如图2所示,该绘制效果看起来,笔迹较生硬,缺乏笔墨稀释处理,即灰度透明效果的处理。
[0161]实施例二
[0162]该实施例二与实施一的区别在于,加入笔墨稀释处理,S卩加入“透明度”因素,通常书写速度越快,除了笔迹宽度越小外,“笔墨”也应该越稀。
[0163]因此,在实施例一中的一些步骤中做相应调整,调整如下:
[0164]1、实施例二在步骤30中增加步骤303,
[0165]步骤303、初始化墨迹稀释度preAlpha:令preAlpha=PenAlphaO,其中PenAlphaO=128。
[0166]2、实施例二在步骤60中增加墨迹稀释度的具体计算过程:
[0167]步骤621、令PenAlpha=PenAlphaO*k3 ;其中,k3=这里直接取计算笔宽过程的提到的k2 ;
[0168]步骤622、判断前后两笔的透明度落差,如果:
[0169]abs (PenAlpha-preAlpha) >3
[0170]那么按下面公式调整:
[0171]PenAlpha=preAlpha+(PenAlpha-preAlpha)*3/ (Abs (PenAlpha-preAlpha))
[0172]步骤623、将PenAlpha赋值给preAlpha,以便下一笔计算透明度用:
[0173]preAlpha=PenAlpha。
[0174]3、实施例二在步骤80中增加设备对笔迹透明度的处理过程。
[0175]其余步骤与实施例一相同,此处不再重复。最后绘制的效果如图3所示,该绘制效果看起来,笔迹更加柔和、逼真。
[0176]实施例三
[0177]该实施例三与实施一的区别在于:
[0178]1、实施例三中的步骤70只执行一次,且A的取值为45° ;
[0179]2、实施例三中的步骤90连接绘制点时是用直线连接;[0180]3、实施例三在步骤30初始化的过程中,初始笔宽的值设置较小。
[0181]其余步骤与实施例一相同,此处不再重复。最后绘制的效果如图4所示,该绘制效果相对实施例一而言,笔迹效果差不多,但因步骤70只执行一次,步骤90连接绘制点时是用直线连接,实现会显得更简单,计算量也更小。
[0182]实施例四
[0183]该实施例四与实施三的区别在于加入笔墨稀释处理,即加入“透明度”因素,因此,在实施例三中的一些步骤中做相应调整,调整如下:
[0184]1、实施例二在步骤30中增加步骤303,
[0185]步骤303、初始化墨迹稀释度preAlpha:令preAlpha=PenAlphaO,其中PenAlpha0=30o
[0186]2、实施例二在步骤60中增加墨迹稀释度的具体计算过程:
[0187]步骤621、令PenAlpha=PenAlphaO*k3 ;其中,k3>0,是一经验值,移动的速度越大,k3越小,反之移动的速度越小,k3越大;
[0188]步骤622、判断前后两笔的透明度落差,如果:
[0189]abs (PenAlpha-preAlpha) >3
[0190]那么按下面公式调整:
[0191]PenAlpha=preAlpha+(PenAlpha-preAlpha)*3/ (Abs (PenAlpha-preAlpha))
[0192]步骤623、将PenAlpha赋值给preAlpha,以便下一笔计算透明度用:
[0193]preAlpha=PenAlpha。
[0194]从效果图中可以看出,采取不同的经验值、绘制连接线的选取、变换公式的应用等合理搭配使用,可以调节出不同的效果。
[0195]另外,本发明提到很多常数,即经验值。在实际操作中,可以将这些经验值做成可以设定的方式,这样,画布设备根据不同的输入源就可以调整这些参数对应的最佳值,从而使笔迹达到一个最佳状态。
[0196]虽然以上描述了本发明的【具体实施方式】,但是熟悉本【技术领域】的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。
【权利要求】
1.一种生成毛笔笔迹的方法,其特征在于:包括步骤10、选取一能显示基本图形的设备,充当画布;步骤20、获取设备被按下的轨迹点位置=DownPoint ;步骤30、初始化相关变量:步骤301、设置基础笔宽PenWidthO,并令前一笔笔迹PrePenWidth=PenWidthO ;步骤302、设置绘制点Pointk(k=l,2,3,..η)的个数,即η的取值;然后令:Pointl=DownPoint ;Point2=Pointl ;Point3=Pointl ;Point4=Pointl ;Pointn=Pointl ;其中,步骤301和步骤302不限先后顺序;步骤40、设备上有移动发生,记下移动后的当前轨迹点位置=MovePoint ;步骤50、求步骤40的当前轨迹点跟前一轨迹点之间的中点坐标,并记录下来替换掉当前轨迹点的坐标;求该中点坐标的公式为:Pointn.X= (MovePoint.X+Point(n_l).X) /2 ;Pointn.Y= (MovePoint.Y+`Point(n_l).Y) /2 ;步骤60、计算出当前笔迹的实际笔宽,移动的速度越大,PenWidth越小;步骤70、将轨迹点变换成绘制点,即对轨迹点Pointk (k=l,2,3,…η)的坐标值进行变换,形成绘制点的坐标值,变换公式如下:令:x=Pointk.X;y=Pointk.Y;XI=X^rCo s+yS i η;yl=—X氺rSin+y氺rCos;DrawPointk.X=xl*2;DrawPointk.Y=yl;其中:rSin=sin (A),rCos=cos (A),0〈=A〈=360 ;、Pointk.X 为轨迹点 k 的 X 轴坐标值、Pointk.Y为轨迹点k的Y轴坐标值、DrawPointk.X为绘制点k的X轴坐标值、DrawPointk.Y为绘制点k的Y轴坐标值、A为旋转角度,是个可设定的常量;该步骤70至少执行一次;步骤80、在设备上设置线帽;步骤90、依次连接绘制点,完成笔迹的绘制;步骤100、轨迹点向前赋值,即:Pointl=Point2 ;Point2=Point3 ;Point3=Point4 ;Pointn=Point(n_l);步骤110、如果设备上有移动动作继续发生,则返回到步骤40 ;如果设备弹开,记下弹开的轨迹点UpPoint的位置坐标;令:Pointn.X=UpPoint.X ;Pointn.Y=UpPoint.Y ;步骤120,利用步骤70至90绘制出最后一笔笔迹。
2.根据权利要求1所述的一种生成毛笔笔迹的方法,其特征在于:所述步骤60中出当前笔迹的实际笔宽计算过程如下:步骤611、取轨迹点Pointl、Point2…Pointn中任意两个点,并计算该两个点的距离Len ;步骤612、令kl=Len/m, m为经验值,m的取值范围为:m>0:步骤 613、令 k2=l -kl,如果 k2〈=0,那么令 k2=0.2 ;步骤 614、计算当前笔宽:PenWidth=PenWidthO*k2 ;步骤615、将当前笔宽赋值给prePenWidth,以便计算下一笔笔宽时用。
3.根据权利要求2所述的一种生成毛笔笔迹的方法,其特征在于:所述步骤614中,如果计算所得的当前笔宽落差大于2,即,如果Abs (prePen Width-PenWidth) >2,那么,调整计算所得的当前笔宽:Penffidth = prePenffidth + (Penffidth-prePenffidth) *2/(Abs(Penffidth-prePenffidth))。
4.根据权利要求1所述的一种生成毛笔笔迹的方法,其特征在于:所述步骤30还包括初始化墨迹稀释度preAlpha:即步骤303、令preAlpha=PenAlphaO,其中PenAlphaO为表示透明度的初始值;其中,步骤301、步骤302和步骤303不限先后顺序;所述步骤60还包括当前笔迹的墨迹稀释度的计算,移动的速度越大,墨迹稀释度就越小,即墨迹越稀;所述步骤80还包括设备对笔迹透明度的处理。
5.根据权利要求4所述的一种生成毛笔笔迹的方法,其特征在于:所述墨迹稀释度的具体计算过程是:步骤621、令PenAlpha=PenAlphaO*k3 ;其中,k3>0,是一经验值,移动的速度越大,k3越小,反之移动的速度越小,k3越大;步骤622、判断前后两笔的透明度落差,如果:abs (PenAlpha-preAlpha) >3那么按下面公式调整:PenAlpha=preAlpha+(PenAlpha-preAlpha)*3/(Abs(PenAlpha-preAlpha))步骤623、将PenAlpha赋值给preAlpha,以便计算下一笔透明度用:preAlpha=PenAlpha。
6.根据权利要求1所述的一种生成毛笔笔迹的方法,其特征在于:所述步骤30还包括初始化笔迹的颜色=PenColorO ;所述步骤80还包括设备对绘制笔颜色属性的设置。
7.根据权利要求1所述的一种生成毛笔笔迹的方法,其特征在于:所述步骤90中变换后的点连接用样条曲线,直线段或者函数曲线连接。
8.根据权利要求1所述的一种生成毛笔笔迹的方法,其特征在于:所述步骤70每次执行时,所述旋转角度A的取值相同或不相同,所谓一次指的是采取某个A值对每个Pointk都用公式变换得到DrawPointk,且该A值需在步骤70中设置。
【文档编号】G06T11/80GK103559732SQ201310486207
【公开日】2014年2月5日 申请日期:2013年10月15日 优先权日:2013年10月15日
【发明者】丁万年, 洪文洁, 陈日良, 何永安 申请人:锐达互动科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1