一種在投影交互系統(tǒng)中提升線(xiàn)條繪制速度的方法
【專(zhuān)利摘要】本發(fā)明涉及一種在投影交互系統(tǒng)中提升線(xiàn)條繪制速度的方法,包括:從鼠標(biāo)按下時(shí)刻開(kāi)始,在窗體上繪制第一個(gè)采樣點(diǎn);在前一時(shí)刻繪制的基礎(chǔ)上,進(jìn)行增量式繪制;結(jié)合最近一次采樣點(diǎn)的位置,對(duì)當(dāng)前時(shí)刻鼠標(biāo)所在位置是否應(yīng)該采樣進(jìn)行判斷;根據(jù)當(dāng)前采樣點(diǎn),與前一個(gè)采樣點(diǎn)的歐氏距離,判斷當(dāng)前時(shí)刻是否需要刷新,對(duì)窗體內(nèi)容進(jìn)行更新;計(jì)算最新的線(xiàn)條對(duì)應(yīng)的重繪區(qū)域,在窗體上該重繪區(qū)域內(nèi)進(jìn)行重新繪制,更新窗體內(nèi)容;鼠標(biāo)彈起,本次線(xiàn)條的繪制結(jié)束。本發(fā)明在線(xiàn)條繪制過(guò)程中,只需要繪制少量數(shù)目的采樣點(diǎn),并且盡量降低刷新頻率和刷新面積,使得系統(tǒng)的計(jì)算量降低到極致,從而給用戶(hù)帶來(lái)了流暢的感覺(jué),用戶(hù)體驗(yàn)明顯提升。
【專(zhuān)利說(shuō)明】一種在投影交互系統(tǒng)中提升線(xiàn)條繪制速度的方法
[0001]
技術(shù)領(lǐng)域
[0002]本發(fā)明涉及基于計(jì)算機(jī)視覺(jué)技術(shù)的人機(jī)交互技術(shù)領(lǐng)域,尤其是一種在投影交互系統(tǒng)中提升線(xiàn)條繪制速度的方法。
[0003]
【背景技術(shù)】
[0004]人機(jī)交互技術(shù)是計(jì)算機(jī)科學(xué)中至關(guān)重要的一個(gè)領(lǐng)域,其發(fā)展歷史基本上代表了計(jì)算機(jī)的發(fā)展歷史。從最早的大型機(jī)上的笨拙的開(kāi)關(guān)系統(tǒng),到早期鍵盤(pán)和鼠標(biāo)的出現(xiàn),以及當(dāng)下流行的觸摸屏,人機(jī)交互技術(shù)的發(fā)展速度日新月異。近年來(lái),由于計(jì)算機(jī)視覺(jué)技術(shù)的飛速發(fā)展,以及新的傳感器,比如深度相機(jī)Kinect、LeapMot1n等的出現(xiàn),使得各種便捷式的人機(jī)交互方式層出不窮。由于目前Kinect等深度相機(jī)在距離精度和空間分辨率上,都明顯不足,利用Kinect等深度相機(jī)直接與計(jì)算機(jī)進(jìn)行交互,并不能達(dá)到進(jìn)行精細(xì)操作的目的,不能直接在利用投影儀投射在墻壁上的顯示區(qū)域內(nèi)進(jìn)行便捷而靈敏的操作。
[0005]利用光筆和攝像頭組合形成的投影交互系統(tǒng),對(duì)投影圖像進(jìn)行操作,是最近出現(xiàn)的一種新技術(shù),該系統(tǒng)不僅安裝方便,使用便捷,而且成本也在可以接受的范圍以?xún)?nèi),因此很適合作為在教室內(nèi)與會(huì)議室內(nèi)進(jìn)行演示和講解的工具。利用投影交互系統(tǒng)進(jìn)行演示和講解的過(guò)程中,繪制線(xiàn)條和寫(xiě)字是最常見(jiàn)的操作。利用光筆或者手指直接在墻壁上或者白板上,對(duì)投影內(nèi)容進(jìn)行各種批注和繪制,可以顯著提高演示和講解的效果,加強(qiáng)觀(guān)眾的印象和理解。但是,常見(jiàn)的線(xiàn)條繪制方法并沒(méi)有考慮如何降低繪制過(guò)程中的系統(tǒng)負(fù)載,不僅每一個(gè)時(shí)刻點(diǎn)都需要對(duì)當(dāng)前畫(huà)面中的所有的線(xiàn)條,所有點(diǎn)的采樣點(diǎn)進(jìn)行繪制,而且在每個(gè)時(shí)刻點(diǎn),都對(duì)畫(huà)面整體進(jìn)行刷新,造成了大量的重復(fù)繪制和刷新。因此,常見(jiàn)的方法很容易給用戶(hù)造成畫(huà)線(xiàn)不流暢、系統(tǒng)不靈敏的感覺(jué),帶來(lái)了很差的用戶(hù)體驗(yàn)。
[0006]
【發(fā)明內(nèi)容】
[0007]本發(fā)明的目的在于提供一種能夠減小被繪制的線(xiàn)條的復(fù)雜程度,提高線(xiàn)條繪制的速度;降低刷新頻率和系統(tǒng)負(fù)載,提高線(xiàn)條繪制的流暢程度的在投影交互系統(tǒng)中提升線(xiàn)條繪制速度的方法。
[0008]為實(shí)現(xiàn)上述目的,本發(fā)明采用了以下技術(shù)方案:一種在投影交互系統(tǒng)中提升線(xiàn)條繪制速度的方法,該方法包括下列順序的步驟:
(1)從鼠標(biāo)按下時(shí)刻開(kāi)始,在窗體上繪制第一個(gè)采樣點(diǎn);
(2)在前一時(shí)刻繪制的基礎(chǔ)上,進(jìn)行增量式繪制:將最新出現(xiàn)的幾個(gè)采樣點(diǎn),以及其對(duì)應(yīng)的線(xiàn)條,疊加到前一時(shí)刻繪制的結(jié)果上,得到當(dāng)前時(shí)刻的繪制內(nèi)容;
(3)結(jié)合最近一次采樣點(diǎn)的位置,對(duì)當(dāng)前時(shí)刻鼠標(biāo)所在位置是否應(yīng)該采樣進(jìn)行判斷;
(4)根據(jù)當(dāng)前采樣點(diǎn),與前一個(gè)采樣點(diǎn)的歐氏距離,判斷當(dāng)前時(shí)刻是否需要刷新,對(duì)窗體內(nèi)容進(jìn)行更新;
(5)計(jì)算最新的線(xiàn)條對(duì)應(yīng)的重繪區(qū)域,在窗體上該重繪區(qū)域內(nèi)進(jìn)行重新繪制,更新窗體內(nèi)容;
(6 )鼠標(biāo)彈起,本次線(xiàn)條的繪制結(jié)束。
[0009]所述采樣點(diǎn)是指,在鼠標(biāo)的移動(dòng)過(guò)程中,每一個(gè)時(shí)刻對(duì)應(yīng)一個(gè)鼠標(biāo)坐標(biāo)位置,由于鼠標(biāo)的位置刷新速度快,一秒鐘有幾十個(gè)坐標(biāo)位置,對(duì)這幾十個(gè)坐標(biāo)位置進(jìn)行抽樣,選擇其中的一部分來(lái)進(jìn)行繪圖,這些被選中的鼠標(biāo)坐標(biāo)位置即為采樣點(diǎn)。
[0010]在步驟(2)中,所述采樣點(diǎn)的選取方法如下:
2a)設(shè)置用于存儲(chǔ)所有采樣點(diǎn)的采樣點(diǎn)隊(duì)列和用于存儲(chǔ)候選采樣點(diǎn)的候選隊(duì)列;
2b)將第一個(gè)鼠標(biāo)點(diǎn)位置加入到采樣點(diǎn)隊(duì)列中;
2c)計(jì)算第二個(gè)鼠標(biāo)點(diǎn)到第一個(gè)采樣點(diǎn)的歐氏距離,如果該歐氏距離大于采樣距離閾值Th_sample_dist,則將第二個(gè)鼠標(biāo)點(diǎn)加入采樣點(diǎn)隊(duì)列;反之,將第二個(gè)鼠標(biāo)點(diǎn)暫時(shí)記錄在候選隊(duì)列中;
2d)從采樣點(diǎn)隊(duì)列中提取出前一個(gè)采樣點(diǎn)坐標(biāo)Pl,然后計(jì)算當(dāng)前點(diǎn)P與Pl之間的歐式距離,將該歐氏距離與采樣距離閾值Th_samp I e_d i s t進(jìn)行比較:
2dl)若前者大于后者,則從候選隊(duì)列中提取候選點(diǎn);若候選點(diǎn)不存在,將當(dāng)前點(diǎn)P加入到采樣點(diǎn)隊(duì)列中;若存在候選點(diǎn)P2,則計(jì)算由P、P2、P1組成的以P2為頂點(diǎn)的三角形的夾角,若夾角接近平角,說(shuō)明此時(shí)當(dāng)前點(diǎn)P與候選點(diǎn)P2,以及前一個(gè)采樣點(diǎn)Pl在同一條線(xiàn)上,清空候選隊(duì)列,將當(dāng)前點(diǎn)P加入到采樣點(diǎn)隊(duì)列;若夾角非接近平角,說(shuō)明當(dāng)前點(diǎn)P與候選點(diǎn)P2、前一個(gè)采樣點(diǎn)Pl非在一條直線(xiàn)上,此時(shí)將候選點(diǎn)P2加入到采樣點(diǎn)隊(duì)列,當(dāng)前點(diǎn)P取代候選點(diǎn)P2成為候選點(diǎn);返回步驟2d),進(jìn)入循環(huán);
2d2)若前者小于后者,則從候選隊(duì)列中提取候選點(diǎn);若候選點(diǎn)不存在,將當(dāng)前點(diǎn)P加入到候選隊(duì)列中去,成為候選點(diǎn);若存在候選點(diǎn)P2,則計(jì)算由P、P2、P1組成的以P2為頂點(diǎn)的三角形的夾角;如果夾角接近平角,則用當(dāng)前點(diǎn)P代替候選點(diǎn)P2;若夾角非接近平角,則將候選點(diǎn)P2加入采樣點(diǎn)隊(duì)列,使當(dāng)前P成為候選點(diǎn);返回步驟2d),進(jìn)入循環(huán)。
[0011]在步驟(2)中,所述增量式繪制的方法如下:
2e)將當(dāng)前窗體上的顯示內(nèi)容,全部都保存到內(nèi)存中,存儲(chǔ)在一幅稱(chēng)為歷史圖像的圖像中;
2f)將歷史圖像中的繪制內(nèi)容復(fù)制出來(lái),然后繪制最新的采樣點(diǎn)及其對(duì)應(yīng)的線(xiàn)條,將新繪制內(nèi)容與復(fù)制的歷史圖像內(nèi)容進(jìn)行累加融合,得到當(dāng)前內(nèi)容;
2g)將當(dāng)前內(nèi)容繪制到緩存中,該緩存是雙緩存機(jī)制的第一塊緩存;
2h)將緩存中的當(dāng)前繪制內(nèi)容,繪制到窗體上,并且對(duì)窗體進(jìn)行刷新;
2i)用當(dāng)前繪制內(nèi)容更新歷史圖像,為下一次繪制做準(zhǔn)備。
[0012]在步驟(4)中,判斷某一個(gè)時(shí)刻是否需要刷新,判斷其與前一個(gè)刷新點(diǎn)的歐式距離,若兩個(gè)刷新點(diǎn)之間的歐氏距離小于刷新距離閾值Th_refresh_dist,則不進(jìn)行刷新,否貝IJ,進(jìn)行刷新。
[0013]在步驟(5)中,所述重繪區(qū)域是指被重新繪制的區(qū)域,只針對(duì)增量式繪制時(shí)當(dāng)前區(qū)域新出現(xiàn)的線(xiàn)條對(duì)應(yīng)的外接矩形區(qū)域進(jìn)行重繪,用小矩形序列來(lái)代替線(xiàn)條的外接矩形,覆蓋原來(lái)的重繪區(qū)域,所述小矩形隊(duì)列的計(jì)算方法如下: 5a)先設(shè)定矩形隊(duì)列中的小矩形的最大邊長(zhǎng)閾值和小矩形數(shù)目上限;
5b)計(jì)算當(dāng)前線(xiàn)段的線(xiàn)條長(zhǎng)度和方向角;
5c)比較線(xiàn)條長(zhǎng)度與小矩形最大邊長(zhǎng)閾值:
5cl)若前者小于后者,則繼續(xù)增加后續(xù)線(xiàn)條,分析總體外接矩形的尺寸,如果該尺寸依然小于閾值,則繼續(xù)增加新的線(xiàn)條,直到外接矩形尺寸大于最大邊長(zhǎng)閾值時(shí),用此時(shí)的幾條線(xiàn)條的外接矩形進(jìn)行重繪;
5c2)若前者大于后者,則判斷外接矩形中較短一邊與最大邊長(zhǎng)閾值的大小關(guān)系,如果外接矩形中較短一邊小于最大邊長(zhǎng)閾值,則直接用線(xiàn)條外接矩形作為重繪區(qū)域進(jìn)行重繪;如果外接矩形中較短一邊大于最大邊長(zhǎng)閾值,則計(jì)算小矩形邊長(zhǎng)與數(shù)目閾值的乘積,將外接矩形中較短一邊與該乘積進(jìn)行比較,若外接矩形中較短一邊大于乘積,則將線(xiàn)條長(zhǎng)度按照數(shù)目閾值進(jìn)行等分,根據(jù)等分線(xiàn)條對(duì)應(yīng)的位置得到小矩形隊(duì)列;若外接矩形中較短一邊小于乘積,則參照最大邊長(zhǎng)閾值對(duì)線(xiàn)條進(jìn)行均分,得到相應(yīng)的小矩形隊(duì)列;
5d)利用小矩形隊(duì)列對(duì)畫(huà)面區(qū)域進(jìn)行重繪。
[0014]由上述技術(shù)方案可知,本發(fā)明在線(xiàn)條繪制過(guò)程中,只需要繪制少量數(shù)目的采樣點(diǎn),并且盡量降低刷新頻率和刷新面積,使得系統(tǒng)的計(jì)算量降低到極致,從而給用戶(hù)帶來(lái)了流暢的感覺(jué),用戶(hù)體驗(yàn)明顯提升。常規(guī)的繪制線(xiàn)條的方法,由于采樣點(diǎn)沒(méi)有精選,容易導(dǎo)致局部區(qū)域采樣點(diǎn)過(guò)于密集,線(xiàn)條形狀出現(xiàn)鋸齒狀的現(xiàn)象,本發(fā)明適度減低了密集區(qū)域的采樣點(diǎn),使得線(xiàn)條的形狀更加平滑,視覺(jué)效果更好。
[0015]
【附圖說(shuō)明】
[0016]圖1為本發(fā)明的方法流程圖;
圖2為本發(fā)明中增量式繪制方法流程圖;
圖3為本發(fā)明中采樣點(diǎn)選取方法流程圖;
圖4為本發(fā)明中線(xiàn)條重繪區(qū)域的計(jì)算的方法流程圖;
圖5為現(xiàn)有技術(shù)中線(xiàn)條的重繪區(qū)域示意圖;
圖6為用系列小矩形代替線(xiàn)條的重繪區(qū)域示意圖。
[0017]
【具體實(shí)施方式】
[0018]如圖1所示,一種在投影交互系統(tǒng)中提升線(xiàn)條繪制速度的方法,該方法包括下列順序的步驟:
(1)從鼠標(biāo)按下時(shí)刻開(kāi)始,在窗體上繪制第一個(gè)采樣點(diǎn);
(2)在前一時(shí)刻繪制的基礎(chǔ)上,進(jìn)行增量式繪制:將最新出現(xiàn)的幾個(gè)采樣點(diǎn),以及其對(duì)應(yīng)的線(xiàn)條,疊加到前一時(shí)刻繪制的結(jié)果上,得到當(dāng)前時(shí)刻的繪制內(nèi)容;
(3)結(jié)合最近一次采樣點(diǎn)的位置,對(duì)當(dāng)前時(shí)刻鼠標(biāo)所在位置是否應(yīng)該采樣進(jìn)行判斷;
(4)根據(jù)當(dāng)前采樣點(diǎn),與前一個(gè)采樣點(diǎn)的歐氏距離,判斷當(dāng)前時(shí)刻是否需要刷新,對(duì)窗體內(nèi)容進(jìn)行更新;
(5)計(jì)算最新的線(xiàn)條對(duì)應(yīng)的重繪區(qū)域,在窗體上該重繪區(qū)域內(nèi)進(jìn)行重新繪制,更新窗體內(nèi)容;
(6 )鼠標(biāo)彈起,本次線(xiàn)條的繪制結(jié)束;
所述采樣點(diǎn)是指,在鼠標(biāo)的移動(dòng)過(guò)程中,每一個(gè)時(shí)刻對(duì)應(yīng)一個(gè)鼠標(biāo)坐標(biāo)位置,由于鼠標(biāo)的位置刷新速度快,一秒鐘有幾十個(gè)坐標(biāo)位置,對(duì)這幾十個(gè)坐標(biāo)位置進(jìn)行抽樣,選擇其中的一部分來(lái)進(jìn)行繪圖,這些被選中的鼠標(biāo)坐標(biāo)位置即為采樣點(diǎn)。在鼠標(biāo)的移動(dòng)過(guò)程中,每一個(gè)時(shí)刻,都會(huì)有一個(gè)鼠標(biāo)坐標(biāo)位置;鼠標(biāo)的位置刷新速度很快,一秒鐘有幾十個(gè)坐標(biāo)位置;對(duì)著幾十個(gè)坐標(biāo)位置進(jìn)行抽樣,選擇其中的一部分來(lái)進(jìn)行繪圖。這些被選中的坐標(biāo)位置,就是采樣點(diǎn)。鼠標(biāo)點(diǎn)是指每一個(gè)時(shí)刻的鼠標(biāo)坐標(biāo)位置,是原始的,沒(méi)有經(jīng)過(guò)任何篩選;而采樣點(diǎn)已經(jīng)經(jīng)過(guò)篩選了,是鼠標(biāo)點(diǎn)的一個(gè)子集。一秒鐘如果有50個(gè)鼠標(biāo)點(diǎn),那么采樣點(diǎn)的數(shù)目可能只有10個(gè)。
[0019]如圖3所示,在步驟(2)中,所述采樣點(diǎn)的選取方法如下:
2a)設(shè)置用于存儲(chǔ)所有采樣點(diǎn)的采樣點(diǎn)隊(duì)列和用于存儲(chǔ)候選采樣點(diǎn)的候選隊(duì)列;候選采樣點(diǎn)就是當(dāng)前還不能確定是否應(yīng)該采樣點(diǎn)的位置點(diǎn);
2b)將第一個(gè)鼠標(biāo)點(diǎn)位置加入到采樣點(diǎn)隊(duì)列中;
2c)計(jì)算第二個(gè)鼠標(biāo)點(diǎn)到第一個(gè)采樣點(diǎn)的歐氏距離,如果該歐氏距離大于采樣距離閾值Th_sample_dist,則將第二個(gè)鼠標(biāo)點(diǎn)加入采樣點(diǎn)隊(duì)列;反之,將第二個(gè)鼠標(biāo)點(diǎn)暫時(shí)記錄在候選隊(duì)列中;
2d)從采樣點(diǎn)隊(duì)列中提取出前一個(gè)采樣點(diǎn)坐標(biāo)Pl,然后計(jì)算當(dāng)前點(diǎn)P與Pl之間的歐式距離,將該歐氏距離與采樣距離閾值Th_samp I e_d i s t進(jìn)行比較:
2dl)若前者大于后者,則從候選隊(duì)列中提取候選點(diǎn);若候選點(diǎn)不存在,將當(dāng)前點(diǎn)P加入到采樣點(diǎn)隊(duì)列中;若存在候選點(diǎn)P2,則計(jì)算由P、P2、P1組成的以P2為頂點(diǎn)的三角形的夾角,若夾角接近平角,說(shuō)明此時(shí)當(dāng)前點(diǎn)P與候選點(diǎn)P2,以及前一個(gè)采樣點(diǎn)Pl在同一條線(xiàn)上,清空候選隊(duì)列,將當(dāng)前點(diǎn)P加入到采樣點(diǎn)隊(duì)列;若夾角非接近平角,說(shuō)明當(dāng)前點(diǎn)P與候選點(diǎn)P2、前一個(gè)采樣點(diǎn)Pl非在一條直線(xiàn)上,此時(shí)將候選點(diǎn)P2加入到采樣點(diǎn)隊(duì)列,當(dāng)前點(diǎn)P取代候選點(diǎn)P2成為候選點(diǎn);返回步驟2d),進(jìn)入循環(huán);
2d2)若前者小于后者,則從候選隊(duì)列中提取候選點(diǎn);若候選點(diǎn)不存在,將當(dāng)前點(diǎn)P加入到候選隊(duì)列中去,成為候選點(diǎn);若存在候選點(diǎn)P2,則計(jì)算由P、P2、P1組成的以P2為頂點(diǎn)的三角形的夾角;如果夾角接近平角,則用當(dāng)前點(diǎn)P代替候選點(diǎn)P2;若夾角非接近平角,則將候選點(diǎn)P2加入采樣點(diǎn)隊(duì)列,使當(dāng)前P成為候選點(diǎn);返回步驟2d),進(jìn)入循環(huán)。
[0020]線(xiàn)條繪制的過(guò)程中,并不是每一個(gè)時(shí)刻的鼠標(biāo)位置都需要進(jìn)行繪制,只需要對(duì)其中部分時(shí)刻進(jìn)行采樣即可,這樣可以有效降低系統(tǒng)負(fù)載,同時(shí)又不影響線(xiàn)條的外觀(guān)。
[0021]如圖2所示,在步驟(2)中,所述增量式繪制的方法如下:
2e)將當(dāng)前窗體上的顯示內(nèi)容,全部都保存到內(nèi)存中,存儲(chǔ)在一幅稱(chēng)為歷史圖像的圖像中;
2f)將歷史圖像中的繪制內(nèi)容復(fù)制出來(lái),然后繪制最新的采樣點(diǎn)及其對(duì)應(yīng)的線(xiàn)條,將新繪制內(nèi)容與復(fù)制的歷史圖像內(nèi)容進(jìn)行累加融合,得到當(dāng)前內(nèi)容;
2g)將當(dāng)前內(nèi)容繪制到緩存中,該緩存是雙緩存機(jī)制的第一塊緩存;
2h)將緩存中的當(dāng)前繪制內(nèi)容,繪制到窗體上,并且對(duì)窗體進(jìn)行刷新;
2i)用當(dāng)前繪制內(nèi)容更新歷史圖像,為下一次繪制做準(zhǔn)備。
[0022]在每一次繪制線(xiàn)條的操作結(jié)束之后,都將繪制的內(nèi)容保存下來(lái),稱(chēng)為歷史圖像。當(dāng)系統(tǒng)獲取到新的采樣點(diǎn)之后,首先將歷史圖像重新復(fù)制出來(lái),然后只需要對(duì)最新的采樣點(diǎn),及其連線(xiàn)進(jìn)行繪制即可,并且將新繪制的內(nèi)容,累積到歷史圖像上,從而得到當(dāng)前的畫(huà)面內(nèi)容。在將歷史圖像繪制到窗體上時(shí),為了消除快速刷新時(shí)造成的閃爍效應(yīng),采用雙緩存機(jī)制。先將所有的畫(huà)面內(nèi)容統(tǒng)一繪制到內(nèi)存畫(huà)板上,然后將內(nèi)存畫(huà)板一次性繪制到窗體上。最后再更新歷史圖像,以備下一個(gè)時(shí)刻使用。
[0023]在步驟(4)中,判斷某一個(gè)時(shí)刻是否需要刷新,判斷其與前一個(gè)刷新點(diǎn)的歐式距離,若兩個(gè)刷新點(diǎn)之間的歐氏距離小于刷新距離閾值Th_refresh_dist,則不進(jìn)行刷新,否貝1J,進(jìn)行刷新。在完成鼠標(biāo)點(diǎn)采樣之后,還需要對(duì)采樣點(diǎn)進(jìn)行進(jìn)一步的篩選,以決定在哪些時(shí)刻進(jìn)行刷新,可以保證在不影響畫(huà)線(xiàn)流暢性的前提下,降低計(jì)算量,提高用戶(hù)體驗(yàn)。假設(shè)I秒鐘鼠標(biāo)點(diǎn)的數(shù)目是60個(gè),從鼠標(biāo)點(diǎn)中選擇10個(gè)作為采樣點(diǎn),而從這10個(gè)采樣點(diǎn)中再選擇5個(gè)作為刷新點(diǎn)。刷新點(diǎn)是在采樣點(diǎn)中選擇的,是采樣點(diǎn)的子集。
[0024]如圖4所示,在步驟(5)中,所述重繪區(qū)域是指被重新繪制的區(qū)域,只針對(duì)增量式繪制時(shí)當(dāng)前區(qū)域新出現(xiàn)的線(xiàn)條對(duì)應(yīng)的外接矩形區(qū)域進(jìn)行重繪,用小矩形序列來(lái)代替線(xiàn)條的外接矩形,覆蓋原來(lái)的重繪區(qū)域,所述小矩形隊(duì)列的計(jì)算方法如下:
5a)先設(shè)定矩形隊(duì)列中的小矩形的最大邊長(zhǎng)閾值和小矩形數(shù)目上限;在進(jìn)行實(shí)際重繪時(shí),小矩形尺寸不能過(guò)大,否則增加了計(jì)算量;此外,在進(jìn)行每一輪執(zhí)行重繪操作時(shí),矩形框的數(shù)目也不能太多,否則也會(huì)降低系統(tǒng)效率;
5b)計(jì)算當(dāng)前線(xiàn)段的線(xiàn)條長(zhǎng)度和方向角;
5c)比較線(xiàn)條長(zhǎng)度與小矩形最大邊長(zhǎng)閾值:
5cl)若前者小于后者,則繼續(xù)增加后續(xù)線(xiàn)條,分析總體外接矩形的尺寸,如果該尺寸依然小于閾值,則繼續(xù)增加新的線(xiàn)條,直到外接矩形尺寸大于最大邊長(zhǎng)閾值時(shí),用此時(shí)的幾條線(xiàn)條的外接矩形進(jìn)行重繪;
5c2)若前者大于后者,則判斷外接矩形中較短一邊與最大邊長(zhǎng)閾值的大小關(guān)系,如果外接矩形中較短一邊小于最大邊長(zhǎng)閾值,則直接用線(xiàn)條外接矩形作為重繪區(qū)域進(jìn)行重繪;如果外接矩形中較短一邊大于最大邊長(zhǎng)閾值,則計(jì)算小矩形邊長(zhǎng)與數(shù)目閾值的乘積,將外接矩形中較短一邊與該乘積進(jìn)行比較,若外接矩形中較短一邊大于乘積,則將線(xiàn)條長(zhǎng)度按照數(shù)目閾值進(jìn)行等分,根據(jù)等分線(xiàn)條對(duì)應(yīng)的位置得到小矩形隊(duì)列;若外接矩形中較短一邊小于乘積,則參照最大邊長(zhǎng)閾值對(duì)線(xiàn)條進(jìn)行均分,得到相應(yīng)的小矩形隊(duì)列;
5d)利用小矩形隊(duì)列對(duì)畫(huà)面區(qū)域進(jìn)行重繪。最終計(jì)算得到的重繪區(qū)域如圖6中的矩形所不O
[0025]Windows操作系統(tǒng)在顯示窗體時(shí),經(jīng)常會(huì)出現(xiàn)窗體的各種變化,此時(shí)需要重新繪制顯示內(nèi)容。但是windows不是對(duì)所有的窗體都進(jìn)行重繪,也不是重繪該窗體的所有內(nèi)容,而是重新繪制一部分局部區(qū)域就行了,這樣可以節(jié)約時(shí)間。這個(gè)被重新繪制的區(qū)域,就叫重繪區(qū)域。一般重繪區(qū)域都是一個(gè)矩形。
[0026]圖5是一幅線(xiàn)條的圖像,常規(guī)情形下,會(huì)直接利用該線(xiàn)條的最小外接矩形進(jìn)行重繪,如圖中的虛線(xiàn)框所示,這種重繪區(qū)域,存在大量的空白部分,因此效率很低。
[0027]在線(xiàn)條的繪制過(guò)程中,傳統(tǒng)的重繪方式,是直接對(duì)整個(gè)畫(huà)面進(jìn)行重繪,這導(dǎo)致所有的內(nèi)容都需要重繪,消耗了大量的計(jì)算資源。本發(fā)明中的重繪區(qū)域,只針對(duì)增量式繪制時(shí)當(dāng)前區(qū)域新出現(xiàn)的線(xiàn)條對(duì)應(yīng)的外接矩形區(qū)域進(jìn)行重繪,從而極大地降低了重繪面積。除此之夕卜,為了進(jìn)一步降低重繪區(qū)域面積,用一系列小矩形的組合來(lái)代替線(xiàn)條的外接矩形,覆蓋原來(lái)的重繪區(qū)域,從而將計(jì)算量降低到極致。在子矩形的數(shù)目上,需要加以一定的控制,以保證刷新面積與重繪次數(shù)的平衡。
[0028]綜上所述,本發(fā)明在線(xiàn)條的繪制過(guò)程中,采用增量繪制的方法降低運(yùn)算量,即每次只在前一次繪制的基礎(chǔ)之上,繪制最新出現(xiàn)的幾個(gè)采樣點(diǎn),從而避免每個(gè)時(shí)刻點(diǎn)都需要對(duì)線(xiàn)條整體進(jìn)行重繪的高計(jì)算量操作;在繪制過(guò)程中,對(duì)每個(gè)時(shí)刻,當(dāng)前鼠標(biāo)點(diǎn)是否需要采樣的策略進(jìn)行優(yōu)化,在保持線(xiàn)條形狀不受到影響的同時(shí),盡量降低采樣點(diǎn)的數(shù)目,從而減低被繪制的線(xiàn)條的復(fù)雜程度,起到提高線(xiàn)條繪制速度的目的;在繪制過(guò)程中,對(duì)每個(gè)時(shí)刻,當(dāng)前圖像內(nèi)容是否需要刷新的判斷機(jī)制進(jìn)行優(yōu)化,在不影響人眼觀(guān)看效果,不造成明顯的延遲感覺(jué)的前提下,盡量降低刷新頻率,降低系統(tǒng)負(fù)載;在繪制過(guò)程中,對(duì)每個(gè)時(shí)刻,新繪制的線(xiàn)條的重繪區(qū)域進(jìn)行優(yōu)化,保證在重繪次數(shù)盡量少的情形下,使總的重繪面積降低到最少,從而提高線(xiàn)條繪制的流暢程度。
【主權(quán)項(xiàng)】
1.一種在投影交互系統(tǒng)中提升線(xiàn)條繪制速度的方法,該方法包括下列順序的步驟: (1)從鼠標(biāo)按下時(shí)刻開(kāi)始,在窗體上繪制第一個(gè)采樣點(diǎn); (2)在前一時(shí)刻繪制的基礎(chǔ)上,進(jìn)行增量式繪制:將最新出現(xiàn)的幾個(gè)采樣點(diǎn),以及其對(duì)應(yīng)的線(xiàn)條,疊加到前一時(shí)刻繪制的結(jié)果上,得到當(dāng)前時(shí)刻的繪制內(nèi)容; (3)結(jié)合最近一次采樣點(diǎn)的位置,對(duì)當(dāng)前時(shí)刻鼠標(biāo)所在位置是否應(yīng)該采樣進(jìn)行判斷; (4)根據(jù)當(dāng)前采樣點(diǎn),與前一個(gè)采樣點(diǎn)的歐氏距離,判斷當(dāng)前時(shí)刻是否需要刷新,對(duì)窗體內(nèi)容進(jìn)行更新; (5)計(jì)算最新的線(xiàn)條對(duì)應(yīng)的重繪區(qū)域,在窗體上該重繪區(qū)域內(nèi)進(jìn)行重新繪制,更新窗體內(nèi)容; (6 )鼠標(biāo)彈起,本次線(xiàn)條的繪制結(jié)束。2.根據(jù)權(quán)利要求1所述的在投影交互系統(tǒng)中提升線(xiàn)條繪制速度的方法,其特征在于:所述采樣點(diǎn)是指,在鼠標(biāo)的移動(dòng)過(guò)程中,每一個(gè)時(shí)刻對(duì)應(yīng)一個(gè)鼠標(biāo)坐標(biāo)位置,由于鼠標(biāo)的位置刷新速度快,一秒鐘有幾十個(gè)坐標(biāo)位置,對(duì)這幾十個(gè)坐標(biāo)位置進(jìn)行抽樣,選擇其中的一部分來(lái)進(jìn)行繪圖,這些被選中的鼠標(biāo)坐標(biāo)位置即為采樣點(diǎn)。3.根據(jù)權(quán)利要求1所述的在投影交互系統(tǒng)中提升線(xiàn)條繪制速度的方法,其特征在于:在步驟(2)中,所述采樣點(diǎn)的選取方法如下: 2a)設(shè)置用于存儲(chǔ)所有采樣點(diǎn)的采樣點(diǎn)隊(duì)列和用于存儲(chǔ)候選采樣點(diǎn)的候選隊(duì)列; 2b)將第一個(gè)鼠標(biāo)點(diǎn)位置加入到采樣點(diǎn)隊(duì)列中; 2c)計(jì)算第二個(gè)鼠標(biāo)點(diǎn)到第一個(gè)采樣點(diǎn)的歐氏距離,如果該歐氏距離大于采樣距離閾值Th_sample_dist,則將第二個(gè)鼠標(biāo)點(diǎn)加入采樣點(diǎn)隊(duì)列;反之,將第二個(gè)鼠標(biāo)點(diǎn)暫時(shí)記錄在候選隊(duì)列中; 2d)從采樣點(diǎn)隊(duì)列中提取出前一個(gè)采樣點(diǎn)坐標(biāo)Pl,然后計(jì)算當(dāng)前點(diǎn)P與Pl之間的歐式距離,將該歐氏距離與采樣距離閾值Th_samp I e_d i s t進(jìn)行比較: 2dl)若前者大于后者,則從候選隊(duì)列中提取候選點(diǎn);若候選點(diǎn)不存在,將當(dāng)前點(diǎn)P加入到采樣點(diǎn)隊(duì)列中;若存在候選點(diǎn)P2,則計(jì)算由P、P2、P1組成的以P2為頂點(diǎn)的三角形的夾角,若夾角接近平角,說(shuō)明此時(shí)當(dāng)前點(diǎn)P與候選點(diǎn)P2,以及前一個(gè)采樣點(diǎn)Pl在同一條線(xiàn)上,清空候選隊(duì)列,將當(dāng)前點(diǎn)P加入到采樣點(diǎn)隊(duì)列;若夾角非接近平角,說(shuō)明當(dāng)前點(diǎn)P與候選點(diǎn)P2、前一個(gè)采樣點(diǎn)Pl非在一條直線(xiàn)上,此時(shí)將候選點(diǎn)P2加入到采樣點(diǎn)隊(duì)列,當(dāng)前點(diǎn)P取代候選點(diǎn)P2成為候選點(diǎn);返回步驟2d),進(jìn)入循環(huán); 2d2)若前者小于后者,則從候選隊(duì)列中提取候選點(diǎn);若候選點(diǎn)不存在,將當(dāng)前點(diǎn)P加入到候選隊(duì)列中去,成為候選點(diǎn);若存在候選點(diǎn)P2,則計(jì)算由P、P2、P1組成的以P2為頂點(diǎn)的三角形的夾角;如果夾角接近平角,則用當(dāng)前點(diǎn)P代替候選點(diǎn)P2;若夾角非接近平角,則將候選點(diǎn)P2加入采樣點(diǎn)隊(duì)列,使當(dāng)前P成為候選點(diǎn);返回步驟2d),進(jìn)入循環(huán)。4.根據(jù)權(quán)利要求1所述的在投影交互系統(tǒng)中提升線(xiàn)條繪制速度的方法,其特征在于:在步驟(2)中,所述增量式繪制的方法如下: 2e)將當(dāng)前窗體上的顯示內(nèi)容,全部都保存到內(nèi)存中,存儲(chǔ)在一幅稱(chēng)為歷史圖像的圖像中; 2f)將歷史圖像中的繪制內(nèi)容復(fù)制出來(lái),然后繪制最新的采樣點(diǎn)及其對(duì)應(yīng)的線(xiàn)條,將新繪制內(nèi)容與復(fù)制的歷史圖像內(nèi)容進(jìn)行累加融合,得到當(dāng)前內(nèi)容; 2g)將當(dāng)前內(nèi)容繪制到緩存中,該緩存是雙緩存機(jī)制的第一塊緩存; 2h)將緩存中的當(dāng)前繪制內(nèi)容,繪制到窗體上,并且對(duì)窗體進(jìn)行刷新; 2i)用當(dāng)前繪制內(nèi)容更新歷史圖像,為下一次繪制做準(zhǔn)備。5.根據(jù)權(quán)利要求1所述的在投影交互系統(tǒng)中提升線(xiàn)條繪制速度的方法,其特征在于:在步驟(4)中,判斷某一個(gè)時(shí)刻是否需要刷新,判斷其與前一個(gè)刷新點(diǎn)的歐式距離,若兩個(gè)刷新點(diǎn)之間的歐氏距離小于刷新距離閾值Th_refresh_dist,則不進(jìn)行刷新;否則,進(jìn)行刷新。6.根據(jù)權(quán)利要求1所述的在投影交互系統(tǒng)中提升線(xiàn)條繪制速度的方法,其特征在于:在步驟(5)中,所述重繪區(qū)域是指被重新繪制的區(qū)域,只針對(duì)增量式繪制時(shí)當(dāng)前區(qū)域新出現(xiàn)的線(xiàn)條對(duì)應(yīng)的外接矩形區(qū)域進(jìn)行重繪,用小矩形序列來(lái)代替線(xiàn)條的外接矩形,覆蓋原來(lái)的重繪區(qū)域,所述小矩形隊(duì)列的計(jì)算方法如下: 5a)先設(shè)定矩形隊(duì)列中的小矩形的最大邊長(zhǎng)閾值和小矩形數(shù)目上限; 5b)計(jì)算當(dāng)前線(xiàn)段的線(xiàn)條長(zhǎng)度和方向角; 5c)比較線(xiàn)條長(zhǎng)度與小矩形最大邊長(zhǎng)閾值: 5cl)若前者小于后者,則繼續(xù)增加后續(xù)線(xiàn)條,分析總體外接矩形的尺寸,如果該尺寸依然小于閾值,則繼續(xù)增加新的線(xiàn)條,直到外接矩形尺寸大于最大邊長(zhǎng)閾值時(shí),用此時(shí)的幾條線(xiàn)條的外接矩形進(jìn)行重繪; 5c2)若前者大于后者,則判斷外接矩形中較短一邊與最大邊長(zhǎng)閾值的大小關(guān)系,如果外接矩形中較短一邊小于最大邊長(zhǎng)閾值,則直接用線(xiàn)條外接矩形作為重繪區(qū)域進(jìn)行重繪;如果外接矩形中較短一邊大于最大邊長(zhǎng)閾值,則計(jì)算小矩形邊長(zhǎng)與數(shù)目閾值的乘積,將外接矩形中較短一邊與該乘積進(jìn)行比較,若外接矩形中較短一邊大于乘積,則將線(xiàn)條長(zhǎng)度按照數(shù)目閾值進(jìn)行等分,根據(jù)等分線(xiàn)條對(duì)應(yīng)的位置得到小矩形隊(duì)列;若外接矩形中較短一邊小于乘積,則參照最大邊長(zhǎng)閾值對(duì)線(xiàn)條進(jìn)行均分,得到相應(yīng)的小矩形隊(duì)列; 5d)利用小矩形隊(duì)列對(duì)畫(huà)面區(qū)域進(jìn)行重繪。
【文檔編號(hào)】G06F3/038GK106095139SQ201610389333
【公開(kāi)日】2016年11月9日
【申請(qǐng)日】2016年5月30日 公開(kāi)號(hào)201610389333.7, CN 106095139 A, CN 106095139A, CN 201610389333, CN-A-106095139, CN106095139 A, CN106095139A, CN201610389333, CN201610389333.7
【發(fā)明人】汪俊鋒, 鄧宏平
【申請(qǐng)人】安徽慧視金瞳科技有限公司