电力油色谱分析图谱,3D图和大卫三角形代码绘制,QT 和 JS

JS的立体图还没弄,今天只弄了QT的三维图和三角图,还有JS的大卫三角图,因为前端的同事也需要用这个图谱,只能给他们写一个JS版本的,脑壳痛

绘制流程:

1、根据导则的边界范围计算出相应的点

2、绘制出填充

3、绘制坐标轴

4、绘制图像标记

 render() {
        this.CalcLocaltion();
        this.DrawBackground("谱图:大卫三角");
        this.DrawPolygon(this.context, this.poly_triangle, 'transparent', 'black');

        this.DrawAreaLines();
        this.DrawAreaBrush();

        this.Draw_Axis_CH4();
        this.Draw_Axis_C2H4();
        this.Draw_Axis_C2H2();

        this.DrawLine(this.context, this.pd_txt_p_a, this.pd_txt_p_b, 'black');
        this.context.font = '18px Arial';
        this.context.fillStyle = 'black';
        this.context.fillText("PD",this.pd_txt_p_b.x,this.pd_txt_p_b.y);

        this.DrawLine(this.context, this.t1_txt_p_a, this.t1_txt_p_b, 'black');
        this.context.fillText("T1",this.t1_txt_p_b.x,this.t1_txt_p_b.y);

        this.DrawLine(this.context, this.t2_txt_p_a, this.t2_txt_p_b, 'black');
        this.context.fillText("T2",this.t2_txt_p_b.x,this.t2_txt_p_b.y);

        this.context.fillStyle = 'white';
        this.context.fillText("T3",this.t3_txt_p.x,this.t3_txt_p.y);
        this.context.fillText("D1",this.d1_txt_p.x,this.d1_txt_p.y);
        this.context.fillText("D2",this.d2_txt_p.x,this.d2_txt_p.y);
        this.context.fillText("D+T",this.dt_txt_p.x,this.dt_txt_p.y);
    }

QT 的也是差不多,只不过立体图中的D1,D2 导则上的范围和他的图也自相矛盾的,有现场经验的可以交流一下如何计算,我只是取了个大概的范围

void Analysis_triangle_view::onStartDraw(Canvas &canvas)
{
    DrawTriangle(canvas,mViewData->mPointTop,mViewData->mPointBottom_left,mViewData->mPointBottom_Right);

    /**PD**/
    canvas.drawLine(mViewData->mPoint_PD_A,mViewData->mPoint_PD_B);

    /**D1**/
    canvas.drawLine(mViewData->mPoint_D1_A,mViewData->mPoint_D1_B);
    canvas.drawLine(mViewData->mPoint_D1_C,mViewData->mPoint_D1_D);

    /**D2**/
    canvas.drawLine(mViewData->mPoint_D2_A,mViewData->mPoint_D2_B);
    canvas.drawLine(mViewData->mPoint_D2_C,mViewData->mPoint_D2_D);

    /**T1**/
    canvas.drawLine(mViewData->mPoint_T1_A,mViewData->mPoint_T1_B);
    canvas.drawLine(mViewData->mPoint_T1_C,mViewData->mPoint_T1_D);

    /**T3**/
    canvas.drawLine(mViewData->mPoint_T3_A,mViewData->mPoint_T3_B);
    canvas.drawLine(mViewData->mPoint_T3_C,mViewData->mPoint_T3_D);

    mViewData->mCapofLengceBrush.clear();

    mViewData->mCapofLengceBrush.append(QColor(0xff,0x00,0x00,0x53));
    mViewData->mCapofLengceBrush.append(QColor(0x00,0xff,0x00,0x53));
    mViewData->mCapofLengceBrush.append(QColor(0x0,0x00,0xff,0x53));

    mViewData->mCapofLengceBrush.append(QColor(0xff,0x80,0x00,0x53));
    mViewData->mCapofLengceBrush.append(QColor(0x80,0xff,0x00,0x53));
    mViewData->mCapofLengceBrush.append(QColor(0x00,0xff,0x80,0x53));

    mViewData->mCapofLengceBrush.append(QColor(0x00,0x80,0xff,0x53));

    mViewData->mCapofLegceTxt.clear();
    mViewData->mCapofLegceTxt.append("D1");
    mViewData->mCapofLegceTxt.append("D2");
    mViewData->mCapofLegceTxt.append("D+T");
    mViewData->mCapofLegceTxt.append("PD");
    mViewData->mCapofLegceTxt.append("T1");
    mViewData->mCapofLegceTxt.append("T2");
    mViewData->mCapofLegceTxt.append("T3");

    canvas.setBrush(mViewData->mCapofLengceBrush.at(0));
    canvas.drawPolygon(mViewData->mPolygon_D1);

    canvas.setBrush(mViewData->mCapofLengceBrush.at(1));
    canvas.drawPolygon(mViewData->mPolygon_D2);

    canvas.setBrush(mViewData->mCapofLengceBrush.at(2));
    canvas.drawPolygon(mViewData->mPolygon_DT);

    canvas.setBrush(mViewData->mCapofLengceBrush.at(3));
    canvas.drawPolygon(mViewData->mPolygon_PD);


    canvas.setBrush(mViewData->mCapofLengceBrush.at(4));
    canvas.drawPolygon(mViewData->mPolygon_T1);

    canvas.setBrush(mViewData->mCapofLengceBrush.at(5));
    canvas.drawPolygon(mViewData->mPolygon_T2);

    canvas.setBrush(mViewData->mCapofLengceBrush.at(6));
    canvas.drawPolygon(mViewData->mPolygon_T3);


    DrawArrowLine(mViewData->mLineCh4,"%CH4",canvas);
    DrawArrowLine(mViewData->mLineC2H4,"%C2H4",canvas);
    DrawArrowLine(mViewData->mLineC2H2,"%C2H2",canvas);

    DrawTickCh4(mViewData->mPointBottom_left,mViewData->mPointTop,canvas);
    DrawTickC2H4(mViewData->mPointTop,mViewData->mPointBottom_Right,canvas);
    DrawTickC2H2(mViewData->mPointBottom_Right,mViewData->mPointBottom_left,canvas);

    DrawLengce(canvas);
}

