本發(fā)明涉及電子領(lǐng)域,特別是指一種書寫筆跡分段平滑方法和系統(tǒng)。
背景技術(shù):
書寫筆跡平滑算法,是計算機繪制書寫筆跡效果的一種優(yōu)化,旨在減少繪制過程中筆跡的毛刺和折線是繪制效果更平滑更接近真實書寫。
在白板書寫時,由于鼠標上點的速度與坐標的差異,如果直接把得到的點繪制出來會出現(xiàn)好多折線以及毛刺,例如windows畫圖板程序的效果。
技術(shù)實現(xiàn)要素:
有鑒于此,本發(fā)明的目的在于提出一種書寫筆跡分段平滑方法和系統(tǒng),能夠優(yōu)化書寫效果,大幅度減少筆跡中的折線和毛刺。
基于上述目的本發(fā)明提供的書寫筆跡分段平滑方法,包括步驟:
第一步,鼠標落壓第一點作為分段起始點O,記錄O點坐標;
第二步,鼠標移動獲得下一點,記為P并記錄P點坐標;然后,計算與起始點O的距離OP;
第三步,鼠標移動獲得下一點,記為P1并記錄P1點坐標;然后,計算與P點的距離PP1;
第四步,計算獲得P1點通過P點到達起始點O的距離,即計算OP加上PP1的長度;
第五步,判斷獲得的坐標點的數(shù)量是否大于預先設(shè)置的數(shù)值,或者P1點通過P點到達起始點O的距離長度是否大于預先設(shè)置的長度,若都不滿足則進行步驟六,若滿足上面條件的任意一個則進行步驟八;
第六步,根據(jù)所述坐標點存儲表中存儲的本段中的坐標點,擬合并繪制出曲線,然后執(zhí)行步驟七;
第七步,判斷鼠標是否抬起,若沒有抬起則返回步驟三;若抬起則根據(jù)所述坐標點存儲表中存儲的該整體曲線上所有點重新擬合,形成最后的筆跡 繪制出來,然后退出;
第八步,本段中所有坐標點完成存儲,根據(jù)所述坐標點存儲表中存儲的本段中所有坐標點,擬合并繪制出曲線,然后執(zhí)行步驟九;
第九步,判斷鼠標是否抬起,若沒有抬起則將本段的結(jié)束點作為下一個分段的起始點,然后返回步驟二;若抬起則根據(jù)所述坐標點存儲表中存儲的該整體曲線上所有點重新擬合,形成最后的筆跡繪制出來,然后退出。
可選地,所述步驟一中將O點坐標存儲在坐標點存儲表中。
可選地,所述步驟四中還計算線段PP1與線段OP的夾角。
進一步地,在執(zhí)行所述步驟四之后,調(diào)整P點的坐標使得所述線段PP1與線段OP的夾角大于45度,然后將調(diào)整后的P點坐標存儲在坐標點存儲表中。
進一步地,所述對于線段PP1與線段OP的夾角小于45度的坐標值進行調(diào)整采用的是加權(quán)平均法。
進一步地,所述加權(quán)平均法設(shè)置的比例為3:4:3,調(diào)整后點P的坐標為Px'=0.3*Ox+0.4*Px+0.3*P1x,Py'=0.3*Oy+0.4*Py+0.3*P1y。
進一步地,在執(zhí)行所述步驟五之后,判斷所述線段PP1是否大于預先設(shè)置的像素閾值,若小于則去掉點P1,返回步驟四;若大于則將所述的點P1存儲到預先設(shè)置的坐標點存儲表中。
進一步地,所述預先設(shè)置的像素閾值為3至6。
進一步地,所述預先設(shè)置的像素閾值為4.13。
可選地,所述坐標點的數(shù)量是否大于預先設(shè)置的數(shù)值為10。
可選地,所述預先設(shè)置的P1點通過P點到達起始點O的距離長度為40像素。
可選地,所述步驟四中還需要計算P1點到起始點O的直線距離L;然后,當進行步驟十時,則是判斷獲得的坐標點的數(shù)量是否大于預先設(shè)置的數(shù)值,或者P1點通過P點到達起始點O的距離長度是否大于預先設(shè)置的長度,或者直線距離L與P1點通過P點到達起始點O的距離的比值是否在預先設(shè)置的范圍內(nèi)。
進一步地,所述直線距離L與P1點通過P點到達起始點O的距離的比值范圍為1.45至10之間。
進一步地,所述根據(jù)坐標點擬合、繪制曲線采用的都是貝塞爾方法。
另外,本發(fā)明還通過了一種書寫筆跡分段平滑系統(tǒng),包括鼠標點獲取單元、坐標點處理單元和坐標點擬合繪制單元,所述鼠標點獲取單元鼠標落壓第一點作為分段起始點O,記錄O點坐標;鼠標移動獲得下一點,記為P并記錄P點坐標;鼠標移動獲得下一點,記為P1并記錄P1點坐標;
所述坐標點處理單元計算與起始點O的距離OP,并且計算獲得P1點通過P點到達起始點O的距離,即計算OP加上PP1的長度;判斷獲得的坐標點的數(shù)量是否大于預先設(shè)置的數(shù)值,或者P1點通過P點到達起始點O的距離長度是否大于預先設(shè)置的長度;
若都不滿足則所述坐標點處理單元與所述坐標點擬合繪制單元相連,所述坐標點擬合繪制單元根據(jù)所述坐標點存儲表中存儲的本段中的坐標點,擬合并繪制出曲線;判斷鼠標是否抬起,若沒有抬起則所述坐標點擬合繪制單元與所述鼠標點獲取單元相連;若抬起則根據(jù)所述坐標點存儲表中存儲的該整體曲線上所有點重新擬合,形成最后的筆跡繪制出來;
若滿足上面條件的任意一個則所述坐標點處理單元與所述坐標點擬合繪制單元相連,所述坐標點擬合繪制單元將本段中所有坐標點完成存儲,根據(jù)所述坐標點存儲表中存儲的本段中所有坐標點,擬合并繪制出曲線;判斷鼠標是否抬起,若沒有抬起則將本段的結(jié)束點作為下一個分段的起始點,然后所述坐標點擬合繪制單元與所述鼠標點獲取單元相連;若抬起則根據(jù)所述坐標點存儲表中存儲的該整體曲線上所有點重新擬合,形成最后的筆跡繪制出來。
可選地,所述鼠標點獲取單元將O點坐標存儲在坐標點存儲表中。
可選地,所述坐標點處理單元還計算線段PP1與線段OP的夾角。
進一步地,所述坐標點處理單元計算獲得P1點通過P點到達起始點O的距離之后,調(diào)整P點的坐標使得所述線段PP1與線段OP的夾角大于45度,然后將調(diào)整后的P點坐標存儲在坐標點存儲表中。
進一步地,所述對于線段PP1與線段OP的夾角小于45度的坐標值進行調(diào)整采用的是加權(quán)平均法。
進一步地,所述加權(quán)平均法設(shè)置的比例為3:4:3,調(diào)整后點P的坐標為Px'=0.3*Ox+0.4*Px+0.3*P1x,Py'=0.3*Oy+0.4*Py+0.3*P1y。
進一步地,所述坐標點處理單元還包括判斷所述線段PP1是否大于預先設(shè)置的像素閾值,若小于則去掉點P1;若大于則將所述的點P1存儲到預先設(shè)置的坐標點存儲表中。
進一步地,所述預先設(shè)置的像素閾值為3至6。
進一步地,所述預先設(shè)置的像素閾值為4.13。
可選地,所述坐標點的數(shù)量是否大于預先設(shè)置的數(shù)值為10。
可選地,所述預先設(shè)置的P1點通過P點到達起始點O的距離長度為40像素。
可選地,所述坐標點處理單元還包括計算P1點到起始點O的直線距離L;判斷獲得的坐標點的數(shù)量是否大于預先設(shè)置的數(shù)值,或者P1點通過P點到達起始點O的距離長度是否大于預先設(shè)置的長度,或者直線距離L與P1點通過P點到達起始點O的距離的比值是否在預先設(shè)置的范圍內(nèi)。
進一步地,所述直線距離L與P1點通過P點到達起始點O的距離的比值范圍為1.45至10之間。
進一步地,所述根據(jù)坐標點擬合、繪制曲線采用的都是貝塞爾方法。
從上面所述可以看出,本發(fā)明提供的書寫筆跡分段平滑方法和系統(tǒng),通過鼠標落壓第一點為起始點O;鼠標移動獲得點P,計算距離OP;鼠標移動獲得點P1,計算距離PP1,計算OP加PP1的長度;判斷坐標點數(shù)量是否大于設(shè)置的數(shù)值,或者P1點通過P到達O的距離長度是否大于設(shè)置的長度,若都不滿足則根據(jù)存儲表中本段的坐標點,擬合曲線;判斷鼠標是否抬起,若抬起則將整體曲線上所有點重新擬合;若滿足上面條件的任意一個則本段中所有坐標點完成存儲,根據(jù)本段中所有坐標點擬合曲線;判斷鼠標是否抬起,若沒有則將本段的結(jié)束點作為下一個分段的起始點;若抬起則根據(jù)該整體曲線上所有點重新擬合。從而,所述書寫筆跡分段平滑方法和系統(tǒng)能夠得到一條相對平滑的曲線,使得繪制效果更自然。
附圖說明
圖1為本發(fā)明實施例書寫筆跡分段平滑方法的流程示意圖;
圖2為本發(fā)明實施例書寫筆跡分段平滑系統(tǒng)的結(jié)構(gòu)示意圖。
具體實施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚明白,以下結(jié)合具體實施例,并參照附圖,對本發(fā)明進一步詳細說明。
在本發(fā)明的一個實施例中,如圖1所示,為本發(fā)明實施例書寫筆跡分段平滑方法的流程示意圖,所述書寫筆跡分段平滑方法包括:
步驟101,鼠標落壓第一點作為分段起始點O,記錄O點坐標。
步驟102,鼠標移動獲得下一點,記為P并記錄P點坐標。然后,計算與起始點O的距離OP。
步驟103,鼠標移動獲得下一點,記為P1并記錄P1點坐標。然后,計算與P點的距離PP1。
步驟104,計算獲得P1點通過P點到達起始點O的距離,即計算OP加上PP1的長度。
步驟105,判斷獲得的坐標點的數(shù)量是否大于預先設(shè)置的數(shù)值,或者P1點通過P點到達起始點O的距離長度是否大于預先設(shè)置的長度,若都不滿足則進行步驟106,若滿足上面條件的任意一個則進行步驟108。
步驟106,根據(jù)所述坐標點存儲表中存儲的本段中的坐標點,擬合并繪制出曲線,然后執(zhí)行步驟107。
步驟107,判斷鼠標是否抬起,若沒有抬起則返回步驟103;若抬起則根據(jù)所述坐標點存儲表中存儲的該整體曲線上所有點重新擬合,形成最后的筆跡繪制出來,然后退出。
步驟108,本段中所有坐標點完成存儲,根據(jù)所述坐標點存儲表中存儲的本段中所有坐標點,擬合并繪制出曲線,然后執(zhí)行步驟109。
步驟109,判斷鼠標是否抬起,若沒有抬起則將本段的結(jié)束點作為下一個分段的起始點,然后返回步驟102;若抬起則根據(jù)所述坐標點存儲表中存儲的該整體曲線上所有點重新擬合,形成最后的筆跡繪制出來,然后退出。
在本發(fā)明的另一個實施例中,所述的書寫筆跡分段平滑方法包括:
步驟201,鼠標落壓第一點作為分段起始點O,將O點坐標存儲在坐標點存儲表中。
步驟202,鼠標移動獲得下一點,記為P并記錄P點坐標。然后,計算 與起始點O的距離OP。
步驟203,鼠標移動獲得下一點,記為P1并記錄P1點坐標。然后,計算與P點的距離PP1。
步驟204,計算獲得P1點通過P點到達起始點O的距離,即計算OP加上PP1的長度。以及計算線段PP1與線段OP的夾角。
步驟205,判斷所述線段PP1與線段OP的夾角是否小于45度,若是則進行步驟206,若不是則直接進行步驟207。
步驟206,調(diào)整P點的坐標使得所述線段PP1與線段OP的夾角大于45度,然后進行步驟207。
優(yōu)選地,對于線段PP1與線段OP的夾角小于45度的坐標值進行調(diào)整采用的是加權(quán)平均法,其設(shè)置的比例為3:4:3。那么,調(diào)整后點P的坐標為Px'=0.3*Ox+0.4*Px+0.3*P1x,Py'=0.3*Oy+0.4*Py+0.3*P1y。另外,將調(diào)整后的P點坐標進行存儲,可以存儲在坐標點存儲表中。
步驟207,判斷所述線段PP1是否大于預先設(shè)置的像素閾值,若小于則進行步驟208,若大于則進行步驟209。
作為實施例,預先設(shè)置的像素閾值為3至6。優(yōu)選地,像素閾值為4.13。
還需要說明的是,步驟206和步驟207可以如上面所述的先進行步驟206再進行步驟207,也可以先進行步驟207再進行步驟206。
步驟208,去掉點P1,返回步驟204。
步驟209,將所述的點P1存儲到預先設(shè)置的坐標點存儲表中。
步驟210,判斷獲得的坐標點的數(shù)量是否大于預先設(shè)置的數(shù)值,或者P1點通過P點到達起始點O的距離長度是否大于預先設(shè)置的長度,若都不滿足則進行步驟211,若滿足上面條件的任意一個則進行步驟213。
在本發(fā)明的實施例中,所述坐標點的數(shù)量是否大于預先設(shè)置的數(shù)值為10。較佳地,可以查看所述坐標點存儲表中存儲的點數(shù)量是否大于預先設(shè)置的數(shù)值為10。另外,預先設(shè)置的P1點通過P點到達起始點O的距離長度為40像素。
步驟211,根據(jù)所述坐標點存儲表中存儲的本段中的坐標點,擬合并繪制出曲線,然后執(zhí)行步驟212。
步驟212,判斷鼠標是否抬起,若沒有抬起則返回步驟203;若抬起則根 據(jù)所述坐標點存儲表中存儲的該整體曲線上所有點重新擬合,形成最后的筆跡繪制出來,然后退出。
步驟213,本段中所有坐標點完成存儲,根據(jù)所述坐標點存儲表中存儲的本段中所有坐標點,擬合并繪制出曲線,然后執(zhí)行步驟214。
步驟214,判斷鼠標是否抬起,若沒有抬起則將本段的結(jié)束點作為下一個分段的起始點,然后返回步驟202;若抬起則根據(jù)所述坐標點存儲表中存儲的該整體曲線上所有點重新擬合,形成最后的筆跡繪制出來,然后退出。
優(yōu)選地,上面所述的根據(jù)坐標點擬合、繪制曲線采用的都是貝塞爾方法。
作為本發(fā)明的另一個實施例,在進行步驟204時,還需要計算P1點到起始點O的直線距離L。然后,當進行步驟210時,則是判斷獲得的坐標點的數(shù)量是否大于預先設(shè)置的數(shù)值,或者P1點通過P點到達起始點O的距離長度是否大于預先設(shè)置的長度,或者直線距離L與P1點通過P點到達起始點O的距離的比值是否在預先設(shè)置的范圍內(nèi),若都不滿足則進行步驟211,若滿足上面條件的任意一個則進行步驟212。其中,所述直線距離L與P1點通過P點到達起始點O的距離的比值范圍為1.45至10之間。
在本發(fā)明的另一個實施例中,如圖2所示,為本發(fā)明實施例書寫筆跡分段平滑系統(tǒng)的結(jié)構(gòu)示意圖。所述書寫筆跡分段平滑系統(tǒng)包括鼠標點獲取單元1、坐標點處理單元2和坐標點擬合繪制單元3,其中鼠標點獲取單元1鼠標落壓第一點作為分段起始點O,記錄O點坐標。然后,鼠標移動獲得下一點,記為P并記錄P點坐標。最后,鼠標移動獲得下一點,記為P1并記錄P1點坐標。
坐標點處理單元302計算與起始點O的距離OP,并且計算獲得P1點通過P點到達起始點O的距離,即計算OP加上PP1的長度。然后,判斷獲得的坐標點的數(shù)量是否大于預先設(shè)置的數(shù)值,或者P1點通過P點到達起始點O的距離長度是否大于預先設(shè)置的長度。
若都不滿足則坐標點處理單元2與坐標點擬合繪制單元3相連,坐標點擬合繪制單元3根據(jù)所述坐標點存儲表中存儲的本段中的坐標點,擬合并繪制出曲線。然后,判斷鼠標是否抬起,若沒有抬起則坐標點擬合繪制單元3與鼠標點獲取單元1相連。若抬起則根據(jù)所述坐標點存儲表中存儲的該整體 曲線上所有點重新擬合,形成最后的筆跡繪制出來。
若滿足上面條件的任意一個則坐標點處理單元2與坐標點擬合繪制單元3相連,坐標點擬合繪制單元3將本段中所有坐標點完成存儲,根據(jù)所述坐標點存儲表中存儲的本段中所有坐標點,擬合并繪制出曲線。然后,判斷鼠標是否抬起,若沒有抬起則將本段的結(jié)束點作為下一個分段的起始點,然后坐標點擬合繪制單元3與鼠標點獲取單元1相連。若抬起則根據(jù)所述坐標點存儲表中存儲的該整體曲線上所有點重新擬合,形成最后的筆跡繪制出來。
需要說明的是,鼠標點獲取單元1、坐標點處理單元2和坐標點擬合繪制單元3的工作流程在上面已經(jīng)詳細,在此不做重復說明。
綜上所述,本發(fā)明提供的書寫筆跡分段平滑方法和系統(tǒng),創(chuàng)造性地提出了分段式的筆跡繪制;通過每獲得一點段內(nèi)的擬合、繪制,以及整段式的擬合、繪制;而且,本發(fā)明判斷所述線段PP1與線段OP的夾角是否小于45度,從而將具有很尖的筆跡進行優(yōu)化,去除了筆跡中的折線,使得筆跡更為平滑;另外,本發(fā)明判斷所述線段PP1是否大于預先設(shè)置的像素閾值,從而去除了在筆跡中存在的成團或成疙瘩狀的節(jié)點,去除了筆跡中的毛刺,大大改善了筆跡的順暢度;與此同時,本發(fā)明所述的書寫筆跡分段平滑方法和系統(tǒng)繪制效果更接近真實書寫;最后,整個所述的書寫筆跡分段平滑方法和系統(tǒng)簡便、緊湊,易于實現(xiàn)。
所屬領(lǐng)域的普通技術(shù)人員應當理解:以上所述僅為本發(fā)明的具體實施例而已,并不用于限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。