本發(fā)明涉及計(jì)算機(jī)繪圖技術(shù)領(lǐng)域,特別是涉及一種繪制箭頭的方法、計(jì)算機(jī)設(shè)備以及存儲(chǔ)介質(zhì)。
背景技術(shù):
隨著計(jì)算機(jī)技術(shù)的發(fā)展,計(jì)算機(jī)繪圖已經(jīng)成為計(jì)算機(jī)技術(shù)中的一項(xiàng)重要內(nèi)容,涉及美術(shù)、設(shè)計(jì)、教育、軍事以及會(huì)議等眾多領(lǐng)域,在計(jì)算機(jī)繪圖的技術(shù)中,繪制箭頭是其中一項(xiàng)基本而重要的內(nèi)容,在很多不同的應(yīng)用領(lǐng)域的繪圖中,都會(huì)涉及到箭頭的繪制,例如流程圖、走向趨勢(shì)圖等。目前的箭頭的繪制,要么是直接使用直線箭頭,要么是通過(guò)一些曲線,例如貝塞爾曲線、樣條曲線等進(jìn)行繪制,這些曲線的控制點(diǎn)復(fù)雜,控制效果并不好。例如,貝塞爾曲線的控制點(diǎn)并不在曲線上,而且控制點(diǎn)太多,而樣條曲線的控制點(diǎn)雖然在曲線上,但是在控制點(diǎn)很近或一些其它情況下會(huì)出現(xiàn)拐彎,變形很厲害,從而導(dǎo)致本來(lái)應(yīng)該是一條凸曲線,結(jié)果繪制出來(lái)的變成兩端有點(diǎn)翹的波浪形曲線。
技術(shù)實(shí)現(xiàn)要素:
基于此,本發(fā)明實(shí)施例的目的在于提供一種繪制箭頭的方法、一種計(jì)算機(jī)設(shè)備以及一種存儲(chǔ)介質(zhì),以提升繪制出的箭頭的平滑性能和繪制過(guò)程中的控制效果,且繪制過(guò)程簡(jiǎn)單。
為達(dá)到上述目的,一個(gè)實(shí)施例中采用以下技術(shù)方案:
一種繪制箭頭的方法,包括步驟:
在接收到箭頭繪制指令時(shí),采集繪制過(guò)程中的第一個(gè)采樣點(diǎn)、第二個(gè)采樣點(diǎn)以及第三個(gè)采樣點(diǎn),并確定通過(guò)第一個(gè)采樣點(diǎn)、第二個(gè)采樣點(diǎn)以及第三個(gè)采樣點(diǎn)的第一初始拋物線;
確定以第一個(gè)采樣點(diǎn)為中心點(diǎn)的位于第一初始拋物線一側(cè)的第一單側(cè)分立點(diǎn)、位于第一初始拋物線另一側(cè)的第一對(duì)側(cè)分立點(diǎn),以第二個(gè)采樣點(diǎn)為中心點(diǎn)的位于第一初始拋物線一側(cè)的第二單側(cè)分立點(diǎn)、位于第一初始拋物線另一側(cè)的第二對(duì)側(cè)分立點(diǎn),以及確定以第三個(gè)采樣點(diǎn)為中心點(diǎn)的位于第一初始拋物線一側(cè)的第三單側(cè)分立點(diǎn)、位于第一初始拋物線另一側(cè)的第三對(duì)側(cè)分立點(diǎn);
確定通過(guò)第一單側(cè)分立點(diǎn)、第二單側(cè)分立點(diǎn)及第三單側(cè)分立點(diǎn)的第一拋物線,通過(guò)第一對(duì)側(cè)分立點(diǎn)、第二對(duì)側(cè)分立點(diǎn)及第三對(duì)側(cè)分立點(diǎn)的第二拋物線;
根據(jù)第一拋物線依次連接第一單側(cè)分立點(diǎn)、第二單側(cè)分立點(diǎn)、第三單側(cè)分立點(diǎn),根據(jù)設(shè)定箭頭端形狀及大小連接第三單側(cè)分立點(diǎn)與第三個(gè)采樣點(diǎn)、第三個(gè)采樣點(diǎn)與第三對(duì)側(cè)分立點(diǎn),并根據(jù)第二拋物線依次連接第一對(duì)側(cè)分立點(diǎn)、第二對(duì)側(cè)分立點(diǎn)、第三對(duì)側(cè)分立點(diǎn),獲得繪制的箭頭。
一種計(jì)算機(jī)設(shè)備,包括存儲(chǔ)器、處理器及存儲(chǔ)在存儲(chǔ)器上并可在處理器上運(yùn)行的計(jì)算機(jī)程序,所述處理器執(zhí)行所述程序時(shí)實(shí)現(xiàn)如上所述的繪制箭頭的方法。
一種存儲(chǔ)介質(zhì),其上存儲(chǔ)有計(jì)算機(jī)程序,該程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)如上所述的繪制箭頭的方法。
基于如上所述的實(shí)施例,通過(guò)采集三個(gè)采樣點(diǎn),基于采集的三個(gè)采樣點(diǎn)確定出通過(guò)該三個(gè)采樣點(diǎn)的第一初始拋物線,并確定出以各采樣點(diǎn)為中心點(diǎn)的位于第一初始拋物線兩側(cè)的分立點(diǎn),在基于各分立點(diǎn)確定出第一初始拋物線兩側(cè)的第一拋物線、第二拋物線,然后結(jié)合第一拋物線、第二拋物線和設(shè)定箭頭端形狀及大小,對(duì)相關(guān)的點(diǎn)進(jìn)行連接從而獲得繪制的箭頭。其基于拋物線實(shí)現(xiàn)箭頭的繪制,且只需要三個(gè)點(diǎn)就可以繪制出箭頭,克服了已有的通過(guò)塞爾曲線、樣條曲線等進(jìn)行繪制時(shí)控制點(diǎn)復(fù)雜、易變形的問(wèn)題,提升了繪制出的箭頭的平滑性能和繪制過(guò)程中的控制效果,且繪制過(guò)程簡(jiǎn)單。
附圖說(shuō)明
圖1是一個(gè)實(shí)施例中的繪制箭頭的方法的流程示意圖;
圖2是一個(gè)示例中本發(fā)明的各實(shí)施例方案中生成的拋物線的特性示意圖;
圖3是一個(gè)應(yīng)用示例中的繪制的箭頭的示意圖;
圖4另一個(gè)應(yīng)用示例中的繪制的箭頭的示意圖;
圖5是另一個(gè)應(yīng)用示例中的繪制的箭頭的示意圖。
具體實(shí)施方式
為使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步的詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施方式僅僅用以解釋本發(fā)明,并不限定本發(fā)明的保護(hù)范圍。
圖1中示出了一個(gè)實(shí)施例中的繪制箭頭的方法的流程示意圖,該實(shí)施例中是一個(gè)繪制只有一個(gè)箭頭端的示意圖為例進(jìn)行說(shuō)明。
如圖1所示,該實(shí)施例中的繪制箭頭的方法包括下述步驟s101至步驟s105.
步驟s101:在接收到箭頭繪制指令時(shí),采集繪制過(guò)程中的第一個(gè)采樣點(diǎn)、第二個(gè)采樣點(diǎn)以及第三個(gè)采樣點(diǎn),并確定通過(guò)第一個(gè)采樣點(diǎn)、第二個(gè)采樣點(diǎn)以及第三個(gè)采樣點(diǎn)的第一初始拋物線。
在一個(gè)具體示例中,采集的第一個(gè)采樣點(diǎn)、第二個(gè)采樣點(diǎn)以及第三個(gè)采樣點(diǎn),可以是在接收到箭頭繪制指令之后,所檢測(cè)到的屏幕上的第一個(gè)鼠標(biāo)點(diǎn)擊點(diǎn)、第二個(gè)鼠標(biāo)點(diǎn)擊點(diǎn)以及第三個(gè)鼠標(biāo)點(diǎn)擊點(diǎn)??梢岳斫獾氖?,當(dāng)該實(shí)施例的方法是在觸摸式設(shè)備上執(zhí)行時(shí),這里的鼠標(biāo)點(diǎn)擊點(diǎn)是指在觸摸屏設(shè)備上的觸摸點(diǎn)。基于第一個(gè)采樣點(diǎn)、第二個(gè)采樣點(diǎn)以及第三個(gè)采樣點(diǎn),確定通過(guò)了這三個(gè)點(diǎn)的拋物線的方式,可以采用任何可能的確定拋物線的方式進(jìn)行。
步驟s102:確定以第一個(gè)采樣點(diǎn)為中心點(diǎn)的位于第一初始拋物線一側(cè)的第一單側(cè)分立點(diǎn)、位于第一初始拋物線另一側(cè)的第一對(duì)側(cè)分立點(diǎn),以第二個(gè)采樣點(diǎn)為中心點(diǎn)的位于第一初始拋物線一側(cè)的第二單側(cè)分立點(diǎn)、位于第一初始拋物線另一側(cè)的第二對(duì)側(cè)分立點(diǎn),以及確定以第三個(gè)采樣點(diǎn)為中心點(diǎn)的位于第一初始拋物線一側(cè)的第三單側(cè)分立點(diǎn)、位于第一初始拋物線另一側(cè)的第三對(duì)側(cè)分立點(diǎn)。
在該實(shí)施例的一個(gè)具體示例中,確定以第一個(gè)采樣點(diǎn)為中心點(diǎn)的位于第一初始拋物線一側(cè)的第一單側(cè)分立點(diǎn)、位于第一初始拋物線另一側(cè)的第一對(duì)側(cè)分立點(diǎn)時(shí),可以采用下述方式進(jìn)行:
確定通過(guò)第一個(gè)采樣點(diǎn)的第一初始拋物線的切線(為便于與后續(xù)其他的切線相區(qū)分,本實(shí)施例以及下述各實(shí)施例中稱為第一切線);進(jìn)一步地,在一個(gè)示例中,第一單側(cè)分立點(diǎn)與第一對(duì)側(cè)分立點(diǎn)可以沿第一切線對(duì)稱;
確定通過(guò)第一個(gè)采樣點(diǎn)且與第一切線垂直相交的直線(為便于與后續(xù)其他的垂直相交的直線相區(qū)分,本實(shí)施例以及下述各實(shí)施例中稱為第一垂直線);
確定第一垂直線上距離第一個(gè)采樣點(diǎn)第一距離的第一單側(cè)分立點(diǎn)和第一對(duì)側(cè)分立點(diǎn)。其中,這里的第一距離可以結(jié)合實(shí)際需要進(jìn)行設(shè)定,通常與所要繪制的箭頭的開(kāi)口處的寬度有關(guān)。
在該實(shí)施例的一個(gè)具體示例中,確定以第二個(gè)采樣點(diǎn)為中心點(diǎn)的位于第一初始拋物線一側(cè)的第二單側(cè)分立點(diǎn)、位于第一初始拋物線另一側(cè)的第二對(duì)側(cè)分立點(diǎn)時(shí),可以采用下述方式進(jìn)行:
確定通過(guò)第二個(gè)采樣點(diǎn)的第一初始拋物線的切線(為便于與其他的切線相區(qū)分,本實(shí)施例以及下述各實(shí)施例中稱為第二切線);進(jìn)一步地,在一個(gè)示例中,第二單側(cè)分立點(diǎn)與第二對(duì)側(cè)分立點(diǎn)可以沿第二切線對(duì)稱;
確定通過(guò)第二個(gè)采樣點(diǎn)且與第二切線垂直相交的直線(為便于與其他的垂直相交的直線相區(qū)分,本實(shí)施例以及下述各實(shí)施例中稱為第二垂直線);
確定第二垂直線上距離第二個(gè)采樣點(diǎn)第二距離的第二單側(cè)分立點(diǎn)和第二對(duì)側(cè)分立點(diǎn)。其中,這里的第二距離可以結(jié)合實(shí)際需要進(jìn)行設(shè)定,通常與所要繪制的箭頭的開(kāi)口處的寬度以及箭頭走勢(shì)過(guò)程中的箭頭寬度的逐漸縮小的程度有關(guān)。進(jìn)一步地,在一個(gè)具體示例中,第一距離可以大于第二距離。進(jìn)一步地,在一個(gè)具體示例中,第三單側(cè)分立點(diǎn)/第三對(duì)側(cè)分立點(diǎn)到第一初始拋物線的距離小于第二距離,從而獲得逐漸聚攏的箭頭顯示效果。
在該實(shí)施例的一個(gè)具體示例中,確定以第三個(gè)采樣點(diǎn)為中心點(diǎn)的位于第一初始拋物線一側(cè)的第三單側(cè)分立點(diǎn)、位于第一初始拋物線另一側(cè)的第三對(duì)側(cè)分立點(diǎn)時(shí),可以采用下述方式進(jìn)行:
根據(jù)設(shè)定箭頭端形狀及大小,確定出以第三個(gè)采樣點(diǎn)為中心點(diǎn)的位于第一初始拋物線一側(cè)的箭頭端外側(cè)第一端點(diǎn)、位于第一初始拋物線另一側(cè)的箭頭端外側(cè)第二端點(diǎn);
根據(jù)設(shè)定箭頭端形狀及大小、結(jié)合箭頭端外側(cè)第一端點(diǎn)、箭頭端外側(cè)第二端點(diǎn),確定出以第三個(gè)采樣點(diǎn)為中心點(diǎn)的位于第一初始拋物線一側(cè)的箭頭端內(nèi)側(cè)第一端點(diǎn)、位于第一初始拋物線另一側(cè)的箭頭端內(nèi)側(cè)第二端點(diǎn),并將箭頭端內(nèi)側(cè)第一端點(diǎn)作為第三單側(cè)分立點(diǎn),將箭頭端內(nèi)側(cè)第二端點(diǎn)作為第三對(duì)側(cè)分立點(diǎn)。
步驟s103:確定通過(guò)第一單側(cè)分立點(diǎn)、第二單側(cè)分立點(diǎn)及第三單側(cè)分立點(diǎn)的第一拋物線,通過(guò)第一對(duì)側(cè)分立點(diǎn)、第二對(duì)側(cè)分立點(diǎn)及第三對(duì)側(cè)分立點(diǎn)的第二拋物線。
確定通過(guò)第一單側(cè)分立點(diǎn)、第二單側(cè)分立點(diǎn)及第三單側(cè)分立點(diǎn)的第一拋物線的方式,確定通過(guò)第一對(duì)側(cè)分立點(diǎn)、第二對(duì)側(cè)分立點(diǎn)及第三對(duì)側(cè)分立點(diǎn)的第二拋物線的方式,可以采用任何可能的確定拋物線的方式進(jìn)行。進(jìn)一步地,在一個(gè)示例中,可以采用與步驟s101中確定第一初始拋物線的同樣的方式進(jìn)行。
步驟s104:根據(jù)第一拋物線依次連接第一單側(cè)分立點(diǎn)、第二單側(cè)分立點(diǎn)、第三單側(cè)分立點(diǎn),根據(jù)設(shè)定箭頭端形狀及大小連接第三單側(cè)分立點(diǎn)與第三個(gè)采樣點(diǎn)、第三個(gè)采樣點(diǎn)與第三對(duì)側(cè)分立點(diǎn),并根據(jù)第二拋物線依次連接第一對(duì)側(cè)分立點(diǎn)、第二對(duì)側(cè)分立點(diǎn)、第三對(duì)側(cè)分立點(diǎn),獲得繪制的箭頭。
在根據(jù)設(shè)定箭頭端形狀及大小連接第三單側(cè)分立點(diǎn)與第三個(gè)采樣點(diǎn)、第三個(gè)采樣點(diǎn)與第三對(duì)側(cè)分立點(diǎn)時(shí),基于設(shè)定箭頭形狀及大小,可以采用任何可能的方式實(shí)現(xiàn)第三單側(cè)分立點(diǎn)與第三個(gè)采樣點(diǎn)、第三個(gè)采樣點(diǎn)與第三對(duì)側(cè)分立點(diǎn)之間的連接,例如直線連接、曲線(拋物線等其他非直線的曲線等)連接等。
在一個(gè)具體示例中,基于如上所述的具體示例中的確定以第三個(gè)采樣點(diǎn)為中心點(diǎn)的位于第一初始拋物線一側(cè)的第三單側(cè)分立點(diǎn)、位于第一初始拋物線另一側(cè)的第三對(duì)側(cè)分立點(diǎn)的方式,在根據(jù)設(shè)定箭頭端形狀及大小連接第三單側(cè)分立點(diǎn)與第三個(gè)采樣點(diǎn)、第三個(gè)采樣點(diǎn)與第三對(duì)側(cè)分立點(diǎn)時(shí),可以采用下述方式進(jìn)行:
用直線分別連接第三單側(cè)分立點(diǎn)與箭頭端外側(cè)第一端點(diǎn)、箭頭端外側(cè)第一端點(diǎn)與第三個(gè)采樣點(diǎn)、第三個(gè)采樣點(diǎn)與箭頭端外側(cè)第二端點(diǎn)、箭頭端外側(cè)第二端點(diǎn)與第三對(duì)側(cè)分立點(diǎn)。
其中,上述設(shè)定箭頭端形狀及大小可以包括箭頭端夾角、箭頭端長(zhǎng)度,此時(shí),箭頭端外側(cè)第一端點(diǎn)至第三個(gè)采樣點(diǎn)的第一直線線段的長(zhǎng)度為箭頭端長(zhǎng)度,箭頭端外側(cè)第二端點(diǎn)至第三個(gè)采樣點(diǎn)的第二直線線段的長(zhǎng)度為箭頭端長(zhǎng)度,第一直線線段與第二直線線段的夾角為箭頭端夾角。
另一方面,設(shè)定箭頭端形狀及大小還可以包括箭頭端內(nèi)側(cè)夾角、箭頭端內(nèi)側(cè)長(zhǎng)度,此時(shí),箭頭端外側(cè)第一端點(diǎn)至箭頭端內(nèi)側(cè)第一端點(diǎn)的第三直線線段的長(zhǎng)度為箭頭端內(nèi)側(cè)長(zhǎng)度,箭頭端外側(cè)第二端點(diǎn)至箭頭端內(nèi)側(cè)第二端點(diǎn)的第四直線線段的長(zhǎng)度為箭頭端內(nèi)側(cè)長(zhǎng)度,第一直線線段與第三直線線段的夾角為箭頭端內(nèi)側(cè)夾角,第二直線線段與第四直線線段的夾角為箭頭端內(nèi)側(cè)夾角。
基于如上所述的實(shí)施例,通過(guò)采集三個(gè)采樣點(diǎn),基于采集的三個(gè)采樣點(diǎn)確定出通過(guò)該三個(gè)采樣點(diǎn)的第一初始拋物線,并確定出以各采樣點(diǎn)為中心點(diǎn)的位于第一初始拋物線兩側(cè)的分立點(diǎn),在基于各分立點(diǎn)確定出第一初始拋物線兩側(cè)的第一拋物線、第二拋物線,然后結(jié)合第一拋物線、第二拋物線和設(shè)定箭頭端形狀及大小,對(duì)相關(guān)的點(diǎn)進(jìn)行連接從而獲得繪制的箭頭。其基于拋物線實(shí)現(xiàn)箭頭的繪制,且只需要三個(gè)點(diǎn)就可以繪制出箭頭,克服了已有的通過(guò)塞爾曲線、樣條曲線等進(jìn)行繪制時(shí)控制點(diǎn)復(fù)雜、易變形的問(wèn)題,提升了繪制出的箭頭的平滑性能和繪制過(guò)程中的控制效果,且繪制過(guò)程簡(jiǎn)單。
基于如上所述的實(shí)施例的方案,可以確定,在本實(shí)施例中,不再使用常用的貝塞爾曲線、樣條曲線等曲線實(shí)現(xiàn)箭頭的繪制。由于這些曲線方程復(fù)雜,而且系統(tǒng)繪制函數(shù)提供曲線方程、切線方程等,導(dǎo)致拾取曲線上的任意點(diǎn)、自定義虛線繪制幾乎不可能。而且,這些曲線的控制點(diǎn)復(fù)雜或控制效果不好,例如,貝塞爾曲線控制點(diǎn)不在曲線上,且控制點(diǎn)太多,而樣條曲線控制點(diǎn)雖在曲線,但在點(diǎn)很近或一些其它情況下會(huì)出現(xiàn)拐彎變形很厲害,本來(lái)應(yīng)該是一條凸曲線,會(huì)變成兩端有點(diǎn)翹的波浪形曲線。而在本發(fā)明實(shí)施例的方案中,結(jié)合拋物線與切向拼接完成箭頭的繪制。具體來(lái)說(shuō),利用二維參數(shù)拋物線加切向拼接技術(shù)來(lái)完成箭頭繪制。
本發(fā)明實(shí)施例方案的基本原理,是任意給定三個(gè)點(diǎn),能夠確定一條拋物線,可以理解的是,當(dāng)這三個(gè)點(diǎn)共同一條直線時(shí),確定的是直線?;谌齻€(gè)點(diǎn)確定拋物線的方式可以采用任何可能的方式進(jìn)行。
在本實(shí)施例方案的一個(gè)具體示例中,基于給定的三個(gè)點(diǎn)(例如上述第一個(gè)采樣點(diǎn)、第二個(gè)采樣點(diǎn)、第三個(gè)采樣點(diǎn)),可以采用下述方式確定通過(guò)這三個(gè)點(diǎn)的拋物線:
將拋物線的橫坐標(biāo)用一個(gè)一元二次方程(為便于區(qū)分,可稱之為第一一元二次方程)表示,縱坐標(biāo)用另一個(gè)一元二次方程(為便于區(qū)分,可稱之為第二一元二次方程)表示,其中,第一一元二次方程與第二一元二次方程的參數(shù)(未知參數(shù))相同,即第一一元二次方程與第二一元二次方程使用相同的參數(shù);
設(shè)定這三個(gè)點(diǎn)(例如上述第一個(gè)采樣點(diǎn)、第二個(gè)采樣點(diǎn)、第三個(gè)采樣點(diǎn))的參數(shù)值,并根據(jù)這三個(gè)點(diǎn)的參數(shù)值、這三個(gè)點(diǎn)的橫坐標(biāo)值、這三個(gè)點(diǎn)的縱坐標(biāo)值,確定出第一一元二次方程的系數(shù)與常數(shù)、以及第二一元二次方程的系數(shù)與常數(shù)。
確定出第一一元二次方程的系數(shù)與常數(shù)、以及第二一元二次方程的系數(shù)與常數(shù)之后,即確定出了第一一元二次方程與第二一元二次方程的具體形式,總而確定了基于給定的三個(gè)點(diǎn)確定的拋物線。在后續(xù)基于該拋物線繪制時(shí),通過(guò)調(diào)整第一一元二次方程與第二一元二次方程中的參數(shù)的值,即可確定出該拋物線曲線軌跡中的各點(diǎn)的坐標(biāo),進(jìn)而可以基于這些點(diǎn)的坐標(biāo)實(shí)現(xiàn)基于該拋物線的繪制。
具體地,在一個(gè)示例中,將三個(gè)點(diǎn)的各橫坐標(biāo)均用一個(gè)一元二次方程表示之后,該拋物線可以用如下公式表示:
x=a0+a1*t+a2*t*t
y=b0+b1*t+b2*t*t
可見(jiàn),在上述公式中,x=a0+a1*t+a2*t*t為該拋物線的橫坐標(biāo)的第一一元二次方程,a0為該第一一元二次方程的常數(shù),a1、a2為該第一一元二次方程的系數(shù);而y=b0+b1*t+b2*t*t為該拋物線的縱坐標(biāo)的第二一元二次方程,b0為該第二一元二次方程的常數(shù),b1、b2為該第二一元二次方程的系數(shù)。確定出常數(shù)a0、b0以及系數(shù)a1、a2、b1、b2之后,即可確定該拋物線的具體形式。由于是一元二次方程,因此基于三個(gè)點(diǎn)的坐標(biāo)即可以確定。
基于上述示例中的方式生成的拋物線,參考圖2所示,有如下特性:任意三點(diǎn)p1、p2、p3確定的拋物線,當(dāng)點(diǎn)n取p1p2的中點(diǎn),m取n相對(duì)于p2的對(duì)稱點(diǎn)(即p2是mn的中點(diǎn)),得到三角形mp1mp2后,p1m、p3m分別為拋物線p1p2p3在p1、p3的切線,而且在點(diǎn)p2的切線與p1p3平行。類似的反過(guò)來(lái)的特性也成立,即,針對(duì)任意三角形mp1p3,取p1p3的中點(diǎn)n,再取nm的中點(diǎn)p2,連接p1p2p3生成的拋物線一定與mp1、mp3相切。
結(jié)合示例中的拋物線公式,結(jié)合圖3所示,一個(gè)具體的繪制曲線箭頭的過(guò)程可以是如下所述。
在接收到繪制箭頭指令時(shí),開(kāi)始采集繪制過(guò)程中的采樣點(diǎn)。該采樣點(diǎn)是可以是鼠標(biāo)移動(dòng)過(guò)程中的鼠標(biāo)點(diǎn)擊點(diǎn),也可以是觸摸屏設(shè)備的觸摸點(diǎn)。其中,該繪制箭頭指令可以采用任何可能的方式獲得,例如獲得的可能是用戶點(diǎn)擊界面上的繪制箭頭的控件時(shí)產(chǎn)生的該指令,獲得的也可能是終端用戶在指令輸入界面輸入的繪制箭頭的指令等,在其他實(shí)施例中,也可能采用其他的方式獲得該繪制箭頭指令。
在采集到繪制過(guò)程中的第一個(gè)采樣點(diǎn)a(為了表述簡(jiǎn)潔,下述說(shuō)明均用a表示),獲得a的位置坐標(biāo),設(shè)置a在拋物線方程中的未知參數(shù)的值,在本實(shí)施例的一個(gè)具體示例中,將a的未知參數(shù)的值設(shè)置為-1,即令t=-1,從而a的位置坐標(biāo)可以表示為(xa=a0-a1+a2,ya=b0-b1+b2)。
采集繪制過(guò)程中第二個(gè)采樣點(diǎn)b(為了表述簡(jiǎn)潔,下述說(shuō)明均用b表示),獲得b的位置坐標(biāo),設(shè)置b在拋物線方程中的未知參數(shù)的值,在本實(shí)施例的一個(gè)具體示例中,將b的未知參數(shù)的值設(shè)置為0,即令t=0,從而b的位置坐標(biāo)可以表示為(xb=a0,yb=b0)。為了進(jìn)一步提高用戶體驗(yàn),在采集到第二個(gè)采樣點(diǎn)b時(shí),可以基于點(diǎn)a和點(diǎn)b繪制一個(gè)直線箭頭或者其他形式的箭頭進(jìn)行顯示,本實(shí)施例中不對(duì)該基于點(diǎn)a和點(diǎn)b繪制箭頭的方式和繪制的箭頭的形式做限定。
采集繪制過(guò)程中第三個(gè)采樣點(diǎn)c(為了表述簡(jiǎn)潔,下述說(shuō)明均用c表示),獲得c的位置坐標(biāo),設(shè)置c在拋物線方程中的未知參數(shù)的值,在本實(shí)施例的一個(gè)具體示例中,將c的未知參數(shù)的值設(shè)置為1,即令t=1,從而c的位置坐標(biāo)可以表示為(xc=a0+a1+a2,yc=b0+b1+b2)。
由于xa、ya、xb、yb、xc、yc因此,可以確定出a0、a1、a2、b0、b1、b2的具體值,獲得基于a、b、c這三個(gè)點(diǎn)的拋物線方程,為便于與其他的拋物線區(qū)分,本發(fā)明各實(shí)施例中將其稱為第一初始拋物線,結(jié)合圖3所示,在該具體示例中,也可將其記為l1(abc)。
需要說(shuō)明的是,在上述示例中,是以每采集到一個(gè)采樣點(diǎn)即確定設(shè)置該采樣點(diǎn)的未知參數(shù)t的值,在其他實(shí)施例中,也可以是在采集到3個(gè)采樣點(diǎn)后,再依據(jù)這三個(gè)采樣點(diǎn)的采樣順序,設(shè)置這三個(gè)采樣點(diǎn)的位置參數(shù)t的值。
隨后,確定出以點(diǎn)a為中心點(diǎn)、且分立于第一初始拋物線l1(abc)兩側(cè)的第一單側(cè)分立a1、第一對(duì)側(cè)分立a2。一個(gè)具體示例中的方式可以是,先確定出過(guò)點(diǎn)a且與第一初始拋物線l1(abc)相切的第一切線l1-a,然后確定與第一切線l1-a垂直相交的第一垂直線,該第一垂直線可以過(guò)a點(diǎn),然后確定出第一垂直線上與點(diǎn)a相隔第一距離d1的點(diǎn)a1、a2。即,點(diǎn)a1、點(diǎn)a2是沿第一切線l1-a對(duì)稱的。
類似地,確定出以點(diǎn)b為中心點(diǎn)、且分立于第一初始拋物線l1(abc)兩側(cè)的第二單側(cè)分立點(diǎn)b1、第二對(duì)側(cè)分立點(diǎn)b2。一個(gè)具體示例中的方式可以是,先確定出過(guò)點(diǎn)b且與第一初始拋物線l1(abc)相切的第二切線l1-b,然后確定出與第二切線l1-b垂直相交的直線(可以過(guò)b點(diǎn))上與點(diǎn)b相隔第二距離d0的點(diǎn)b1、b2)。即,點(diǎn)b1、點(diǎn)b2是沿第一切線l1-b對(duì)稱的。其中,第二距離d0小于第一距離d1。
隨手,基于一定的規(guī)則,確定出以點(diǎn)c為中心點(diǎn)、且分立于第一初始拋物線l1(abc)兩側(cè)的第三單側(cè)分立點(diǎn)c1、第三對(duì)側(cè)分立點(diǎn)c2。
在本實(shí)施例的一個(gè)具體實(shí)現(xiàn)方式中,可以采用下述方式進(jìn)行:
根據(jù)設(shè)定箭頭端形狀及大小,確定出以c為中心點(diǎn)的位于第一初始拋物線l1(abc)兩側(cè)的箭頭端外側(cè)第一端點(diǎn)c3、箭頭端外側(cè)第二端點(diǎn)c4;
根據(jù)設(shè)定箭頭端形狀及大小,結(jié)合c3、c4,確定出以c為中心點(diǎn)的位于第一初始拋物線l1(abc)兩側(cè)的箭頭端內(nèi)側(cè)第一端點(diǎn)c1、箭頭端內(nèi)側(cè)第二端點(diǎn)c2??梢?jiàn),該箭頭端內(nèi)側(cè)第一端點(diǎn)c1即為第三單側(cè)分立點(diǎn)c1,箭頭端內(nèi)側(cè)第二端點(diǎn)c2即為第三對(duì)側(cè)分立點(diǎn)c2。
結(jié)合圖3可見(jiàn),點(diǎn)a1、b1、c1位于第一拋物線l1(abc)的同一側(cè),點(diǎn)a2、b2、c2位于第一拋物線l1(abc)的另一側(cè)。隨后,以a1為第1個(gè)點(diǎn),b1為第2個(gè)點(diǎn),c1為第3個(gè)點(diǎn),采用與上述確定第一拋物線l1(abc)同樣的方式,基于點(diǎn)a1、b1、c1確定出一個(gè)拋物線,為便于與其他的拋物線區(qū)分,本發(fā)明各實(shí)施例中將其稱為第一拋物線。類似地,以a2為第1個(gè)點(diǎn),b2為第2個(gè)點(diǎn),c2為第3個(gè)點(diǎn),可以基于點(diǎn)a2、b2、c2確定出一個(gè)拋物線,稱之為第二拋物線。
隨后,基于第一拋物線依次連接a1、b1、c1,然后用直線依次連接c1與c3、c3與c、c與c4、c4與c2,即點(diǎn)c與c3、c4之間,c3與c1之間、c4與c2之間是直線連接,并用第二拋物線依次連接a2、b2、c2,從而繪制出一個(gè)箭頭。繪制獲得的箭頭如圖3所示。由圖3可見(jiàn),繪制獲得的箭頭具有較好的平滑性。
在上述實(shí)施例的基于3個(gè)采樣點(diǎn)繪制了箭頭的基礎(chǔ)上,還可以進(jìn)一步繪制出雙向箭頭,以下結(jié)合示例進(jìn)行說(shuō)明。
處于繪制的需要,有可能需要繪制具有連續(xù)性的多箭頭端的聯(lián)合箭頭,因此,在上述采集到了第3個(gè)采樣點(diǎn)并繪制了箭頭進(jìn)行顯示后,還可以進(jìn)一步采集后續(xù)的更多采樣點(diǎn)。
在上述圖1所示實(shí)施例之后,還可以進(jìn)一步采集繪制中的第四個(gè)采樣點(diǎn),在本發(fā)明各實(shí)施例中記為點(diǎn)d。此時(shí),可以不用進(jìn)行新的繪制,但是可以將d的位置坐標(biāo)進(jìn)行存儲(chǔ)。
隨后進(jìn)一步采集繪制過(guò)程中的第五個(gè)采樣點(diǎn),在本發(fā)明各實(shí)施例中記為點(diǎn)e。在該實(shí)施例中,在采集到第五個(gè)采樣點(diǎn)時(shí),也可以不用進(jìn)行新的繪制,只將e的位置坐標(biāo)進(jìn)行存儲(chǔ),留待采集到第五個(gè)采樣點(diǎn)時(shí),再確定出具有兩個(gè)箭頭端的聯(lián)合箭頭。另一方面,在采集到第五個(gè)采樣點(diǎn)e時(shí),也可以實(shí)現(xiàn)中間態(tài)的聯(lián)合箭頭的繪制,以提升繪制過(guò)程中的用戶體驗(yàn)。
以下結(jié)合其中一個(gè)采集到點(diǎn)e之后進(jìn)行中間態(tài)的聯(lián)合箭頭的繪制進(jìn)行舉例說(shuō)明,在其他實(shí)施例中,也可以采用其他的方式實(shí)現(xiàn)采集到點(diǎn)e之后的中間態(tài)的聯(lián)合箭頭的繪制。
在采集到點(diǎn)e之后,首先確定點(diǎn)a2、b2中與e較近的點(diǎn),結(jié)合圖4所示,第二對(duì)側(cè)分立點(diǎn)b2與e更近,因此,下述示例中是以b2為例進(jìn)行說(shuō)明??梢岳斫獾氖?,在實(shí)際繪制過(guò)程中,如果點(diǎn)e是在靠近a2的那一側(cè),則a2與點(diǎn)e更近,通過(guò)對(duì)名稱互換后,本質(zhì)上的處理方式與點(diǎn)b2更近時(shí)的處理方式相同。
隨后,確定出通過(guò)第二對(duì)側(cè)分立點(diǎn)b2且與有a2、b2、c2確定第二拋物線相切的第三切線;確定出第三切線上、與第二對(duì)側(cè)分立點(diǎn)b2的距離為第一切線距離,且靠近第一對(duì)側(cè)分立點(diǎn)a2的第一切線交匯點(diǎn)i0-1。進(jìn)一步地,第一切線距離可以結(jié)合實(shí)際需要進(jìn)行設(shè)置,在一個(gè)示例中,該第一切線距離可以為第一對(duì)側(cè)分立點(diǎn)至第三對(duì)側(cè)分立點(diǎn)的距離的四分之一,即a2c2/4。
然后,確定通過(guò)第四個(gè)采樣點(diǎn)d、第五個(gè)采樣點(diǎn)e的直線(本實(shí)施例中稱為中間態(tài)直線),并確定以第四個(gè)采樣點(diǎn)d為中心點(diǎn),位于中間態(tài)直線遠(yuǎn)離第二對(duì)側(cè)分立點(diǎn)b2的一側(cè)的第四中間態(tài)對(duì)側(cè)分立點(diǎn)d0;確定以第五個(gè)采樣點(diǎn)e為中心點(diǎn),位于中間態(tài)直線靠近第二對(duì)側(cè)分立點(diǎn)b2的一側(cè)的第五中間態(tài)單側(cè)分立點(diǎn)e0-1、位于中間態(tài)直線遠(yuǎn)離第二對(duì)側(cè)分立點(diǎn)b2的一側(cè)的第五中間態(tài)對(duì)側(cè)分立點(diǎn)e0-2。
確定通過(guò)第五中間態(tài)單側(cè)分立點(diǎn)e1且與中間態(tài)直線平行的中間態(tài)單側(cè)直線;確定出中間態(tài)單側(cè)直線上、與第五中間態(tài)單側(cè)分立點(diǎn)e1的距離為第二切線距離,且靠近第四個(gè)采樣點(diǎn)d的中間態(tài)切線交匯點(diǎn)i0-3,并將第一切換交匯點(diǎn)i0-1與中間態(tài)切線交匯點(diǎn)i0-3直線連接時(shí)的中點(diǎn)作為中間態(tài)中點(diǎn)i0-2。該第二切線距離可以結(jié)合實(shí)際需要進(jìn)行設(shè)置。
確定出通過(guò)第二對(duì)側(cè)分立點(diǎn)b2與中間態(tài)中點(diǎn)i0-2的第一中間態(tài)拋物線,其中,通過(guò)了第一切換交匯點(diǎn)i0-1與第二對(duì)側(cè)分立點(diǎn)b2的直線為該第一中間態(tài)拋物線的在第二對(duì)側(cè)分立點(diǎn)b2處的切線,通過(guò)了第一切換交匯點(diǎn)i0-1與中間態(tài)中點(diǎn)i0-2的直線為該第一中間態(tài)拋物線的在中間態(tài)中點(diǎn)i0-2的切線。
確定出通過(guò)第五中間態(tài)單側(cè)分立點(diǎn)e0-1與中間態(tài)中點(diǎn)i0-2的第二中間態(tài)拋物線,其中,通過(guò)了中間態(tài)中點(diǎn)i0-2與中間態(tài)切線交匯點(diǎn)i0-3的直線,為該第二中間態(tài)拋物線的在中間態(tài)中點(diǎn)i0-2的切線,通過(guò)了中間態(tài)切線交匯點(diǎn)i0-3與第五中間態(tài)單側(cè)分立點(diǎn)e0-1的直線,為該第二中間態(tài)拋物線的在第五中間態(tài)單側(cè)分立點(diǎn)e0-1的切線。
點(diǎn)e所處的箭頭端的第五中間態(tài)單側(cè)分立點(diǎn)e0-1、第五中間態(tài)對(duì)側(cè)分立點(diǎn)e0-2的確定方式,可以與上述確定c1、c2的方式相同,可以在結(jié)合設(shè)定箭頭端形狀與大小確定箭頭端外側(cè)端點(diǎn)e3、e4后,再確定出e0-1、e0-2。
根據(jù)第一拋物線依次連接a1、b1、c1,然后用直線依次連接c1與c3、c3與c、c與c4、c4與c2,用第二拋物線依次連接c2、b2,用第一中間態(tài)拋物線連接b2與i0-2,用第二中間態(tài)拋物線連接i0-2與e0-1,然后用直線依次連接e0-1與e3、e3與e、e與e4、e4與e0-2、e0-1與d0,獲得繪制的箭頭,繪制的箭頭如圖4所示。結(jié)合圖4可見(jiàn),此時(shí)a2與b2之間、b2與i0-2、i0-2與i0-3之間是不繪制和顯示的。
進(jìn)一步地,結(jié)合圖5所示,在采集到第6個(gè)采樣點(diǎn)f之后,一個(gè)具體示例中可以采用下述方式進(jìn)行。
首先,確定通過(guò)第四個(gè)采樣點(diǎn)d、第五個(gè)采樣點(diǎn)e以及第六個(gè)采樣點(diǎn)f的第二初始拋物線。
然后,確定以第四個(gè)采樣點(diǎn)d為中心點(diǎn)的位于第二初始拋物線靠近第二對(duì)側(cè)分立點(diǎn)一側(cè)的第四單側(cè)分立點(diǎn)(假設(shè)記為d1,圖中未示出)、位于第二初始拋物線遠(yuǎn)離第二對(duì)側(cè)分立點(diǎn)b2一側(cè)的第四對(duì)側(cè)分立點(diǎn)d2。
確定以第五個(gè)采樣點(diǎn)e為中心點(diǎn)的位于第二初始拋物線靠近第二對(duì)側(cè)分立點(diǎn)b2一側(cè)的第五單側(cè)分立點(diǎn)e1、位于第二初始拋物線遠(yuǎn)離第二對(duì)側(cè)分立點(diǎn)b2一側(cè)的第五對(duì)側(cè)分立點(diǎn)e2。
確定以第六個(gè)采樣點(diǎn)f為中心點(diǎn)的位于第二初始拋物線靠近第二對(duì)側(cè)分立點(diǎn)b2一側(cè)的第六單側(cè)分立點(diǎn)f1、位于第二初始拋物線遠(yuǎn)離第二對(duì)側(cè)分立點(diǎn)b2一側(cè)的第六對(duì)側(cè)分立點(diǎn)f2。
確定d2、e1、e2、f1、f2的方式可以與上述圖1所示的示例中確定a2、b1、b2、c1、c2同樣的方式進(jìn)行。點(diǎn)f所處的箭頭端的第六單側(cè)分立點(diǎn)f1、第六對(duì)側(cè)分立點(diǎn)f2的確定方式,可以與上述確定c1、c2的方式相同,可以在結(jié)合設(shè)定箭頭端形狀與大小確定箭頭端外側(cè)端點(diǎn)f3、f4后,再確定出f1、f2。
然后,采用上述確定拋物線的方式,確定出通過(guò)第四單側(cè)分立點(diǎn)d1、第五單側(cè)分立點(diǎn)e1、第六單側(cè)分立點(diǎn)f1的第三拋物線,及通過(guò)第四對(duì)側(cè)分立點(diǎn)d2、第五對(duì)側(cè)分立點(diǎn)e2、第六對(duì)側(cè)分立點(diǎn)f2的第四拋物線。
確定通過(guò)第二對(duì)側(cè)分立點(diǎn)b2且與第二拋物線相切的第三切線;確定出第三切線上、與第二對(duì)側(cè)分立點(diǎn)b2的距離為第一切線距離,且靠近第一對(duì)側(cè)分立點(diǎn)a1的第一切線交匯點(diǎn)i1。該第一切線距離可以為第一對(duì)側(cè)分立點(diǎn)至第三對(duì)側(cè)分立點(diǎn)的距離的四分之一,即a2c2/4。
確定通過(guò)第五單側(cè)分立點(diǎn)e1且與第三拋物線相切的第四切線;確定出第四切線上、與第五單側(cè)分立點(diǎn)e1的距離為第三切線距離,且靠近第四單側(cè)分立點(diǎn)d1的第二切線交匯點(diǎn)i3。該第三切線距離可以為第四單側(cè)分立點(diǎn)至第六單側(cè)分立點(diǎn)的距離的四分之一,即d1f1/4。
確定第一切換交匯點(diǎn)i1與第二切換交匯點(diǎn)i3直線連接時(shí)的中點(diǎn)i2。
確定通過(guò)第二對(duì)側(cè)分立點(diǎn)b2與中點(diǎn)i2的第五拋物線,其中,通過(guò)了第二對(duì)側(cè)分立點(diǎn)b2與第一切換交匯點(diǎn)i1的直線為通過(guò)第二對(duì)側(cè)分立點(diǎn)b2的切線,通過(guò)了第一切換交匯點(diǎn)i1與中點(diǎn)i2的直線為通過(guò)中點(diǎn)i2的切線。
確定通過(guò)中點(diǎn)i2與第五單側(cè)分立點(diǎn)e1的第六拋物線,其中,通過(guò)了中點(diǎn)i2與第二切換交匯點(diǎn)i3的直線為通過(guò)中點(diǎn)i2的切線,通過(guò)了第二切換交匯點(diǎn)i3與第五單側(cè)分立點(diǎn)e1的直線為通過(guò)第五單側(cè)分立點(diǎn)e1的切線。
根據(jù)第一拋物線依次連接a1、b1、c1,然后用直線依次連接c1與c3、c3與c、c與c4、c4與c2,用第二拋物線依次連接c2、b2,根據(jù)第五拋物線連接b2與i2,根據(jù)第六拋物線連接i2與e1,根據(jù)第三拋物線連接e1與f1,用直線依次連接f1與f3、f3與f、f與f4、f4與f2,根據(jù)第四拋物線依次連接第六對(duì)側(cè)分立點(diǎn)f2、第五對(duì)側(cè)分立點(diǎn)e2、第四對(duì)側(cè)分立點(diǎn)d2,獲得繪制的箭頭,繪制的箭頭如圖5所示。結(jié)合圖4可見(jiàn),此時(shí)a2與b2之間、b2與i1、i1與i2之間、i2與i3、i3與e1之間是不繪制和顯示的。
需要理解的是,上述各實(shí)施例中的確定各拋物線、各點(diǎn)等的過(guò)程,無(wú)需按照上文中的文字順序以此執(zhí)行,只要在具體繪制之前能夠確定出這些拋物線和點(diǎn)即可。
可以理解的是,上述示例中是以6個(gè)采樣點(diǎn)、繪制了兩個(gè)箭頭端的聯(lián)合箭頭為例進(jìn)行說(shuō)明,在采樣了更多的采樣點(diǎn)時(shí),可以采用與上述類似的方式進(jìn)行處理,例如在采樣了第7、8、9個(gè)采樣點(diǎn)時(shí),針對(duì)這第7、8、9個(gè)采樣點(diǎn)的處理方式,類似于將4、5、6個(gè)點(diǎn)d、e、f視為第1、2、3個(gè)點(diǎn)a、b、c時(shí)的針對(duì)第4、5、6個(gè)點(diǎn)d、e、f的處理方式,更多的采樣點(diǎn)可以以此類推。
本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以通過(guò)計(jì)算機(jī)程序來(lái)指令相關(guān)的硬件來(lái)完成,所述的程序可存儲(chǔ)于一非易失性的計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,如本發(fā)明實(shí)施例中,該程序可存儲(chǔ)于計(jì)算機(jī)系統(tǒng)的存儲(chǔ)介質(zhì)中,并被該計(jì)算機(jī)系統(tǒng)中的至少一個(gè)處理器執(zhí)行,以實(shí)現(xiàn)包括如上述各方法的實(shí)施例的流程。其中,所述的存儲(chǔ)介質(zhì)可為磁碟、光盤、只讀存儲(chǔ)記憶體(read-onlymemory,rom)或隨機(jī)存儲(chǔ)記憶體(randomaccessmemory,ram)等。
據(jù)此,在一個(gè)實(shí)施例中,還提供一種存儲(chǔ)介質(zhì),其上存儲(chǔ)有計(jì)算機(jī)程序,當(dāng)該程序被處理器執(zhí)行時(shí),實(shí)現(xiàn)如上所述任一示例的繪制箭頭的方法。
此外,在一個(gè)實(shí)施例中,還提供一種計(jì)算機(jī)設(shè)備,包括存儲(chǔ)器、處理器及存儲(chǔ)在存儲(chǔ)器上并可在處理器上運(yùn)行的計(jì)算機(jī)程序,所述處理器執(zhí)行所述程序時(shí),實(shí)現(xiàn)如上所述任一示例的繪制箭頭的方法。
以上所述實(shí)施例的各技術(shù)特征可以進(jìn)行任意的組合,為使描述簡(jiǎn)潔,未對(duì)上述實(shí)施例中的各個(gè)技術(shù)特征所有可能的組合都進(jìn)行描述,然而,只要這些技術(shù)特征的組合不存在矛盾,都應(yīng)當(dāng)認(rèn)為是本說(shuō)明書(shū)記載的范圍。
以上所述實(shí)施例僅表達(dá)了本發(fā)明的幾種實(shí)施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對(duì)發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對(duì)于本領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。