void Analysis_3d_View::onStartDraw(Canvas &canvas)
{
    QBrush br_yz(QColor(0xff,0x80,0x00,0x53));
    QBrush br_xy(QColor(0x00,0x80,0xff,0x53));
    QBrush br_xz(QColor(0x00,0x00,0xff,0x30));
    QBrush br_t1(QColor(0xcc,0x00,0x00));
    QBrush br_pd(QColor(0x00,0xcc,0xcc));
    QBrush br_t2(QColor(0x00,0x80,0xff));
    QBrush br_t3(QColor(0xcc,0x66,0x00));
    QBrush br_d2(QColor(0x00,0x80,0xff,0xcd));
    QBrush br_d1(QColor(0x7F,0x00,0xff,0xcd));

    QPen pen(Qt::black);

    DrawPlane(canvas,mViewData->mPlaneYZ,br_yz,pen);
    DrawPlane(canvas,mViewData->mPlaneXY,br_xy,pen);
    DrawPlane(canvas,mViewData->mPlaneXZ,br_xz,pen);



    Draw_X_Axis(canvas);
    Draw_Y_Axis(canvas);
    Draw_Z_Axis(canvas);


    DrawPlane(canvas,mViewData->mPlanePD,br_pd,pen);
    DrawPlane(canvas,mViewData->mPlaneT1,br_t1,pen);


    Draw_Cube(canvas,mViewData->mCubeT2,br_t2,pen);
    Draw_Cube(canvas,mViewData->mCubeT3,br_t3,pen);
    Draw_Cube(canvas,mViewData->mCubeD2,br_d2,pen);
    Draw_Cube(canvas,mViewData->mCubeD1,br_d1,pen);

    Draw_CubeLine(canvas,mViewData->mCubeD2,pen);

    canvas.drawLine(mViewData->mDT_Line);


    double angle = std::atan2(mViewData->mPlaneXY.mPoint11.y() - mViewData->mPlaneXY.mPoint21.y(), mViewData->mPlaneXY.mPoint11.x() - mViewData->mPlaneXY.mPoint21.x());
    double angleDegrees = qRadiansToDegrees(angle);

    QFont font("Arial", 10, QFont::Bold);
    canvas.setFont(font);
    pen.setColor(Qt::white);
    canvas.setPen(pen);


    Draw_Text(canvas,mViewData->mTxtPD,"PD",0);
    Draw_Text(canvas,mViewData->mTxtT1,"T1",0);
    Draw_Text(canvas,mViewData->mTxtT2,"T2",90);
    Draw_Text(canvas,mViewData->mTxtT3,"T3",0);
    Draw_Text(canvas,mViewData->mTxtD1,"D1",angleDegrees);
    Draw_Text(canvas,mViewData->mTxtD2,"D2",angleDegrees);
    Draw_Text(canvas,mViewData->mTxtDT,"DT",0);
}

3D图 就是计算平面投影,都是些初中的三角函数知识,都比较简单,有兴趣的朋友 可以根据这个思路实现以下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值