美文网首页
qt绘制函数图像

qt绘制函数图像

作者: 赫尔特 | 来源:发表于2019-08-06 15:36 被阅读0次
    在这里插入图片描述
    二次函数 在这里插入图片描述 在这里插入图片描述
    1. 准备画布,填充画布颜色为白色
    //头文件中
    private:
        Ui::Widget *ui;
        QImage image;
        QString line;
    //实现文件中
    Widget::Widget(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::Widget)
    {
        line="";
        ui->setupUi(this);
        image=QImage(1200,1200,QImage::Format_RGB32);
        QColor backColor=qRgb(255,255,255);
        image.fill(backColor);
    }
    
    
    1. 准备画家,先画出坐标轴
    public:
        explicit Widget(QWidget *parent = nullptr);
        void Paint();
        void Connext();
    
    //实现
    void Widget::Paint()
    {
        QPainter painter(&image);
        painter.setRenderHint(QPainter::Antialiasing,true);
        int pointx=450,pointy=450;
        int width=800,height=800;
        painter.drawRect(5,5,1200-10,1200-10);
        painter.drawLine(pointx-width/2+50,pointy,pointx+width/2+100,pointy);
        painter.drawLine(pointx,pointy-height/2,pointx,pointy+height/2);
    }
    
    
    1. 描点,把点存储在队列中

    <font color=pink>描点时,横坐标根据你所给的表达式给出,比如如果是对数函数,从0.1开始往后给出10个左右横坐标。纵坐标需要根据表达式计算,我们只需要把表达式里面的x换成具体的值,就可以计算出纵坐标。</font>

    QList<QPointF>points=creatPoints(line);     //creatPoints()是一个函数,
    返回需要的数据点,line就是输入的表达式。
    
    //具体实现还有怎么计算数据点有些复杂,这里略过,若想尝试的话,可以自己自定义一些数据点。
    

    4.根据所给点绘制曲线
    这里要用到QPainterPath类,顾名思义,它可以根据你所给的点,一段一段的绘制曲线。

      QList<QPointF>points=creatPoints(line);
          QPainterPath path(points[0]);
          for(int i=0;i<points.size()-1;++i)
          {
              QPointF sp=points[i];
              QPointF ep=points[i+1];
              QPointF c1=QPointF((sp.x()+ep.x())/2,(sp.y()+ep.y())/2);
              QPointF c2=c2;
              path.cubicTo(c1,c2,ep);           //这个函数就是用来绘制曲线的。
              //第一个参数和第二个参数都是控制点(百度贝赛尔曲线)
              //第三个参数endpoint,是这小段曲线的终点
              //起点是按照你的队列顺序的前一个节点
              //这里将c1和c2设置成一样的是因为这小段曲线凹凸性是一样的。
    
          }
                  QPainter painter(&image);
                  painter.setRenderHint(QPainter::Antialiasing,true);       //防锯齿
                  painter.setPen(QPen(Qt::black,10));
                  painter.translate(450,450);
                  painter.drawPath(path);
    

    这样大致思路就出来了。
    如果觉得这个图像还过得去想要源码的可以留言(^U^)ノ~YO


    在这里插入图片描述

    相关文章

      网友评论

          本文标题:qt绘制函数图像

          本文链接:https://www.haomeiwen.com/subject/ioqwdctx.html