本發(fā)明涉及計算機科學技術領域,特別涉及一種文字沿橢圓圓弧均分的電子排版方法及裝置。
背景技術:
目前,在計算機科學技術領域,對文字沿某個圖形的均分排版方法比較有限,主要是以沿著圓弧或者方形樣式排版,而以橢圓形勢排版較少見,主要愿意在于:第一,文字沿橢圓均分存在難處,如果按角度均分,則文字之間的間距將會不一致;第二,文字位置安排妥當之后,每個文字在其切點位置相對于所切圓的圓心有一個旋轉角度,而每個文字的旋轉角度不盡相同。上述兩個難點的存在,導致在計算機領域,很少甚至很難見到以用文字沿橢圓排版方式實現(xiàn)的一項技術活動。
技術實現(xiàn)要素:
本發(fā)明的目的在于提供一種文字沿橢圓圓弧均分的電子排版方法及裝置,解決了現(xiàn)有技術中以編程方式實現(xiàn)難以實現(xiàn)文字沿橢圓圓弧均分排版的問題。
根據(jù)本發(fā)明的一個方面,提供了一種文字沿橢圓圓弧均分的電子排版方法,包括排版模塊在橢圓圖形中進行電子排版的以下步驟:
在接收到待排版電子文字后,在所述橢圓圖形中建立用于所述電子文字橢圓排版的參考內(nèi)橢圓,所述橢圓圖形的圓心為所述參考內(nèi)橢圓的圓心;
根據(jù)待排版電子文字的字長,確定所述待排版電子文字在所述橢圓圖形坐標系中的起始角度和終止角度,并將其作為所述參考內(nèi)橢圓的起始角度和終止角度;
從所述參考內(nèi)橢圓的起始角度開始,計算每遞減一預定角度單位的角度所對應的弧長,由此生成參考內(nèi)橢圓的弧長與其對應的角度的弧長角度關系列表,其中所述參考內(nèi)橢圓的起始角度對應的弧長為零;
按照所述參考內(nèi)橢圓的起始角度到終止角度所對應的總弧長,確定每個待排版電子文字中心所對應的弧長;
利用所確定每個待排版電子文字中心所對應的弧長和所述弧長角度關系列表,確定每個待排版電子文字在所述橢圓坐標系中的坐標,并根據(jù)所確定的坐標,對每個待排版電子文字進行電子排版。
優(yōu)選地,所述根據(jù)待排版電子文字的字長,確定所述待排版電子文字在所述橢圓圖形坐標系中的起始角度和終止角度包括;
根據(jù)待排版電子文字的字長,確定待排版電子文字在所述橢圓圖形中排布的角度范圍;
根據(jù)所述角度范圍,確定所述待排版電子文字在所述橢圓圖形坐標系中的起始角度和終止角度,并將其作為所述參考內(nèi)橢圓的起始角度和終止角度。
優(yōu)選地,所述按照所述參考內(nèi)橢圓的起始角度到終止角度所對應的總弧長,確定每個待排版電子文字中心所對應的弧長包括:
按照所述參考內(nèi)橢圓的起始角度到終止角度所對應的總弧長和待排版電子文字的字長,得到每個待排版電子文字的均分弧長范圍;
根據(jù)所得到的每個待排版電子文字的均分弧長范圍,確定每個待排版電子文字中心所對應的弧長。
優(yōu)選地,所述利用所確定每個待排版電子文字中心所對應的弧長和所述弧長角度關系列表,確定每個待排版電子文字在所述橢圓坐標系中的坐標包括:
根據(jù)所確定每個待排版電子文字中心所對應的弧長,從所述弧長角度關系列表中得到每個待排版電子文字的角度;
根據(jù)所得到的每個待排版電子文字的角度,計算每個待排版電子文字與參考內(nèi)橢圓相切的切點坐標,并將其作為每個待排版電子文字在所述橢圓坐標系中的坐標。
優(yōu)選地,根據(jù)每個待排版電子文字與參考內(nèi)橢圓相切的切點坐標,對每個待排版電子文字進行電子排版包括:
根據(jù)每個待排版電子文字與參考內(nèi)橢圓相切的切點坐標,計算所述每個切點在參考內(nèi)橢圓的切線斜率;
根據(jù)所計算的切線斜率,得到每個待排版電子文字的旋轉角度;
以每個待排版電子文字基線左下角點為旋轉中心,利用所得到的旋轉角度,對每個待排版電子文字進行電子排版。
優(yōu)選地,所述根據(jù)所計算的切線斜率,得到每個待排版電子文字的旋轉角度包括:
根據(jù)所計算的每個切點在參考內(nèi)橢圓的切線斜率,計算每個切點在參考內(nèi)橢圓的切線傾角;
根據(jù)待排版的電子文字在橢圓圖形坐標系中的象限和所述切線傾角大小,確定每個待排版電子文字的旋轉角度為所述切線傾角或所述切線傾角的補角。
優(yōu)選地,還包括:
在通過對每個待排版電子文字進行電子排版,得到沿橢圓圓弧均分排版的文字后,刪除在所述橢圓圖形中建立的參考內(nèi)橢圓。
根據(jù)本發(fā)明的另一方面,提供了一種文字沿橢圓圓弧均分的電子排版裝置,包括:
建立參考內(nèi)橢圓模塊,用于在接收到待排版電子文字后,在所述橢圓圖形中建立用于所述電子文字橢圓排版的參考內(nèi)橢圓,所述橢圓圖形的圓心為所述參考內(nèi)橢圓的圓心;
確定排版角度模塊,用于根據(jù)待排版電子文字的字長,確定所述待排版電子文字在所述橢圓圖形坐標系中的起始角度和終止角度,并將其作為所述參考內(nèi)橢圓的起始角度和終止角度;
生成弧長角度關系列表模塊,用于從所述參考內(nèi)橢圓的起始角度開始,計算每遞減一預定角度單位的角度所對應的弧長,由此生成參考內(nèi)橢圓的弧長與其對應的角度的弧長角度關系列表,其中所述參考內(nèi)橢圓的起始角度對應的弧長為零;
確定排版弧長模塊,用于按照所述參考內(nèi)橢圓的起始角度到終止角度所對應的總弧長,確定每個待排版電子文字中心所對應的弧長;
電子排版模塊,用于利用所確定每個待排版電子文字中心所對應的弧長和所述弧長角度關系列表,確定每個待排版電子文字在所述橢圓坐標系中的坐標,并根據(jù)所確定的坐標,對每個待排版電子文字進行電子排版。
優(yōu)選地,所述確定排版角度模塊包括;
確定排版角度單元,用于根據(jù)待排版電子文字的字長,確定待排版電子文字在所述橢圓圖形中排布的角度范圍,并根據(jù)所述角度范圍,確定所述待排版電子文字在所述橢圓圖形坐標系中的起始角度和終止角度,并將其作為所述參考內(nèi)橢圓的起始角度和終止角度。
優(yōu)選地,所述確定排版弧長模塊包括:
均分弧長單元,用于按照所述參考內(nèi)橢圓的起始角度到終止角度所對應的總弧長和待排版電子文字的字長,得到每個待排版電子文字的均分弧長范圍;
確定排版弧長單元,用于根據(jù)所得到的每個待排版電子文字的均分弧長范圍,確定每個待排版電子文字中心所對應的弧長。
與現(xiàn)有技術相比較,本發(fā)明的有益效果在于:
本發(fā)明以編程方式實現(xiàn)了文字沿橢圓圓弧的均分排版,給用戶帶來了極大的方便。
附圖說明
圖1是本發(fā)明實施例提供的一種文字沿橢圓圓弧均分的電子排版方法的流程圖;
圖2是本發(fā)明實施例提供的一種文字沿橢圓圓弧均分的電子排版裝置的示意圖;
圖3是本發(fā)明實施例提供的文字沿橢圓圓弧均分的電子排版方法的流程圖;
圖4是本發(fā)明實施例提供的文字沿橢圓圓弧均分的示意圖。
具體實施方式
以下結合附圖對本發(fā)明的優(yōu)選實施例進行詳細說明,應當理解,以下所說明的優(yōu)選實施例僅用于說明和解釋本發(fā)明,并不用于限定本發(fā)明。
圖1是是本發(fā)明實施例提供的一種文字沿橢圓圓弧均分的電子排版方法的流程圖,如圖1所示,包括排版模塊在橢圓圖形中進行電子排版的以下步驟:
步驟s101:在接收到待排版電子文字后,在所述橢圓圖形中建立用于所述電子文字橢圓排版的參考內(nèi)橢圓,所述橢圓圖形的圓心為所述參考內(nèi)橢圓的圓心;
步驟s102:根據(jù)待排版電子文字的字長,確定所述待排版電子文字在所述橢圓圖形坐標系中的起始角度和終止角度,并將其作為所述參考內(nèi)橢圓的起始角度和終止角度;
步驟s103:從所述參考內(nèi)橢圓的起始角度開始,計算每遞減一預定角度單位的角度所對應的弧長,由此生成參考內(nèi)橢圓的弧長與其對應的角度的弧長角度關系列表,其中所述參考內(nèi)橢圓的起始角度對應的弧長為零;
步驟s104:按照所述參考內(nèi)橢圓的起始角度到終止角度所對應的總弧長,確定每個待排版電子文字中心所對應的弧長;
步驟s105:利用所確定每個待排版電子文字中心所對應的弧長和所述弧長角度關系列表,確定每個待排版電子文字在所述橢圓坐標系中的坐標,并根據(jù)所確定的坐標,對每個待排版電子文字進行電子排版。
其中,所述根據(jù)待排版電子文字的字長,確定所述待排版電子文字在所述橢圓圖形坐標系中的起始角度和終止角度包括;根據(jù)待排版電子文字的字長,確定待排版電子文字在所述橢圓圖形中排布的角度范圍;根據(jù)所述角度范圍,確定所述待排版電子文字在所述橢圓圖形坐標系中的起始角度和終止角度,并將其作為所述參考內(nèi)橢圓的起始角度和終止角度。
其中,所述按照所述參考內(nèi)橢圓的起始角度到終止角度所對應的總弧長,確定每個待排版電子文字中心所對應的弧長包括:按照所述參考內(nèi)橢圓的起始角度到終止角度所對應的總弧長和待排版電子文字的字長,得到每個待排版電子文字的均分弧長范圍;根據(jù)所得到的每個待排版電子文字的均分弧長范圍,確定每個待排版電子文字中心所對應的弧長。
其中,所述利用所確定每個待排版電子文字中心所對應的弧長和所述弧長角度關系列表,確定每個待排版電子文字在所述橢圓坐標系中的坐標包括:根據(jù)所確定每個待排版電子文字中心所對應的弧長,從所述弧長角度關系列表中得到每個待排版電子文字的角度;根據(jù)所得到的每個待排版電子文字的角度,計算每個待排版電子文字與參考內(nèi)橢圓相切的切點坐標,并將其作為每個待排版電子文字在所述橢圓坐標系中的坐標。具體地說,根據(jù)每個待排版電子文字與參考內(nèi)橢圓相切的切點坐標,對每個待排版電子文字進行電子排版包括:根據(jù)每個待排版電子文字與參考內(nèi)橢圓相切的切點坐標,計算所述每個切點在參考內(nèi)橢圓的切線斜 率;根據(jù)所計算的切線斜率,得到每個待排版電子文字的旋轉角度;以每個待排版電子文字基線左下角點為旋轉中心,利用所得到的旋轉角度,對每個待排版電子文字進行電子排版。其中,所述根據(jù)所計算的切線斜率,得到每個待排版電子文字的旋轉角度包括:根據(jù)所計算的每個切點在參考內(nèi)橢圓的切線斜率,計算每個切點在參考內(nèi)橢圓的切線傾角;根據(jù)待排版的電子文字在橢圓圖形坐標系中的象限和所述切線傾角大小,確定每個待排版電子文字的旋轉角度為所述切線傾角或所述切線傾角的補角。
本發(fā)明還包括:在通過對每個待排版電子文字進行電子排版,得到沿橢圓圓弧均分排版的文字后,刪除在所述橢圓圖形中建立的參考內(nèi)橢圓。
圖2是本發(fā)明實施例提供的一種文字沿橢圓圓弧均分的電子排版裝置的示意圖,如圖2所示,包括:建立參考內(nèi)橢圓模塊201、確定排版角度模塊202、生成弧長角度關系列表模塊203、確定排版弧長模塊204以及電子排版模塊205。具體地說,所述建立參考內(nèi)橢圓模塊201,用于在接收到待排版電子文字后,在所述橢圓圖形中建立用于所述電子文字橢圓排版的參考內(nèi)橢圓,所述橢圓圖形的圓心為所述參考內(nèi)橢圓的圓心;所述確定排版角度模塊202,用于根據(jù)待排版電子文字的字長,確定所述待排版電子文字在所述橢圓圖形坐標系中的起始角度和終止角度,并將其作為所述參考內(nèi)橢圓的起始角度和終止角度;所述生成弧長角度關系列表模塊203,用于從所述參考內(nèi)橢圓的起始角度開始,計算每遞減一預定角度單位的角度所對應的弧長,由此生成參考內(nèi)橢圓的弧長與其對應的角度的弧長角度關系列表,其中所述參考內(nèi)橢圓的起始角度對應的弧長為零;所述確定排版弧長模塊204,用于按照所述參考內(nèi)橢圓的起始角度到終止角度所對應的總弧長,確定每個待排版電子文字中心所對應的弧長;所述電子排版模塊205,用于利用所確定每個待排版電子文字中心所對應的弧長和所述弧長角度關系列表,確定每個待排版電子文字在所述橢圓坐標系中的坐標,并根據(jù)所確定的坐標,對每個待排版電子文字進行電子排版。
其中,所述確定排版角度模塊202包括;確定排版角度單元,用于根據(jù)待排版電子文字的字長,確定待排版電子文字在所述橢圓圖形中排布的角度范圍,并根據(jù)所述角度范圍,確定所述待排版電子文字在所述橢圓圖形坐標系中的起始角度和終止角度,并將其作為所述參考內(nèi)橢圓的起始角度和終止角度。所述確定排 版弧長模塊204包括:均分弧長單元,用于按照所述參考內(nèi)橢圓的起始角度到終止角度所對應的總弧長和待排版電子文字的字長,得到每個待排版電子文字的均分弧長范圍;確定排版弧長單元,用于根據(jù)所得到的每個待排版電子文字的均分弧長范圍,確定每個待排版電子文字中心所對應的弧長。
圖3是本發(fā)明實施例提供的文字沿橢圓圓弧均分的電子排版方法的流程圖,如圖3所示,包括以下步驟:
步驟1:根據(jù)文字分布的總角度,求出文字在橢圓上的分布區(qū)間;
在接收到待排版電子文字“我愛中國”后,在所述橢圓圖形中建立用于所述電子文字橢圓排版的參考內(nèi)橢圓,所述橢圓圖形的圓心為所述參考內(nèi)橢圓的圓心在所述橢圓圖形中建立的參考內(nèi)橢圓,且橢圓圓形與參考內(nèi)橢圓長半軸的差值和橢圓圓形與參考內(nèi)橢圓短半軸的差值相等。假設橢圓長半軸m=200;短半軸n=150,這是文字順著軌跡排的那個橢圓;參考內(nèi)橢圓長半軸a=160;短半軸b=110,讓文字與這個參考內(nèi)橢圓相切;代碼中設置待排版電子文字“我愛中國”的字號為30,在橢圓中分布的總角度為120°。在java中的fontmetrics類定義了字體規(guī)格對象,電子文字的旋轉以及書寫都是以電子文字的基線為標準。
根據(jù)待排版電子文字“我愛中國”應該均分在橢圓圓弧上,以y軸為分界線,那么待排版電子文字應該均分在y軸左右兩側,故此,待排版電子文字的分布的范圍為從90°-120°/2=30°和90°+120°/2=150°,即[30°,150°];注:90°為在直接坐標系內(nèi)y軸正半軸。
步驟2:利用微積分的方法,以橢圓中心為坐標原點,計算出文字所跨的總弧度以及所跨弧的角度列表;
因為待排版電子文字從左往右排列,取0.5°為一個單位,利用微積分的方法求出弧長(因為取的角度很小,所以求該弧長可以近似用三角形的勾股定律,利用勾股定律的前提是得到相差0.5°角的兩個橢圓上的點),即從150°開始,每次遞減0.5°,求出0.5°角所對的弧長,一直遞減到30°,并相應的獲得一個角度列表數(shù)組angarr[num]與一個弧長列表數(shù)組arclenarr[num]的角度弧長關系表,其角度弧長關系表中兩個數(shù)組的大小為num=120/0.5=240。
其中,弧長從150°開始算起,150°的弧長為0,隨著角度的遞減,弧長開始增加,最后求出一個總的弧長totallenarr,所給示例的 totallenarr=277.59607552560rad;其中,橢圓隨著角度的遞減,所對應的橢圓圓弧的弧長不等。
步驟3:根據(jù)總弧長計算出每個字所跨的弧長,再根據(jù)循環(huán)遍歷的方法,求出每個字從x軸正半軸開始的弧長度,利用上一步求出的角度列表計算出每個字的角度;
由上一步取得的文字所分布的所有弧長的角度,以及待排版電子文字的字數(shù),可以取得每個電子文字分布的弧長:totallenarr/4=perlenarr;因為每個電子文字會分布在每段弧的中間位置,根據(jù)上一步求出的弧長列表,則第一個字的弧長為1/2*perlenarr,遍歷弧長相對的角度列表則它相對的角度為136.5°;以此類推,第二個字的弧長3/2*perlenarr,所對角度為107°,第三個字弧長5/2*perlenarr,角度72°;第四個字弧長7/2*perlenarr,所對角度為42.5°(根據(jù)弧長取角度會略有偏差,但不會造成太大影響)。
步驟4:在根據(jù)每個字的角度以及文字所要相切的橢圓的長半軸和短半軸,計算出每個切點的坐標;
根據(jù)橢圓方程:x2/a2+y2/b2=1,以及我們所知的角度α,可以求出任意一點的坐標:
y2=a2b2/[a2-b2(1-1/sin2α)],
x2=a2b2/[b2-a2(1-1/cos2α)],
其中,坐標x,y的正負值由所在的象限決定。
由步驟3得到每個電子文字的所對的角度,根據(jù)上面所提到的求橢圓上任意一點的坐標,可以求出每個字與參考內(nèi)橢圓相切的切點坐標,“我”[-93,89],“愛”[-32,107],“中”[34,107],“國”[96,87]。
步驟5:根據(jù)文字應該沿著切線的切點排布,可以計算出文字的旋轉中心;
因為待排版電子文字的基線中點與參考內(nèi)橢圓在切點相重合,并且電子文字平行于切線,又根據(jù)java中文字的旋轉點在字的基線的左下角,則只要求出文字基線左下角那個點就是旋轉中心。
步驟6:根據(jù)橢圓上某點的切線方程,可以求出切線的傾角,該角度與文字的旋轉角度有關;
根據(jù)數(shù)學表達式:x*x0/a2+y*y0/b2=1
其中,x0,y0代表我們所求文字的切點坐標,可以求出每個點的切線斜率k=-x0b2/y0a2,再根據(jù)這個斜率,可以換算出切線的傾角,從左往右“我愛中國”四個點的斜率分別用弧度表示為:
“我”α1:0.45875509070899506rad,
“愛”α2:0.1404247834611487rad,
“中”α3:-0.14907560155554536rad,
“國”α4:-0.48073996139852293rad。
因為fontmetrics定義了一個文字的所占空間的長寬,根據(jù)文字所占空間下邊緣的長以及切線的傾角,可以求出每個待排版電子文字的旋轉中心。
p.x=point.x+width/2*math.cos(α);
p.y=point.y+width/2*math.sin(α);
其中,point指切點,width指文字所占空間下邊緣的長。
這個傾角與文字旋轉角度的關系就是步驟5中所談及的,因為電子文字基線與切線平行,所以當這個角度為銳角且文字在第二象限,則電子文字的旋轉角度就是這個角度,當這個角度為鈍角且文字在第一象限,則電子文字的旋轉角度就是這個角度的補角。
步驟7:利用java自帶的圖形變換類對每個電子文字進行旋轉,最后把每個電子文字的坐標轉換到目標坐標系并書寫出來。
在利用java類來把字書寫到畫布上之前,所有操作都是在數(shù)學坐標系下,即以橢圓中心為原點,長半軸為x軸和短半軸為y軸下進行的,但是java中默認一個畫布的左上角為原點,縱坐標向下為y軸正方向,x軸向右為x軸正方向。如圖4所示,把每個電子文字的坐標轉換到目標坐標系并書寫出來,最終在橢圓圓弧中“我愛中國”實現(xiàn)均分的電子排版。
綜上所述,本發(fā)明具有以下技術效果:
本發(fā)明以編程方式實現(xiàn)了文字沿橢圓圓弧的均分排版,給用戶帶來了極大的方便。
盡管上文對本發(fā)明進行了詳細說明,但是本發(fā)明不限于此,本技術領域技術人員可以根據(jù)本發(fā)明的原理進行各種修改。因此,凡按照本發(fā)明原理所作的修改,都應當理解為落入本發(fā)明的保護范圍。