CN103559732B - 一种生成毛笔笔迹的方法 - Google Patents
一种生成毛笔笔迹的方法 Download PDFInfo
- Publication number
- CN103559732B CN103559732B CN201310486207.XA CN201310486207A CN103559732B CN 103559732 B CN103559732 B CN 103559732B CN 201310486207 A CN201310486207 A CN 201310486207A CN 103559732 B CN103559732 B CN 103559732B
- Authority
- CN
- China
- Prior art keywords
- handwriting
- person
- tracing point
- equipment
- current
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 37
- 230000002596 correlated effect Effects 0.000 claims abstract description 5
- 238000010422 painting Methods 0.000 claims abstract description 4
- 230000008569 process Effects 0.000 claims description 17
- 238000010790 dilution Methods 0.000 claims description 16
- 239000012895 dilution Substances 0.000 claims description 16
- 235000013350 formula milk Nutrition 0.000 claims description 13
- 238000012545 processing Methods 0.000 claims description 5
- 230000009466 transformation Effects 0.000 claims description 5
- 230000009471 action Effects 0.000 claims description 4
- 238000006243 chemical reaction Methods 0.000 claims description 4
- 238000012163 sequencing technique Methods 0.000 claims description 4
- 238000004088 simulation Methods 0.000 abstract description 5
- 230000000694 effects Effects 0.000 description 18
- 238000013461 design Methods 0.000 description 6
- 230000000875 corresponding effect Effects 0.000 description 3
- 238000003113 dilution method Methods 0.000 description 3
- 230000014509 gene expression Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 235000013399 edible fruits Nutrition 0.000 description 1
- 239000003973 paint Substances 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Landscapes
- Processing Or Creating Images (AREA)
- User Interface Of Digital Computer (AREA)
Abstract
本发明提供一种生成毛笔笔迹的方法,选取一能显示基本图形的设备,充当画布;获取设备被按下的轨迹点位置;初始化相关变量;设备上有移动发生,记下移动后的当前轨迹点位置;求当前轨迹点跟前一轨迹点之间的中点坐标来替代当前轨迹点坐标;计算出当前笔迹的实际笔宽;将轨迹点变换成绘制点;在设备上设置线帽;依次连接绘制点;轨迹点向前赋值;直到设备弹开,然后绘制出最后一笔笔迹。本发明的生成毛笔笔迹的方法,通过分析轨迹点分布特征生成毛笔笔迹,可按顺序接收轨迹,结合基本绘图函数模拟绘制,不同使用者有各自的特色笔迹,绘制效率高,还可实时显示。
Description
技术领域
本发明涉及绘图领域,尤其涉及一种由轨迹点模拟毛笔笔迹的方法。
背景技术
近年来绘图领域关于模拟人体输入发展迅速。在此过程中,模拟出毛笔字效果成为该领域的焦点。传统的做法是:由设备获取一列轨迹点,然后将这些轨迹点跟后台安排好的字体库做匹配运算,然后把最贴近的那种字体风格显示出来。比如说,有:王羲之风格、黄庭坚风格等。这种做法,虽然也是可以模拟出毛笔笔迹效果,但存在如下不足:
(1)绘制过程无法实时显示出效果,必须等确定绘制完后,经过后台匹配运算后才能显现出笔迹效果;
(2)不同的使用者应该会有不同的风格,然而这种方式只能显示出后台预设的几种风格,没有特色。
基于上面不足点,就急需一种绘制高效率、实时显示、不同使用者有各自的特色的模拟毛笔笔迹方法。本发明就是为了解决这个问题而提出的一种的方法。
发明内容
本发明要解决的技术问题,在于提供一种生成毛笔笔迹的方法,通过分析轨迹点分布特征生成毛笔笔迹,可按顺序接收轨迹,结合基本绘图函数模拟绘制,不同使用者有各自的特色笔迹,绘制效率高,还可实时显示。
本发明是这样实现的:一种生成毛笔笔迹的方法,包括
步骤10、选取一能显示基本图形的设备,充当画布;
步骤20、获取设备被按下的轨迹点位置:DownPoint;
步骤30、初始化相关变量:
步骤301、设置基础笔宽PenWidth0,并令前一笔笔迹prePenWidth=PenWidth0;
步骤302、设置绘制点Pointk(k=1,2,3,…n)的个数,即n的取值;然后令:Point1=DownPoint;
Point2=Point1;
Point3=Point1;
Point4=Point1;
…
Pointn=Point1;其中,步骤301和步骤302不限先后顺序;
步骤40、设备上有移动发生,记下移动后的当前轨迹点位置:MovePoint;
步骤50、求步骤40的当前轨迹点跟前一轨迹点之间的中点坐标,并记录下来替换掉当前轨迹点的坐标;求该中点坐标的公式为:
Pointn.X=(MovePoint.X+Point(n-1).X)/2;
Pointn.Y=(MovePoint.Y+Point(n-1).Y)/2;
步骤60、计算出当前笔迹的实际笔宽,移动的速度越大,PenWidth越小;
步骤70、将轨迹点变换成绘制点,即对轨迹点Pointk(k=1,2,3,…n)的坐标值进行变换,形成绘制点的坐标值,变换公式如下:
令:x=Pointk.X;
y=Pointk.Y;
x1=x*rCos+y*rSin;
y1=-x*rSin+y*rCos;
DrawPointk.X=x1*2;
DrawPointk.Y=y1;
其中: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至少执行一次;
步骤80、在设备上设置线帽;
步骤90、依次连接绘制点,完成笔迹的绘制;
步骤100、轨迹点向前赋值,即:
Point1=Point2;
Point2=Point3;
Point3=Point4;
…
Pointn=Point(n-1);
步骤110、如果设备上有移动动作继续发生,则返回到步骤40;如果设备弹开,记下弹开的轨迹点UpPoint的位置坐标;
令:Pointn.X=UpPoint.X;
Pointn.Y=UpPoint.Y;
步骤120,利用步骤70至90绘制出最后一笔笔迹。
进一步的,所述步骤60中出当前笔迹的实际笔宽计算过程如下:
步骤611、取轨迹点Point1、Point2…Pointn中任意两个点,并计算该两个点的距离Len;
步骤612、令k1=Len/m,m为经验值,m的取值范围为:m>0;
步骤613、令k2=1–k1,如果k2≤0,那么令k2=0.2;这里0.2是一个常量,可视为一经验值,意义就是笔宽的最小比例值;
步骤614、计算当前笔宽:PenWidth=PenWidth0*k2;
步骤615、将当前笔宽赋值给prePenWidth,以便计算下一笔笔宽时用。
其中,所述步骤614中,如果计算所得的当前笔宽落差大于2(常数,可视为经验值,意义就是:允许的前后两个笔迹的笔宽最大落差),即,如果Abs(prePenWidth-PenWidth)>2,那么,调整计算所得的当前笔宽:PenWidth=prePenWidth+(PenWidth-prePenWidth)*2/(Abs(PenWidth-prePenWidth))。这样可防止前后两笔笔宽因落差太大,而导致笔迹有停顿感。
进一步的,所述步骤30还包括初始化墨迹稀释度preAlpha:即
步骤303、令preAlpha=PenAlpha0,其中PenAlpha0为初始化透明度的常数,可视为经验值;其中,步骤301、步骤302和步骤303不限先后顺序;所述步骤60还包括当前笔迹的墨迹稀释度的计算,移动的速度越大,墨迹稀释度就越小;所述步骤80还包括设备对笔迹透明度的处理。这样绘成的笔迹效果看起来更逼真。
进一步的所述墨迹稀释度的具体计算过程是:
步骤621、令PenAlpha=PenAlpha0*k3;其中,k3>0,是一经验值,移动的速度越大,k3越小,反之移动的速度越小,k3越大;
步骤622、判断前后两笔的透明度落差,如果:
abs(PenAlpha-preAlpha)>3(这里3是个常数,可视为经验值),
那么按下面公式调整:
PenAlpha=preAlpha+(PenAlpha-preAlpha)*3/(Abs(PenAlpha-preAlpha))
步骤623、将PenAlpha赋值给preAlpha,以便计算下一笔透明度用:
preAlpha=PenAlpha。
进一步的,所述步骤30还包括初始化笔迹的颜色:PenColor0;所述步骤80还包括设备对绘制笔颜色属性的设置。
进一步的,所述步骤90中变换后的点连接用直线段、样条曲线或者函数曲线连接,实现不同的绘制效果。
进一步的,所述步骤70连续执行两次以上时,每次执行的旋转角度A的值相同或不相同,所谓一次指的是采取某个A值对每个Pointk都用公式变换得到DrawPointk,且该A值需在步骤70中设置。
本发明具有如下优点:本发明的生成毛笔笔迹的方法,通过分析轨迹点分布特征生成毛笔笔迹,可按顺序接收轨迹,结合基本绘图函数模拟绘制,不同使用者有各自的特色笔迹,绘制效率高,还可实时显示。
附图说明
下面参照附图结合实施例对本发明作进一步的说明。
图1为本发明方法执行流程图。
图2为本发明实施一的最终绘制效果图。
图3为本发明实施二的最终绘制效果图。
图4为本发明实施三的最终绘制效果图。
图5为本发明实施四的最终绘制效果图。
具体实施方式
如图1所示,本发明的生成毛笔笔迹的方法,包括
步骤10、选取一能显示基本图形(如直线、曲线等)的设备,充当画布;
步骤20、获取设备被按下的轨迹点位置:DownPoint;
步骤30、初始化相关变量:
步骤301、设置基础笔宽PenWidth0,并令前一笔笔迹prePenWidth=PenWidth0;根据需要还可设置笔迹的颜色:PenColor0;
步骤302、设置绘制点Pointk(k=1,2,3,…n)的个数,即n的取值;然后令:
Point1=DownPoint;
Point2=Point1;
Point3=Point1;
Point4=Point1;
…
Pointn=Point1;
步骤303、初始化墨迹稀释度preAlpha:令preAlpha=PenAlpha0,其中PenAlpha0为表示透明度的常数;如果限定透明度范围在[0,255],即0表示完全透明,255表示完全不透明,那么常数PenAlpha0取值范围即是[0,255],这里可以将其视为一经验值,可以根据实际情况做相应的调整。其中,步骤301、步骤302和步骤303不限先后顺序。步骤40、设备上有移动发生,记下移动后的当前轨迹点位置:MovePoint;步骤50、求步骤40的当前轨迹点跟前一轨迹点之间的中点坐标,并记录下来替换掉当前轨迹点的坐标;求该中点坐标的公式为:
Pointn.X=(MovePoint.X+Point(n-1).X)/2;
Pointn.Y=(MovePoint.Y+Point(n-1).Y)/2;
步骤60、计算出当前笔迹的实际笔宽,移动的速度越大,PenWidth越小;该步骤还可包括当前笔迹的墨迹稀释度的计算,移动的速度越大,墨迹稀释度就越小;
其中,当前笔迹的实际笔宽计算过程如下:
步骤611、取轨迹点Point1、Point2…Pointn中任意两个点,也可以固定取某两点,并计算该两个点的距离Len;其中,取轨迹点Point1、Point2…Pointn中任意两个点是指:每次均随机选择两个任意的点,或当前取的点与上一次取的点相同。
步骤612、令k1=Len/m,m为经验值,m的取值范围为m>0,该值的意义:对某个输入源,取两个不同的m值:m1、m2,分别对其进行模拟计算,如果m1>m2那么由m1模拟出来的笔迹整体笔宽会比较小,反之会比较大:
步骤613、令k2=1–k1,如果k2≤0,那么令k2=0.2,0.2可视为一常数,经验值,意义就是:允许的最小笔宽比例值;
步骤614、计算当前笔宽:PenWidth=PenWidth0*k2;如果计算所得的当前笔宽与前一笔宽prePenWidth落差大于2,这里2可视为一经验值,意义:前后两笔允许的最大笔宽落差,即,
如果Abs(prePenWidth-PenWidth)>2,那么,调整计算所得的当前笔宽:PenWidth=prePenWidth+(PenWidth-prePenWidth)*2/(Abs(PenWidth-prePenWidth))。
步骤615、将当前笔宽赋值给prePenWidth,以便计算下一笔笔宽时用。
所述墨迹稀释度的具体计算过程是:
步骤621、令PenAlpha=PenAlpha0*k3;其中,k3>0,是一经验值,移动的速度越大,k3越小,反之移动的速度越小,k3越大;取值时,可以令k3=k2,或者可以指定一个固定值,甚至通过其他的方式计算得到的一个合理的值。
步骤622、判断前后两笔的透明度落差,如果:
abs(PenAlpha-preAlpha)>3(这里3为一经验值),
那么按下面公式调整:
PenAlpha=preAlpha+(PenAlpha-preAlpha)*3/(Abs(PenAlpha-preAlpha))
步骤623、将PenAlpha赋值给preAlpha,以便下一笔计算透明度用:
preAlpha=PenAlpha。
步骤70、将轨迹点变换成绘制点,即对轨迹点Pointk(k=1,2,3,…n)的坐标值进行变换,形成绘制点的坐标值,变换公式如下:
令:x=Pointk.X;
y=Pointk.Y;
x1=x*rCos+y*rSin;
y1=-x*rSin+y*rCos;
DrawPointk.X=x1*2;
DrawPointk.Y=y1;
其中:rSin=sin(A),rCos=cos(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的值可以取不同值;且每变换一次相当于获取一组绘制点。
步骤80、在设备上设置线帽,所谓线帽就是笔迹之间的连接方式,这里采取圆形连接,一般设备的绘图接口都有有提供相关的设置,只要调用即可;若前面步骤有包含墨迹稀释度的计算及笔迹的颜色:PenColor0的初始化,则该步骤还包括设备对笔迹透明度的处理及设备对绘制笔颜色属性的设置。
步骤90、依次连接绘制点,完成笔迹的绘制;其连接可以用样条曲线连接或直线段连接,甚至其他的函数曲线,根据不同的连接曲线,产生的效果会不一样。
步骤100、轨迹点向前赋值,即:
Point1=Point2;
Point2=Point3;
Point3=Point4;
…
Pointn=Point(n-1);
步骤110、如果设备上有移动动作继续发生,则返回到步骤40;如果设备弹开,记下弹开的轨迹点UpPoint的位置坐标;
令:Pointn.X=UpPoint.X;
Pointn.Y=UpPoint.Y;
步骤120,利用步骤70至90绘制出最后一笔笔迹。
实施例一
步骤10、选取一能显示基本图形(如直线、曲线等)的设备,充当画布;
步骤20、获取设备被按下的轨迹点位置:DownPoint;
步骤30、初始化相关变量:
步骤301、设置基础笔宽PenWidth0,并令前一笔笔迹prePenWidth=PenWidth0;根据需要还可设置笔迹的颜色:PenColor0;
步骤302、设置绘制点Pointk(k=1,2,3,…n)的个数为4,即n=4;然后令:
Point1=DownPoint;
Point2=Point1;
Point3=Point1;
Point4=Point1;
步骤40、设备上有移动发生,记下移动后的当前轨迹点位置:MovePoint;
步骤50、求步骤40的当前轨迹点Point4跟前一轨迹点Point3之间的中点坐标,并记录下来替换掉当前轨迹点Point4的坐标;求该中点坐标的公式为:
Point4.X=(MovePoint.X+Point3.X)/2;
Point4.Y=(MovePoint.Y+Point3.Y)/2;
步骤60、计算出当前笔迹的实际笔宽,移动的速度越大,PenWidth越小;其中,当前笔迹的实际笔宽计算过程如下:
步骤611、取轨迹点Point1、Point2…Point4中任意两个点,也可以固定某两点,并计算该两个点的距离Len;
步骤612、令k1=Len/m,m=12;
步骤613、令k2=1–k1,如果k2≤0,那么令k2=0.2;
步骤614、计算当前笔宽:PenWidth=PenWidth0*k2;如果计算所得的当前笔宽与前一笔宽prePenWidth落差大于2,即,
如果Abs(prePenWidth-PenWidth)>2,那么,调整计算所得的当前笔宽:PenWidth=prePenWidth+(PenWidth-prePenWidth)*2/(Abs(PenWidth-prePenWidth))。
步骤615、将当前笔宽赋值给prePenWidth,以便计算下一笔笔宽时用。
步骤70、将轨迹点变换成绘制点,即对轨迹点Pointk(k=1,2,3,…n)的坐标值进行变换,形成绘制点的坐标值,变换公式如下:先设置
A=-45°,则rSin=sin(A)=sin(-45°),rCos=cos(A)=cos(-45°);
x=Pointk.X;
y=Pointk.Y;
x1=x*rCos+y*rSin=x*cos(-45°)+y*sin(-45°);
y1=-x*rSin+y*rCos=-x*sin(-45°)+y*cos(-45°);
DrawPointk.X=x1*2DrawPointk.Y=y1
解释如下:Pen.ScaleTransform(0.5,1.0),作用是将X方向的笔宽缩小一半,这里直接跟步骤70:DrawPointk.X=x1*2;相对应,因为直接将X缩小一半,为了笔迹在原先的位置显示,笔迹将坐标扩大对应的倍数。这里0.5、2是常数,可视为经验值,并且要求两个值大于零,且相乘为1.如果不加上旋转因素,那么结果将是:在X方向笔宽是最小的,在Y方向笔宽是最大的,其他方向就是这两个方向的分解值,经过实践得出这种效果不好,必须让其旋转一个角度,比如A=45度,就是45度时笔宽是最小的,跟45度方向垂直的的方向笔宽到达最大值,其他方向的笔宽就是这两个方向的分解值。这是本发明的原理,即变换步骤70的目的。在一些绘图设备接口会提供一些接口,直接调用就可以实现这种效果,如果没有就必须按本发明规规矩矩的设计执行。
本实施例中,步骤70连续执行三次,且每执行一次就相当于得到一组绘制点,并且每次的A值取不同值,-45°,135°,45°。
步骤80、在设备上设置线帽及绘制笔颜色属性。
步骤90、依次连接绘制点,完成笔迹的绘制;其连接是用样条曲线连接。
步骤100、轨迹点向前赋值,即:
Point1=Point2;
Point2=Point3;
Point3=Point4;
步骤110、如果设备上有移动动作继续发生,则返回到步骤40;如果设备弹开,记下弹开的轨迹点UpPoint的位置坐标;
令:Pointn.X=UpPoint.X;
Pointn.Y=UpPoint.Y;
步骤120,利用步骤70至90绘制出最后一笔笔迹。最后绘制的效果如图2所示,该绘制效果看起来,笔迹较生硬,缺乏笔墨稀释处理,即灰度透明效果的处理。
实施例二
该实施例二与实施一的区别在于,加入笔墨稀释处理,即加入“透明度”因素,通常书写速度越快,除了笔迹宽度越小外,“笔墨”也应该越稀。
因此,在实施例一中的一些步骤中做相应调整,调整如下:
1、实施例二在步骤30中增加步骤303,
步骤303、初始化墨迹稀释度preAlpha:令preAlpha=PenAlpha0,其中PenAlpha0=128。
2、实施例二在步骤60中增加墨迹稀释度的具体计算过程:
步骤621、令PenAlpha=PenAlpha0*k3;其中,k3=这里直接取计算笔宽过程的提到的k2;
步骤622、判断前后两笔的透明度落差,如果:
abs(PenAlpha-preAlpha)>3
那么按下面公式调整:
PenAlpha=preAlpha+(PenAlpha-preAlpha)*3/(Abs(PenAlpha-preAlpha))
步骤623、将PenAlpha赋值给preAlpha,以便下一笔计算透明度用:
preAlpha=PenAlpha。
3、实施例二在步骤80中增加设备对笔迹透明度的处理过程。
其余步骤与实施例一相同,此处不再重复。最后绘制的效果如图3所示,该绘制效果看起来,笔迹更加柔和、逼真。
实施例三
该实施例三与实施一的区别在于:
1、实施例三中的步骤70只执行一次,且A的取值为45°;
2、实施例三中的步骤90连接绘制点时是用直线连接;
3、实施例三在步骤30初始化的过程中,初始笔宽的值设置较小。
其余步骤与实施例一相同,此处不再重复。最后绘制的效果如图4所示,该绘制效果相对实施例一而言,笔迹效果差不多,但因步骤70只执行一次,步骤90连接绘制点时是用直线连接,实现会显得更简单,计算量也更小。
实施例四
该实施例四与实施三的区别在于加入笔墨稀释处理,即加入“透明度”因素,因此,在实施例三中的一些步骤中做相应调整,调整如下:
1、实施例二在步骤30中增加步骤303,
步骤303、初始化墨迹稀释度preAlpha:令preAlpha=PenAlpha0,其中PenAlpha0=30。
2、实施例二在步骤60中增加墨迹稀释度的具体计算过程:
步骤621、令PenAlpha=PenAlpha0*k3;其中,k3>0,是一经验值,移动的速度越大,k3越小,反之移动的速度越小,k3越大;
步骤622、判断前后两笔的透明度落差,如果:
abs(PenAlpha-preAlpha)>3
那么按下面公式调整:
PenAlpha=preAlpha+(PenAlpha-preAlpha)*3/(Abs(PenAlpha-preAlpha))
步骤623、将PenAlpha赋值给preAlpha,以便下一笔计算透明度用:
preAlpha=PenAlpha。
从效果图中可以看出,采取不同的经验值、绘制连接线的选取、变换公式的应用等合理搭配使用,可以调节出不同的效果。
另外,本发明提到很多常数,即经验值。在实际操作中,可以将这些经验值做成可以设定的方式,这样,画布设备根据不同的输入源就可以调整这些参数对应的最佳值,从而使笔迹达到一个最佳状态。
虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。
Claims (8)
1.一种生成毛笔笔迹的方法,其特征在于:包括
步骤10、选取一能显示基本图形的设备,充当画布;
步骤20、获取设备被按下的轨迹点位置:DownPoint;
步骤30、初始化相关变量:
步骤301、设置基础笔宽PenWidth0,并令前一笔笔迹prePenWidth=PenWidth0;
步骤302、设置绘制点Pointk(k=1,2,3,…n)的个数,即n的取值;然后令:Point1=DownPoint;
Point2=Point1;
Point3=Point1;
Point4=Point1;
…
Pointn=Point1;其中,步骤301和步骤302不限先后顺序;
步骤40、设备上有移动发生,记下移动后的当前轨迹点位置:MovePoint;
步骤50、求步骤40的当前轨迹点跟前一轨迹点之间的中点坐标,并记录下来替换掉当前轨迹点的坐标;求该中点坐标的公式为:
Pointn.X=(MovePoint.X+Point(n-1).X)/2;
Pointn.Y=(MovePoint.Y+Point(n-1).Y)/2;
步骤60、计算出当前笔迹的实际笔宽,移动的速度越大,PenWidth越小;
步骤70、将轨迹点变换成绘制点,即对轨迹点Pointk(k=1,2,3,…n)的坐标值进行变换,形成绘制点的坐标值,变换公式如下:
令:x=Pointk.X;
y=Pointk.Y;
x1=x*rCos+y*rSin;
y1=-x*rSin+y*rCos;
DrawPointk.X=x1*2;
DrawPointk.Y=y1;
其中: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、轨迹点向前赋值,即:
Point1=Point2;
Point2=Point3;
Point3=Point4;
…
Pointn=Point(n-1);
步骤110、如果设备上有移动动作继续发生,则返回到步骤40;如果设备弹开,记下弹开的轨迹点UpPoint的位置坐标;
令:Pointn.X=UpPoint.X;
Pointn.Y=UpPoint.Y;
步骤120,利用步骤70至90绘制出最后一笔笔迹。
2.根据权利要求1所述的一种生成毛笔笔迹的方法,其特征在于:所述步骤60中出当前笔迹的实际笔宽计算过程如下:
步骤611、取轨迹点Point1、Point2…Pointn中任意两个点,并计算该两个点的距离Len;
步骤612、令k1=Len/m,m为经验值,m的取值范围为:m>0;
步骤613、令k2=1–k1,如果k2≤0,那么令k2=0.2;
步骤614、计算当前笔宽:PenWidth=PenWidth0*k2;
步骤615、将当前笔宽赋值给prePenWidth,以便计算下一笔笔宽时用。
3.根据权利要求2所述的一种生成毛笔笔迹的方法,其特征在于:所述步骤614中,如果计算所得的当前笔宽落差大于2,即,
如果Abs(prePenWidth-PenWidth)>2,那么,调整计算所得的当前笔宽:
PenWidth=prePenWidth+(PenWidth-prePenWidth)*2/(Abs(PenWidth-prePenWidth))。
4.根据权利要求1所述的一种生成毛笔笔迹的方法,其特征在于:
所述步骤30还包括初始化墨迹稀释度preAlpha:即
步骤303、令preAlpha=PenAlpha0,其中PenAlpha0为表示透明度的初始值;其中,步骤301、步骤302和步骤303不限先后顺序;
所述步骤60还包括当前笔迹的墨迹稀释度的计算,移动的速度越大,墨迹稀释度就越小,即墨迹越稀;
所述步骤80还包括设备对笔迹透明度的处理。
5.根据权利要求4所述的一种生成毛笔笔迹的方法,其特征在于:所述墨迹稀释度的具体计算过程是:
步骤621、令PenAlpha=PenAlpha0*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还包括初始化笔迹的颜色:PenColor0;
所述步骤80还包括设备对绘制笔颜色属性的设置。
7.根据权利要求1所述的一种生成毛笔笔迹的方法,其特征在于:所述步骤90中变换后的点连接用样条曲线,直线段或者函数曲线连接。
8.根据权利要求1所述的一种生成毛笔笔迹的方法,其特征在于:所述步骤70每次执行时,所述旋转角度A的取值相同或不相同,所谓一次指的是采取某个A值对每个Pointk都用公式变换得到DrawPointk,且该A值需在步骤70中设置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310486207.XA CN103559732B (zh) | 2013-10-15 | 2013-10-15 | 一种生成毛笔笔迹的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310486207.XA CN103559732B (zh) | 2013-10-15 | 2013-10-15 | 一种生成毛笔笔迹的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103559732A CN103559732A (zh) | 2014-02-05 |
CN103559732B true CN103559732B (zh) | 2016-05-11 |
Family
ID=50013971
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310486207.XA Expired - Fee Related CN103559732B (zh) | 2013-10-15 | 2013-10-15 | 一种生成毛笔笔迹的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103559732B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103870650B (zh) * | 2014-03-24 | 2017-02-15 | 浙江纺织服装职业技术学院 | 一种计算机辅助绘制纹织图案燥笔泥地的方法 |
CN105653124B (zh) * | 2015-12-23 | 2018-12-28 | 广州视睿电子科技有限公司 | 笔迹效果模拟方法及装置 |
CN109271084B (zh) * | 2018-08-22 | 2021-05-07 | 安徽慧视金瞳科技有限公司 | 一种模拟美工笔笔触的绘制方法 |
CN109408161A (zh) * | 2018-08-22 | 2019-03-01 | 安徽慧视金瞳科技有限公司 | 一种模拟毛笔笔触的绘制算法 |
CN109461194A (zh) * | 2018-09-19 | 2019-03-12 | 安徽慧视金瞳科技有限公司 | 一种模拟美工笔笔触的绘制方法 |
CN109445887A (zh) * | 2018-09-19 | 2019-03-08 | 安徽慧视金瞳科技有限公司 | 一种模拟毛笔笔触的绘制方法 |
CN111027344B (zh) * | 2018-10-09 | 2023-12-26 | 珠海金山办公软件有限公司 | 一种显示方法及装置 |
CN111383296B (zh) * | 2018-12-28 | 2023-11-21 | 北京小米移动软件有限公司 | 绘制轨迹的显示方法、装置及存储介质 |
CN109857322B (zh) * | 2019-01-24 | 2021-12-31 | 广东第二师范学院 | 一种基于安卓的画笔宽度控制方法和装置 |
CN110610532B (zh) * | 2019-08-12 | 2023-08-01 | 安徽石轩文化科技有限公司 | 一种水墨流动性元素动画特效制作方法 |
CN114041111A (zh) * | 2020-05-20 | 2022-02-11 | 京东方科技集团股份有限公司 | 笔迹绘制方法、装置、电子设备、介质和程序产品 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101373539A (zh) * | 2008-10-07 | 2009-02-25 | 广东威创视讯科技股份有限公司 | 毛笔笔迹的书写方法及书写装置 |
CN102521858A (zh) * | 2011-11-28 | 2012-06-27 | 北京盛世宣合信息科技有限公司 | 电子毛笔书写笔迹生成方法 |
CN102681745A (zh) * | 2010-12-28 | 2012-09-19 | 广东开心信息技术有限公司 | 手写输入系统及用户终端 |
CN102999321A (zh) * | 2011-09-15 | 2013-03-27 | 汉王科技股份有限公司 | 毛笔电子画刷设置装置和毛笔电子画刷 |
CN103077026A (zh) * | 2012-12-28 | 2013-05-01 | 锐达互动科技股份有限公司 | 一种在操作系统的桌面环境下进行书写的方法 |
-
2013
- 2013-10-15 CN CN201310486207.XA patent/CN103559732B/zh not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101373539A (zh) * | 2008-10-07 | 2009-02-25 | 广东威创视讯科技股份有限公司 | 毛笔笔迹的书写方法及书写装置 |
CN102681745A (zh) * | 2010-12-28 | 2012-09-19 | 广东开心信息技术有限公司 | 手写输入系统及用户终端 |
CN102999321A (zh) * | 2011-09-15 | 2013-03-27 | 汉王科技股份有限公司 | 毛笔电子画刷设置装置和毛笔电子画刷 |
CN102521858A (zh) * | 2011-11-28 | 2012-06-27 | 北京盛世宣合信息科技有限公司 | 电子毛笔书写笔迹生成方法 |
CN103077026A (zh) * | 2012-12-28 | 2013-05-01 | 锐达互动科技股份有限公司 | 一种在操作系统的桌面环境下进行书写的方法 |
Non-Patent Citations (2)
Title |
---|
电子书画系统中毛笔笔型的模拟研究;郭丽, 任向实, 丁怀东;《昆明理工大学学报》;20021231;第27卷(第6期);83-87 * |
虚拟毛笔模型研究综述;毛国红,张俊松,何兴恒;《系统仿真学报》;20060331;第18卷(第3期);669-674 * |
Also Published As
Publication number | Publication date |
---|---|
CN103559732A (zh) | 2014-02-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103559732B (zh) | 一种生成毛笔笔迹的方法 | |
CN101807114B (zh) | 一种基于三维手势的自然交互方法 | |
US8854342B2 (en) | Systems and methods for particle-based digital airbrushing | |
CN109664300A (zh) | 一种基于力觉学习的机器人多风格书法临摹方法 | |
CN102637078B (zh) | 一种结构优化的汉字字形生成方法 | |
CN106041928A (zh) | 一种基于工件模型的机器人作业任务生成方法 | |
CN111475667A (zh) | 一种基于手写汉字的机械臂楷体风格书法撰写方法 | |
CN101393693B (zh) | 一种汉字书写计算机教学方法 | |
CN104821005B (zh) | 可模拟笔势风格的汉字书法作品书写过程动态复现的方法 | |
CN105045496A (zh) | 一种基于关节点变换的手势交互方法 | |
CN109857322B (zh) | 一种基于安卓的画笔宽度控制方法和装置 | |
Song et al. | SSK: robotic pen-art system for large, nonplanar canvas | |
Leal et al. | 3d sketching using interactive fabric for tangible and bimanual input | |
CN110349238B (zh) | 一种毛笔小楷字渲染方法 | |
CN104268915A (zh) | 一种手写汉字的实时轮廓美化方法 | |
CN107203268A (zh) | 一种基于方向链码的三维笔势识别方法 | |
CN107738256A (zh) | 一种手把手仿人示教机器人编程系统 | |
Yang et al. | Animating the brush-writing process of Chinese calligraphy characters | |
Mohanty et al. | Kinesthetically augmented mid-air sketching of multi-planar 3D curve-soups | |
Liu et al. | A Kai style contour beautification method for Chinese handwriting characters | |
Yin et al. | HUA: an interactive calligraphy and ink-wash painting system | |
Berio et al. | Computer aided design of handwriting trajectories with the kinematic theory of rapid human movements | |
CN113590002A (zh) | 笔迹形成方法、笔迹形成装置及电子设备 | |
CN106681516B (zh) | 一种基于虚拟现实的自然人机交互系统 | |
CN104050690A (zh) | 布局可调的中国山水画计算机创意生成方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CP02 | Change in the address of a patent holder | ||
CP02 | Change in the address of a patent holder |
Address after: 350000 6, No. 1 Innovation Park, No. 3 east science and technology road, Minhou street, Minhou, Fuzhou. Patentee after: RETURNSTAR INTERACTIVE TECHNOLOGY GROUP Co.,Ltd. Address before: 350000 Building 8, Gulou garden, Citrus Industrial Park, 618 Jinshan Road, Jianxin Town, Cangshan District, Fuzhou, Fujian, China Patentee before: RETURNSTAR INTERACTIVE TECHNOLOGY GROUP Co.,Ltd. |
|
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160511 |