基于Wash View控件开发的可选性曲线绘制软件
2019-08-13韩明君刘壮飞周晓玲
韩明君,刘壮飞,周晓玲
(河南理工大学 化学化工学院,河南 焦作 454000)
根据物料浮沉试验结果绘制的可选性曲线[1],主要用于反映该物料所有密度级或任一密度的质量分布情况。在选煤行业,该组曲线包括灰分特征曲线(λ)、浮物曲线(β)、沉物曲线(θ)、密度曲线(δ)、分选密度±0.1曲线(ε)。在选煤设计方面可选性曲线应用广泛且设计对其要求较高。手工绘制可选性曲线的方法虽然最为准确,但是受人为因素影响大,而且绘制速度慢[2]。目前常用的绘制方法由Excel法、AutoCAD法、Origin7.5法、Origin 8.0法、MATLAB法、PowerPoint法、贝兹函数(Bezier)法等一种或几种方法复合而成。但绘制这些曲线前,均需要对原始数据进行计算整理,再插入相应图表方可进行可选性曲线的绘制。由于数据处理工作量大,耗费时间,所以曲线绘制更加繁琐,对选煤技术人员造成了很大困扰。以Auto CAD绘制为例,程云霄[3]经调用VBA编辑器,绘制坐标轴,在既定源程序下实现了对可选性曲线的绘制。但由于该程序所绘制的曲线是多线段,还需使用“pedit”命令等一系列操作拟合成光滑平整的曲线。为求更加精准计算浮沉实验数据,高效绘制可选性曲线,亟待寻求一种新的绘制方法。
1 设计原理
贝塞尔曲线是常用数学曲线的一种,绘制过程的关键是曲线上的控制点[4]。通过调整控制点,可使曲线的形状朝着既定坐标关系的方向绘制,这将支撑可选性曲线的拟合和绘制过程。再结合该函数的逼近功能,对整体数据点进行插值拟合,可得到光滑的曲线[5]。具体实现步骤是:把曲线上的四个点P0(X0,Y0),P1(X1,Y1),P2(X2,Y2),P3(X3,Y3)在直角坐标系中表示,当P0、P2连线的斜率等于P1点切线的斜率时,即可保证曲线线形光滑自然。首先计算P1、P3连线的斜率k=(Y3-Y1)/(X3-X1),然后将P2代入直线方程得b=Y2-kX2,即可将该点左右两个控制点计算出来;第一个点和最后一个点将斜率k作为0处理,只计算左侧或者右侧控制点,依此方法可算得所用待测点两侧的控制点。
基于贝塞尔曲线,首先确定了一种绘制四坐标轴的光滑曲线控件Wash View,并在此基础上开发了一款快速计算浮沉实验数据及精准绘制可选性曲线的Android软件,命名为“Optional Curve”。 其功能包括:数据自动计算、绘制可选性曲线、数据存储与修改。
2 绘制过程
可选性曲线的绘制过程无需过多计算、列举、调试等操作,其主要工作已在后台程序中有所体现。现以某矿0.5~50 mm粒级原煤浮沉实验结果为例,介绍可选性曲线的绘制过程,试验数据见表1。
表1 0.5~50 mm粒级原煤浮沉实验结果
2.1 用户输入数据
输入界面上有灰分、产率、分选密度三个输入框,当用户确定修改后,系统便将此三行原始数据存入本地。图1是截取的用户输入界面。
图1 用户输入界面示意
2.2 补全表格
由于绘制λ、β、θ、ε、δ这5条曲线所需的数据计算公式已编入程序中,根据输入的灰分、产率、密度三组数据,计算得出绘制5条曲线所需的其余8列数据,最后将计算所得数据和原始数据同时以自定义的格式存入本地。
2.3 绘制概览
绘图区域围成一个正方形,由4个坐标轴组成,为了方便描述,将其依次命名为:轴1、轴2、轴3、轴4。其中,轴1:正方形的底部水平轴,由左向右:0->axis1_max;轴2:正方形的左侧垂直轴,由顶向下:0->axis2_max;轴3:正方形的顶部水平轴,由左向右:axis3_max->axis3_min;轴4:正方形的右侧垂直轴,由顶向下: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的最小刻度。)
主界面中,首先以自定义格式加载本地数据,如果没有数据,则不绘制曲线,如果有本地数据且符合规范,则按照格式读取并开始绘制。绘制流程如下:绘制网格背景,绘制刻度,绘制周边文字,绘制曲线与颜色的对应关系,绘制曲线。
绘制曲线的过程可分解成三步:第一步,设定某一指定坐标系下的坐标为(x0,y0),并将其转换为屏幕坐标系下的坐标;第二步,将煤质资料中绘制曲线的诸点自定义存放在一处;第三步,绘制二阶贝塞尔曲线下的可选性曲线。各曲线绘制时依次重复步骤一、二、三。
2.4 坐标转换
将上述补全表格后的11组数据转换成指定坐标系下的坐标时,首先对各个变量进行“WOHT”和“MLOR”定义。“WOHT”的全称是“width Or Height Total”,即可绘制区域的宽度或高度相同,使得绘制区域呈现标准的正方形;“MLOR”的全称是“Margin Left Or Right”,即可绘制区域的左侧与屏幕左侧的距离或者可绘制区域的右侧与屏幕右侧的距离相等,使得绘制区域处于屏幕中央。利用各坐标轴及各曲线之间的固定关系计算该数据点(x0,y0)在原坐标系下距离左侧、上侧的偏移量,最终将数据点转化为屏幕上绘制的真实坐标。三个坐标系下的转换算法如下:
转化为1_2坐标系下的真实坐标:
Float
targetX=widthOrHeightTotal*x/axis1_max+marginLeftOrRight;
float
targetY=widthOrHeightTotal*y/axis2_max+marginTopOrBottom;
转化为1_3坐标系下的真实坐标:
Float
targetX=widthOrHeightTotal*x/axis1_max+marginLeftOrRight;
float
targetY=widthOrHeightTotal*(axis4_max-y)/axis4_max+marginTopOrBottom;
转化为2_3坐标系下的真实坐标:
Float
targetX=widthOrHeightTotal*(1-(y-axis3_min)/(axis3_max-axis3_min))+marginLeftOrRigh;
float
targetY=widthOrHeightTotal*x/axis2_max+marginTopOrBottom;
2.5 绘制曲线
针对某一Android 软件,自定义一个View的前提是创建一个类继承自定义View,并重新制定其on Draw ( )方法。“Optional Curve”软件也是在自定义View的基础上实现的,它的核心思想正是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 ( )的作用是检查数据点是否被转换,若已转换,即可直接绘制;Draw Back Ground ( )执行绘制背景的命令,也即绘制可选性曲线的网格,根据自定义View的宽度、高度、格子数量、格子宽度等一系列属性将格子绘制出来;Draw Text ( )根据属性绘制格子边缘的刻度文字;Draw Reflect Line ( )绘制曲线、文字的对应关系;Draw Line绘制一条贝塞尔曲线,命令中的point list是用于绘制的数据集;Draw Point ( )绘制数据点时以数据点为中心画圆,以突出点在曲线中的未知。
绘制每条曲线时所用到的数据点都使用一专有集合来保存,绘制时从该集合中取出所有数据点,然后将数据点的坐标转化为指定坐标系下的数据点,使用贝塞尔曲线将数据点绘制成一条曲线,具体绘制流程如下:
(1)基元灰分曲线λ的绘制:使用1-2坐标系,灰分为x轴,计算产率为Y轴,灰分与计算产量呈现一一对应的关系;为求所绘曲线更加光滑精准,取相邻密度级下的灰分与计算产率先形成该密度级下的一段灰分曲线;该灰分曲线所围图形近似于梯形,取梯形中线所在的斜边中点作为该微小密度级灰分下的代表产率,将数据中的各微元延伸连接即得灰分特性曲线,表示浮物(或沉物)产率与其分界灰分的关系。
(2)密度曲线δ的绘制:使用2-3坐标系,浮煤产率为x轴,密度为y轴。从上坐标轴中各密度级向下引垂线,将计算所得浮物、沉物产率对应于左右坐标轴引平行线,水平线与垂直线相交点连成一条平滑曲线,即为密度曲线δ,表示某一既定密度和小于该密度的浮物累计产率之间的关系。
(3)浮物曲线β的绘制:使用1-2坐标系,灰分为x轴,浮煤累计产率为y轴。按照H-R曲线绘制办法,图中所述浮物灰分和浮物产率为累计所得结果,计算时将各密度级灰分与产率加权平均得出,表现在绘制过程中即为各密度级下灰分实体的累计,将灰分实体所在的平均灰分平滑连接即得浮物累计曲线β,表示小于某一既定密度的浮物平均灰分和小于该既定密度的浮物累计产率的关系。
(4)沉物曲线θ的绘制:使用1-4坐标系,灰分为x轴,沉煤产率为y轴。沉物累计曲线与浮物累计曲线相对,均是将相应的灰分与产率进行累计后平滑连接在坐标轴中。曲线上任一点是表示某一既定沉煤产率下的沉煤平均灰分或在某一既定沉煤灰分下的沉煤产率。
(5)分选密度曲线ε(δ±0.1)的绘制:使用2-3坐标系,密度为x轴,浮煤产率为y轴。在浮物产率的纵坐标轴上,据计算所得产率引平行于横坐标轴的平行线,再在上坐标轴中据δ±0.1密度级向下引垂线,将平行线与垂直线的交点连接成一条平滑曲线,此曲线上任一点都表示在某一既定分选密度δ时,其临近密度物的产率。
将λ、β、θ、ε、δ这五条曲线汇总在一起,将绘制过程中的各辅助线擦除,仅保留最终的绘制结果,支持绘制的5条曲线分别由不同的颜色代表,并设曲线标注。这些曲线即组成了入选原煤0.5~50 mm粒级可选性曲线,如图2所示。
图2 入选原煤0.5~50 mm粒级可选性曲线
3 对比分析
基于Wash View光滑曲线控件设计研发的Optional Curve软件,具有数据自动计算、曲线线形平滑、数据存储与修改方便和通用性好等特点。
(1)数据自动计算。与传统计算可选性曲线煤质资料的方法相比,本软件只需输入浮沉实验所测得的灰分、产率和浮沉密度三列数据,省去了原煤数据经Excel整理计算的过程[6],使得可选性曲线的绘制过程更加快捷。
(2)曲线线形平滑。传统方法绘制的可选性曲线往往会出现线形走势不理想、缺少平滑度、连接点处跳跃等问题[7],还需经历输入数据、绘制单个曲线、拟合图形、编辑修改等过程对曲线加以完善;而经Optional Curve软件绘制的可选性曲线,在绘制结束时便自动擦除了与曲线绘制无关的边线,曲线理想科学且线形平滑。
(3)数据存储与修改方便。用户输入数据后,该软件将数据保存到本地文件中,下次打开软件时数据依然会保留,在此基础上修改数据后即可覆盖更新,原有用户界面曲线则重绘,可省去大量的重复性工作。
(4)通用性好。由于Optional Curve软件安装在安卓智能手机的终端,可实现自动生成可选性曲线的功能,对选煤工作者处理煤质数据和拟定分选作业具有一定的参考价值,在推广应用时具有通用性好且兼容性强等特点,很好地解决了现有软件推广困难的问题。
4 结 语
本Android软件专为选煤厂和选矿厂等涉及到浮沉实验数据计算及可选性曲线绘制的场所设计,曲线光滑准确,极大程度的缩短了浮沉实验数据计算和曲线绘制的时间,提高了原煤可选性的分析效率,从而为选煤工作者提供了一种高效率绘制可选性曲线的路径。该软件的特点是灵活机制、操作简便,避免了大数据的分析计算,有利于更好的解决数据处理和可选性曲线绘制问题,并且适用于任一款安卓智能手机的安装使用,使得该软件的应用推广更加便捷。