韓明君,劉壯飛,周曉玲
(河南理工大學(xué) 化學(xué)化工學(xué)院,河南 焦作 454000)
根據(jù)物料浮沉試驗(yàn)結(jié)果繪制的可選性曲線[1],主要用于反映該物料所有密度級或任一密度的質(zhì)量分布情況。在選煤行業(yè),該組曲線包括灰分特征曲線(λ)、浮物曲線(β)、沉物曲線(θ)、密度曲線(δ)、分選密度±0.1曲線(ε)。在選煤設(shè)計(jì)方面可選性曲線應(yīng)用廣泛且設(shè)計(jì)對其要求較高。手工繪制可選性曲線的方法雖然最為準(zhǔn)確,但是受人為因素影響大,而且繪制速度慢[2]。目前常用的繪制方法由Excel法、AutoCAD法、Origin7.5法、Origin 8.0法、MATLAB法、PowerPoint法、貝茲函數(shù)(Bezier)法等一種或幾種方法復(fù)合而成。但繪制這些曲線前,均需要對原始數(shù)據(jù)進(jìn)行計(jì)算整理,再插入相應(yīng)圖表方可進(jìn)行可選性曲線的繪制。由于數(shù)據(jù)處理工作量大,耗費(fèi)時間,所以曲線繪制更加繁瑣,對選煤技術(shù)人員造成了很大困擾。以Auto CAD繪制為例,程云霄[3]經(jīng)調(diào)用VBA編輯器,繪制坐標(biāo)軸,在既定源程序下實(shí)現(xiàn)了對可選性曲線的繪制。但由于該程序所繪制的曲線是多線段,還需使用“pedit”命令等一系列操作擬合成光滑平整的曲線。為求更加精準(zhǔn)計(jì)算浮沉實(shí)驗(yàn)數(shù)據(jù),高效繪制可選性曲線,亟待尋求一種新的繪制方法。
貝塞爾曲線是常用數(shù)學(xué)曲線的一種,繪制過程的關(guān)鍵是曲線上的控制點(diǎn)[4]。通過調(diào)整控制點(diǎn),可使曲線的形狀朝著既定坐標(biāo)關(guān)系的方向繪制,這將支撐可選性曲線的擬合和繪制過程。再結(jié)合該函數(shù)的逼近功能,對整體數(shù)據(jù)點(diǎn)進(jìn)行插值擬合,可得到光滑的曲線[5]。具體實(shí)現(xiàn)步驟是:把曲線上的四個點(diǎn)P0(X0,Y0),P1(X1,Y1),P2(X2,Y2),P3(X3,Y3)在直角坐標(biāo)系中表示,當(dāng)P0、P2連線的斜率等于P1點(diǎn)切線的斜率時,即可保證曲線線形光滑自然。首先計(jì)算P1、P3連線的斜率k=(Y3-Y1)/(X3-X1),然后將P2代入直線方程得b=Y2-kX2,即可將該點(diǎn)左右兩個控制點(diǎn)計(jì)算出來;第一個點(diǎn)和最后一個點(diǎn)將斜率k作為0處理,只計(jì)算左側(cè)或者右側(cè)控制點(diǎn),依此方法可算得所用待測點(diǎn)兩側(cè)的控制點(diǎn)。
基于貝塞爾曲線,首先確定了一種繪制四坐標(biāo)軸的光滑曲線控件Wash View,并在此基礎(chǔ)上開發(fā)了一款快速計(jì)算浮沉實(shí)驗(yàn)數(shù)據(jù)及精準(zhǔn)繪制可選性曲線的Android軟件,命名為“Optional Curve”。 其功能包括:數(shù)據(jù)自動計(jì)算、繪制可選性曲線、數(shù)據(jù)存儲與修改。
可選性曲線的繪制過程無需過多計(jì)算、列舉、調(diào)試等操作,其主要工作已在后臺程序中有所體現(xiàn)?,F(xiàn)以某礦0.5~50 mm粒級原煤浮沉實(shí)驗(yàn)結(jié)果為例,介紹可選性曲線的繪制過程,試驗(yàn)數(shù)據(jù)見表1。
表1 0.5~50 mm粒級原煤浮沉實(shí)驗(yàn)結(jié)果
輸入界面上有灰分、產(chǎn)率、分選密度三個輸入框,當(dāng)用戶確定修改后,系統(tǒng)便將此三行原始數(shù)據(jù)存入本地。圖1是截取的用戶輸入界面。
圖1 用戶輸入界面示意
由于繪制λ、β、θ、ε、δ這5條曲線所需的數(shù)據(jù)計(jì)算公式已編入程序中,根據(jù)輸入的灰分、產(chǎn)率、密度三組數(shù)據(jù),計(jì)算得出繪制5條曲線所需的其余8列數(shù)據(jù),最后將計(jì)算所得數(shù)據(jù)和原始數(shù)據(jù)同時以自定義的格式存入本地。
繪圖區(qū)域圍成一個正方形,由4個坐標(biāo)軸組成,為了方便描述,將其依次命名為:軸1、軸2、軸3、軸4。其中,軸1:正方形的底部水平軸,由左向右:0->axis1_max;軸2:正方形的左側(cè)垂直軸,由頂向下:0->axis2_max;軸3:正方形的頂部水平軸,由左向右:axis3_max->axis3_min;軸4:正方形的右側(cè)垂直軸,由頂向下:axis4_max->0。(軸1為x軸,軸2為y軸,兩軸成1-2系;軸1為x軸,軸4為y軸,兩軸成1-4系;軸2為x軸,軸3為y軸,兩軸成2-3系。axis3_min:軸3的最小刻度,axis1_max:軸1的最大刻度,axis3_min:軸3的最小刻度。)
主界面中,首先以自定義格式加載本地?cái)?shù)據(jù),如果沒有數(shù)據(jù),則不繪制曲線,如果有本地?cái)?shù)據(jù)且符合規(guī)范,則按照格式讀取并開始繪制。繪制流程如下:繪制網(wǎng)格背景,繪制刻度,繪制周邊文字,繪制曲線與顏色的對應(yīng)關(guān)系,繪制曲線。
繪制曲線的過程可分解成三步:第一步,設(shè)定某一指定坐標(biāo)系下的坐標(biāo)為(x0,y0),并將其轉(zhuǎn)換為屏幕坐標(biāo)系下的坐標(biāo);第二步,將煤質(zhì)資料中繪制曲線的諸點(diǎn)自定義存放在一處;第三步,繪制二階貝塞爾曲線下的可選性曲線。各曲線繪制時依次重復(fù)步驟一、二、三。
將上述補(bǔ)全表格后的11組數(shù)據(jù)轉(zhuǎn)換成指定坐標(biāo)系下的坐標(biāo)時,首先對各個變量進(jìn)行“WOHT”和“MLOR”定義?!癢OHT”的全稱是“width Or Height Total”,即可繪制區(qū)域的寬度或高度相同,使得繪制區(qū)域呈現(xiàn)標(biāo)準(zhǔn)的正方形;“MLOR”的全稱是“Margin Left Or Right”,即可繪制區(qū)域的左側(cè)與屏幕左側(cè)的距離或者可繪制區(qū)域的右側(cè)與屏幕右側(cè)的距離相等,使得繪制區(qū)域處于屏幕中央。利用各坐標(biāo)軸及各曲線之間的固定關(guān)系計(jì)算該數(shù)據(jù)點(diǎn)(x0,y0)在原坐標(biāo)系下距離左側(cè)、上側(cè)的偏移量,最終將數(shù)據(jù)點(diǎn)轉(zhuǎn)化為屏幕上繪制的真實(shí)坐標(biāo)。三個坐標(biāo)系下的轉(zhuǎn)換算法如下:
轉(zhuǎn)化為1_2坐標(biāo)系下的真實(shí)坐標(biāo):
Float
targetX=widthOrHeightTotal*x/axis1_max+marginLeftOrRight;
float
targetY=widthOrHeightTotal*y/axis2_max+marginTopOrBottom;
轉(zhuǎn)化為1_3坐標(biāo)系下的真實(shí)坐標(biāo):
Float
targetX=widthOrHeightTotal*x/axis1_max+marginLeftOrRight;
float
targetY=widthOrHeightTotal*(axis4_max-y)/axis4_max+marginTopOrBottom;
轉(zhuǎn)化為2_3坐標(biāo)系下的真實(shí)坐標(biāo):
Float
targetX=widthOrHeightTotal*(1-(y-axis3_min)/(axis3_max-axis3_min))+marginLeftOrRigh;
float
targetY=widthOrHeightTotal*x/axis2_max+marginTopOrBottom;
針對某一Android 軟件,自定義一個View的前提是創(chuàng)建一個類繼承自定義View,并重新制定其on Draw ( )方法。“Optional Curve”軟件也是在自定義View的基礎(chǔ)上實(shí)現(xiàn)的,它的核心思想正是on Draw ( )方法。
@Override
protected void onDraw(Canvas canvas)
{super.onDraw(canvas);
Log.d(TAG,"onDraw:");
checkTransformPoints();
drawBackground(canvas);
drawText(canvas,textPaint);
drawReflectLine(canvas);
drawLine(canvas,pointList1_2,paint1_2);
drawLine(canvas,pointList1_4,paint1_4);
drawLine(canvas,pointList1_2_2,paint1_2_2);
drawLine(canvas,pointList2_3,paint2_3);
drawLine(canvas,pointList2_3_2,paint2_3_2);
drawPoint(canvas,pointList1_2,paint1_2);
drawPoint(canvas,pointList1_4,paint1_4);
drawPoint(canvas,pointList1_2_2,paint1_2_2);
drawPoint(canvas,pointList2_3,paint2_3);
drawPoint(canvas,pointList2_3_2,paint2_3_2);}
在此過程中,Check Transform Points ( )的作用是檢查數(shù)據(jù)點(diǎn)是否被轉(zhuǎn)換,若已轉(zhuǎn)換,即可直接繪制;Draw Back Ground ( )執(zhí)行繪制背景的命令,也即繪制可選性曲線的網(wǎng)格,根據(jù)自定義View的寬度、高度、格子數(shù)量、格子寬度等一系列屬性將格子繪制出來;Draw Text ( )根據(jù)屬性繪制格子邊緣的刻度文字;Draw Reflect Line ( )繪制曲線、文字的對應(yīng)關(guān)系;Draw Line繪制一條貝塞爾曲線,命令中的point list是用于繪制的數(shù)據(jù)集;Draw Point ( )繪制數(shù)據(jù)點(diǎn)時以數(shù)據(jù)點(diǎn)為中心畫圓,以突出點(diǎn)在曲線中的未知。
繪制每條曲線時所用到的數(shù)據(jù)點(diǎn)都使用一專有集合來保存,繪制時從該集合中取出所有數(shù)據(jù)點(diǎn),然后將數(shù)據(jù)點(diǎn)的坐標(biāo)轉(zhuǎn)化為指定坐標(biāo)系下的數(shù)據(jù)點(diǎn),使用貝塞爾曲線將數(shù)據(jù)點(diǎn)繪制成一條曲線,具體繪制流程如下:
(1)基元灰分曲線λ的繪制:使用1-2坐標(biāo)系,灰分為x軸,計(jì)算產(chǎn)率為Y軸,灰分與計(jì)算產(chǎn)量呈現(xiàn)一一對應(yīng)的關(guān)系;為求所繪曲線更加光滑精準(zhǔn),取相鄰密度級下的灰分與計(jì)算產(chǎn)率先形成該密度級下的一段灰分曲線;該灰分曲線所圍圖形近似于梯形,取梯形中線所在的斜邊中點(diǎn)作為該微小密度級灰分下的代表產(chǎn)率,將數(shù)據(jù)中的各微元延伸連接即得灰分特性曲線,表示浮物(或沉物)產(chǎn)率與其分界灰分的關(guān)系。
(2)密度曲線δ的繪制:使用2-3坐標(biāo)系,浮煤產(chǎn)率為x軸,密度為y軸。從上坐標(biāo)軸中各密度級向下引垂線,將計(jì)算所得浮物、沉物產(chǎn)率對應(yīng)于左右坐標(biāo)軸引平行線,水平線與垂直線相交點(diǎn)連成一條平滑曲線,即為密度曲線δ,表示某一既定密度和小于該密度的浮物累計(jì)產(chǎn)率之間的關(guān)系。
(3)浮物曲線β的繪制:使用1-2坐標(biāo)系,灰分為x軸,浮煤累計(jì)產(chǎn)率為y軸。按照H-R曲線繪制辦法,圖中所述浮物灰分和浮物產(chǎn)率為累計(jì)所得結(jié)果,計(jì)算時將各密度級灰分與產(chǎn)率加權(quán)平均得出,表現(xiàn)在繪制過程中即為各密度級下灰分實(shí)體的累計(jì),將灰分實(shí)體所在的平均灰分平滑連接即得浮物累計(jì)曲線β,表示小于某一既定密度的浮物平均灰分和小于該既定密度的浮物累計(jì)產(chǎn)率的關(guān)系。
(4)沉物曲線θ的繪制:使用1-4坐標(biāo)系,灰分為x軸,沉煤產(chǎn)率為y軸。沉物累計(jì)曲線與浮物累計(jì)曲線相對,均是將相應(yīng)的灰分與產(chǎn)率進(jìn)行累計(jì)后平滑連接在坐標(biāo)軸中。曲線上任一點(diǎn)是表示某一既定沉煤產(chǎn)率下的沉煤平均灰分或在某一既定沉煤灰分下的沉煤產(chǎn)率。
(5)分選密度曲線ε(δ±0.1)的繪制:使用2-3坐標(biāo)系,密度為x軸,浮煤產(chǎn)率為y軸。在浮物產(chǎn)率的縱坐標(biāo)軸上,據(jù)計(jì)算所得產(chǎn)率引平行于橫坐標(biāo)軸的平行線,再在上坐標(biāo)軸中據(jù)δ±0.1密度級向下引垂線,將平行線與垂直線的交點(diǎn)連接成一條平滑曲線,此曲線上任一點(diǎn)都表示在某一既定分選密度δ時,其臨近密度物的產(chǎn)率。
將λ、β、θ、ε、δ這五條曲線匯總在一起,將繪制過程中的各輔助線擦除,僅保留最終的繪制結(jié)果,支持繪制的5條曲線分別由不同的顏色代表,并設(shè)曲線標(biāo)注。這些曲線即組成了入選原煤0.5~50 mm粒級可選性曲線,如圖2所示。
圖2 入選原煤0.5~50 mm粒級可選性曲線
基于Wash View光滑曲線控件設(shè)計(jì)研發(fā)的Optional Curve軟件,具有數(shù)據(jù)自動計(jì)算、曲線線形平滑、數(shù)據(jù)存儲與修改方便和通用性好等特點(diǎn)。
(1)數(shù)據(jù)自動計(jì)算。與傳統(tǒng)計(jì)算可選性曲線煤質(zhì)資料的方法相比,本軟件只需輸入浮沉實(shí)驗(yàn)所測得的灰分、產(chǎn)率和浮沉密度三列數(shù)據(jù),省去了原煤數(shù)據(jù)經(jīng)Excel整理計(jì)算的過程[6],使得可選性曲線的繪制過程更加快捷。
(2)曲線線形平滑。傳統(tǒng)方法繪制的可選性曲線往往會出現(xiàn)線形走勢不理想、缺少平滑度、連接點(diǎn)處跳躍等問題[7],還需經(jīng)歷輸入數(shù)據(jù)、繪制單個曲線、擬合圖形、編輯修改等過程對曲線加以完善;而經(jīng)Optional Curve軟件繪制的可選性曲線,在繪制結(jié)束時便自動擦除了與曲線繪制無關(guān)的邊線,曲線理想科學(xué)且線形平滑。
(3)數(shù)據(jù)存儲與修改方便。用戶輸入數(shù)據(jù)后,該軟件將數(shù)據(jù)保存到本地文件中,下次打開軟件時數(shù)據(jù)依然會保留,在此基礎(chǔ)上修改數(shù)據(jù)后即可覆蓋更新,原有用戶界面曲線則重繪,可省去大量的重復(fù)性工作。
(4)通用性好。由于Optional Curve軟件安裝在安卓智能手機(jī)的終端,可實(shí)現(xiàn)自動生成可選性曲線的功能,對選煤工作者處理煤質(zhì)數(shù)據(jù)和擬定分選作業(yè)具有一定的參考價值,在推廣應(yīng)用時具有通用性好且兼容性強(qiáng)等特點(diǎn),很好地解決了現(xiàn)有軟件推廣困難的問題。
本Android軟件專為選煤廠和選礦廠等涉及到浮沉實(shí)驗(yàn)數(shù)據(jù)計(jì)算及可選性曲線繪制的場所設(shè)計(jì),曲線光滑準(zhǔn)確,極大程度的縮短了浮沉實(shí)驗(yàn)數(shù)據(jù)計(jì)算和曲線繪制的時間,提高了原煤可選性的分析效率,從而為選煤工作者提供了一種高效率繪制可選性曲線的路徑。該軟件的特點(diǎn)是靈活機(jī)制、操作簡便,避免了大數(shù)據(jù)的分析計(jì)算,有利于更好的解決數(shù)據(jù)處理和可選性曲線繪制問題,并且適用于任一款安卓智能手機(jī)的安裝使用,使得該軟件的應(yīng)用推廣更加便捷。