当前位置: 首页 > news >正文

c++ 画数学函数图

c++ 画数学函数图并不像 python 方便。

  • 最好可以使用 matplotlib-cpp,这个将 python 的 matplotlib 库转到 c++ 里了,语法跟 python 变动不大。但是,我在 mac clion 上始终没有安装成功,总是出错,看了 matplotlib-cpp github 主页说明,似乎还是基于 python 2.7,其他的维护更新似乎也没那么及时。
  • 还有一个画图的库 JKQtPlotter,这个基于 Qt,但是安装库也是各种错误,始终没有成功。github 主页的介绍非常晦涩,我始终没看明白这个库的 cmake 到底要怎么配置。但是,若将这个库下载下来,直接以项目的形式打开,里面的例子能够正确运行。但还是不方便,我只想调用这个库,并不想每次都在你这个库里新建项目。
  • 最后找到了 qt 自带的 QPainter,这个就方便多了。qt 是 c++ 使用非常广的开发图形库,非常容易配置 cmake。而且,对于画一些数学函数图,基本够用了。初步使用起来类似 java 的 JFrame。

下面是 QPinter 生成的一个简单的正弦函数线图:

#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <cmath>

class FunctionPlotter : public QWidget {
protected:
    void paintEvent(QPaintEvent *) override {
        QPainter painter(this);
        painter.setRenderHint(QPainter::Antialiasing);

        // 坐标轴
        painter.setPen(Qt::black);
        // 两个点坐标之间的连线
        painter.drawLine(20, height() / 2, width() - 20, height() / 2); // X轴
        painter.drawLine(width() / 2, 20, width() / 2, height() - 20); // Y轴

        // 画函数 y = sin(x)
        painter.setPen(Qt::red);
        for (int x = -width() / 2; x < width() / 2; x++) {
            int y1 = -std::sin(x / 50.0) * 100; // 归一化
            int y2 = -std::sin((x + 1) / 50.0) * 100;
            painter.drawLine(width() / 2 + x, height() / 2 + y1,
                             width() / 2 + x + 1, height() / 2 + y2);
        }
    }
};

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    FunctionPlotter plotter;
    plotter.resize(600, 400);
    plotter.setWindowTitle("数学函数绘制");
    plotter.show();

    return app.exec();
}

没有保存图片的功能,但可以直接用电脑截图保存,也可以用 QPainter 里面一些保存图片的函数。
在这里插入图片描述

相关文章:

  • 序列化选型:字节流抑或字符串
  • 医疗AR眼镜:FPC如何赋能科技医疗的未来之眼?【新立电子】
  • 深入理解Java网络编程:从基础到高级应用
  • Github-介绍
  • 【软路由】ImmortalWrt 编译指南:从入门到精通
  • SpringBoot敏感数据脱敏怎么处理
  • YOLOv11-ultralytics-8.3.67部分代码阅读笔记-loss.py
  • 反激变压器的相关参数,磁芯选择,电感系数,气隙,绕线方式,
  • 【已解决】pyodbc 5.2 [ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序
  • Linux下用route命令修改默认网关,不用重启网络
  • 分布式系统和集群式系统
  • Spring Boot + MyBatis 实现 RESTful API 的完整流程
  • CSS—选择器详解:5分钟动手掌握选择器
  • LeetCode第57题_插入区间
  • eclipse SVN: ‘0x00400006:踩坑之旅
  • 【2025】企业信息查询接口解析
  • 陕西省地标-DB61/T 1121-2018 政务服务中心建设和运营规范
  • sam-vit-base 辅助检测卡车的可拽雨覆完全覆盖
  • leetcode_字典树 139. 单词拆分
  • 性能测试分析和调优
  • 叫什么公子的网站做ppt的/平台推广费用
  • 国外室内设计网站大全网站/企业网站设计与实现论文
  • 常德政务网站/竞价推广哪家公司好
  • 网站栏目和版块的设计心得/信息流优化师简历模板
  • 做网站主页效果图/优化大师优化项目有
  • 溧阳网站定制/百度一下 官方网