基于C++实现绘制已知函数的图像功能
♻️ 资源大小1.64MB➡️资源下载https://download.csdn.net/download/s1t16/87453185大作业——MyPlot 函数绘制工具设置大作业的目的是希望同学们活用课程学到的知识锻炼解决实际问题的能力体验团队协作过程并从过程中学到更多课堂很难涉及的知识。一、任务描述1.1 函数绘制MyPlot 工具支持的函数绘制功能应包括以下三种1.1.1 元函数绘制已知一元函数方程绘制函数图像。该功能函数的声明为void plot2D( double (*func)(double), double minX, double maxX, int color);其中 func 为 C/C 语言实现的一元函数方程minX 和 maxX 表达定义域取值范围color 为颜色值。这里颜色通过红绿蓝三原色的数值表达每种颜色占用一个字节即取值范围 0-255拼合成一个 int 整数表达一种颜色。例如0x0000FF 表示红色0x00FF00 表示绿色0xFF0000 表示蓝色0x00FFFF 表示黄色0xFF00FF 表示亮紫色等。例如plot2D(func1, -7, 7, 0x00FF00);将使用绿色绘制函数 y func1(x)、且 x 取值范围[-7, 7]的图像。这时如果 func1 的定义如下所示则绘制的图像见任务 2.1。double func1(double x) { return x;}1.1.2 参数函数绘制已知一元参数方程绘制函数图像。该功能函数的声明为void plotPara( double (*funcX)(double), double (*funcY)(double), double minT, double maxT, int color);其中 funcX 和 funcY 分别为 C/C 语言实现的 X 和 Y 的参数方程 minT 和 maxT 表达参数的取值范围 color 为颜色值。例如plotPara(func31, func32, 0, 2 * 3.1416, 0xFF0000);将使用蓝色绘制由 x func31(t)、y func32(t)联立形成、且 t 取值范围[0, 2 * 3.1416]时的参数曲线。这时如果 func31 和 func32 的定义如下所示则绘制的图像见任务 2.3。double func31(double t) { return cos(t) * 2 – cos(t * 2); } double func32(double t) { return sin(t) * 2 – sin(t * 2); }1.1.3 元函数绘制已知二元函数方程绘制函数图像三维。该功能函数的声明为void plot3D( double (*func)(double, double), double minX, double maxX, double minY, double maxY);其中 func 为 C/C 语言实现的二元函数方程 minX 和 maxX 表达自变量 X 的取值范围 minY 和 maxY 表达自变量 Y 的取值范围。绘制二元函数时通常不设置颜色值而是根据函数值的大小设置不同的颜色值。例如plot3D(func6, -8, 8, -8, 8);将使用绘制 z func6(x, y)、且 x 取值范围[-8,8]、y 取值范围[-8,8]时的曲面。绘制曲面可以由绘制多个小四边形实现。这时如果 func6 的定义如下所示则绘制的图像见任务 2.6。double func6(double x, double y) { double r sqrt(x * x y * y); if (r 0.0) return 1.0; return sin(r) / r;}1.2 画布创建1.2.1 创建二维坐标系画布void createCanvas( int width, int height, int origX, int origY, int ratio, bool axis);其中 width 和 height 分别为输出图像的宽和高 origX 和 origY 表达坐标原点在图像中的位置简化起见我们规定 X 轴正方向向右Y 轴正方向向上 ratio 表示坐标单位对应于多少像素 axis 表示是否绘制坐标轴。例如createCanvas(800, 600, 400, 300, 10, true);表示创建了一张 800x600 的图像以其中的(400,300)位置为坐标原点每 10 个像素为一个单位而且绘制坐标轴。即图像的,(410,300)位置对应函数坐标系中的(1,0)点图像的(400,290)位置对应函数坐标系中的(0,1)点。1.2.2 创建三维坐标系画布void createCanvas3D( int width, int height, int origX, int origY, double rxx, double rxy, double ryx, double ryy, double rzx, double rzy);其中 width 和 height 分别为输出图像的宽和高 origX 和 origY 表达坐标原点在图像中的位置 rxx、rxy、ryx、ryy、rzx、rzy 分别为三维坐标系的坐标对图像 x、y 坐标的变换参数。具体参考下面的公式可以将三维坐标(X, Y,Z)变换为图像中的坐标(imgX, imgY)imgX origX rxx * X ryx * Y rzx * Z imgY origY rxy * X ryy * Y rzy * Z简单起见三维坐标系画布不绘制坐标轴或坐标平面。例如void createCanvas( 800, 600, 400, 300, 24.8438, -5.375, -16.175, -5.3, 0, -145);表示创建了一张 800x600 的图像以其中的(400,300)位置为坐标原点。坐标变换参数可用来得到任务 2.6 所需的效果。1.3 画布保存void saveCanvas(char * filename);其中 filename 表示输出的文件名。二、必做任务在完成上述功能函数的基础上通过在主函数中调用这些函数绘制出下列图像具体的参数可根据审美自行设定。2.1 直线函数绘制下面的图形保存为“1_line.bmp”。2.2 抛物线绘制下面的图形保存为“2_parabolic.bmp”。2.3 笛卡尔心形线绘制下面的图形保存为“3_heart.bmp”。提示调用 plotPara 函数实现。2.4 其他心形线绘制下面的图形保存为“4_heart.bmp”。提示可通过多次调用 plot2D 函数实现。2.5 多层心形线绘制下面的图形保存为“5_hearts.bmp”。提示可多次调用 plot2D 和 plotPara 函数实现。2.6 墨西哥草帽绘制下面的图形保存为“6_hat.bmp”。提示调用 plot3D 和实现。三、输入输出要求3.1 输入工具没有输入参数。但工程中应包括 func1.cpp、func2.cpp、func3.cpp、func4.cpp、func5.cpp 和 func6.cpp6 个.cpp 文件分别包含了任务 2.1-2.6 所绘制函数的 C/C 语言定义。3.2 输出输出为 6 个.bmp 文件func1.bmp、func2.bmp、func3.bmp、 func4.bmp、func5.bmp、func6.bmp分别对应任务 2.1-2.6 的绘制结果。.bmp 文件格式参见百科资料课堂上也会简单讲解。四、组队、提交要求及计分说明4.1 组队要求要求 2-4 人一组组队完成推荐 3 人一组。每组选出一名队长。4.2 提交要求每组由队长在网络学堂提交一个.zip 压缩包。组员可以但不必须在网络学堂提交作业时说明队长姓名学号但不要提交附件。发现组员在网络学堂提交附件的将单独扣分。压缩包内应包括但不限于程序源文件。放置在 src 文件夹下可以有多级目录应包括全部工程编译所需文件。应包含 3.1 节中描述的 6 个.cpp 文件。说明文档。一个 Word 或 Pdf 文档放置在压缩包根目录下内容应包括但不限于小组人员姓名、学号、班级、基本功能完成情况、扩展功能说明可选、分工情况注意这部分将作为小组内同学评分依据。演示视频。放置在压缩包根目录下内容应包括但不限于小组人员展示、基本功能演示、扩展功能演示可选。建议长度不超过 3 分钟大小不超过 30MB。如果上述内容过大无法上传至网络学堂可分别用一个内含有效链接的.txt 文件代替。4.3 计分说明要求主体使用 C/C 实现。完整实现第一、二、三节规定的全部任务就可以获得 100% 的大作业分值。允许调用其他库允许调用其他语言编写的函数。但如这样做应在说明文档中给出说明并扣除由此节省的工作量所对等的分值。本文档中扩展功能指本文档中未说明的绘制函数功能即扩展本文档第一节内容、更多的输入输出交互模式即扩展本文档第三节内容扩展任务指本文档中未说明的任务即扩展本文档第二节内容。实现扩展功能或扩展任务有额外加分分值视重要程度而定。“抑制内卷条款”实现扩展功能或扩展任务并不能获得超过100%的大作业分值但可以用来补足由于第2条规定导致的扣分。请各位同学在小组内充分沟通根据小组同学的兴趣、能力和时间安排选择是否实现扩展功能或扩展任务。程设大作业说明全部完成1 直线函数 保存为 func1.bmp函数表达式效果图抛物线 保存为 func2.bmp函数表达式效果图笛卡尔心形线 保存为 func3.bmp曲线参数方程效果图4 其他心形线 保存为 func4.bmp函数表达式注和。效果图5 多层心形线 保存为 func5.bmp曲线表达式注大心形的方程为极坐标换元得。故效果图墨西哥草帽 保存为 func6.bmp二元函数表达式效果图拓展功能说明命令行运行MyPlot plot2D或MyPlot plotPara或MyPlot plot3D输入一个表达式和自变量范围输出 custom.bmp。其中 plot2D 输入一元函数及自变量 x 范围绘制函数图像。plotPara 输入二维曲线参数方程及自变量 t 范围绘制二维曲线。plot3D 输入二元函数及自变量 x, y 范围绘制三维曲面。注表达式不能含有空格由于 scanf 本身的特性。乘号*不可省略。不直接支持双曲和反双曲函数。但可以展开如。例 1 函数表达式及自变量 x 范围MyPlot plot2D sin(1/x) -5 5效果图例 2 曲线参数方程及自变量 t 范围MyPlot plotPara 2*cos(t)/(1-cos(t)/2) 2*sin(t)/(1-cos(t)/2) 0 6.2832效果图例 3 二元函数与自变量 x,y 范围MyPlot plot3D (abs(x)^10abs(y)^10)^(2/10)-2 -2 2 -2 2效果图代码及文件结构main.cpp主函数所在处用于处理输入和调用 MyPlot 类MyPlot.cpp/MyPlot.hMyPlot 类的实现包括 plot2D、plotPara、plot3D 等函数func1.cpp~func6.cpp/func.h基本功能绘制所需的函数声明都在 func.h 中bmpheader.hbmp 文件头的结构简化版extend.cpp/extend.h拓展功能构建一个 function 类它通过输入的字符串函数表达式生成一棵表达式树并计算它的值font.txt字体信息显示数字要用autocompile.bat调用 G一键编译全部文件需要安装 G 到 path演示.bat一键演示基本 拓展功能需先编译func1.bmp~func6.bmp基本功能输出 6 个 bmp 文件custom.bmp扩展功能输出 bmp 文

相关新闻

Linux 提权管理实战:su 与 sudo 深度解析与最佳实践

Linux 提权管理实战:su 与 sudo 深度解析与最佳实践

在 Linux 系统运维中,权限管理是保障系统安全的核心环节。为避免因长期使用 root 超级权限引发误操作或安全漏洞,运维人员通常以非特权用户身份登录系统,仅在需要时通过专用工具临时获取管理员权限。本文将深入解析 Linux 中最常用的两种提权…

2026/10/13 1:13:32 阅读更多 →
基于C++实现人脸过渡(大作业报告)

基于C++实现人脸过渡(大作业报告)

♻️ 资源 大小: 826KB ➡️ 资源下载:https://download.csdn.net/download/s1t16/87453222 人脸过渡大作业报告 基本功能介绍 此次大作业实现了从一张人脸照片到另一张人脸照片的过渡。 使用程序流程: 选取控制点(特征点&a…

2026/9/29 16:16:23 阅读更多 →
协作工具堆不出高效组织:瓶颈在文化而非功能

协作工具堆不出高效组织:瓶颈在文化而非功能

协作工具堆不出高效组织:内网协作新范式的真正瓶颈在文化,而非功能热点现象:协作工具投资热背后的“效率陷阱” 过去几年,企业协作工具市场经历了前所未有的繁荣。从“全员上钉”到“All in 飞书”,从即时通讯到一站式…

2026/10/13 15:28:56 阅读更多 →

最新新闻

前端链接测试从入门到落地:href 检测方案与实战经验

前端链接测试从入门到落地:href 检测方案与实战经验

做前端开发这些年,我越来越确定一件事:链接测试是所有页面检查里最容易被忽略、但一旦翻车影响面又最大的环节。“test href”这个短语初看像占位符,实际上它点破了一个很实在的动作——把页面里每一个 a 标签的 href 都当成潜在事故点&#…

2026/10/13 20:35:41 阅读更多 →
Spring Security实战:前后端分离下JWT认证与权限控制指南

Spring Security实战:前后端分离下JWT认证与权限控制指南

1. 项目概述与整体设计思路 1.1 为什么要花大力气搞 Spring Security 刚接手某个模拟项目X的时候,我其实挺纠结的:项目里已经有了一套基于拦截器和 ThreadLocal 的简易登录体系,能跑、能用,看起来也没啥大毛病。但后来随着接口越…

2026/10/13 20:35:41 阅读更多 →
WordNet相似度计算实战:NLTK实现与踩坑指南

WordNet相似度计算实战:NLTK实现与踩坑指南

前阵子帮朋友看一个智能问答的小项目,发现最棘手的问题不在模型选型,而在一个看起来特别基础的需求上:用户问“怎么修车”,系统里明明有“汽车保养指南”,却因为关键词匹配不上,死活召回不到。这种问题说白…

2026/10/13 20:35:41 阅读更多 →
Linux用户与组管理完全指南:从UID/GID到权限隔离实战

Linux用户与组管理完全指南:从UID/GID到权限隔离实战

1. 用户与组管理到底在解决什么问题先说结论:用户与组管理是所有多用户操作系统最基础、也最容易被轻视的一道安全防线。我见过不少项目初期图省事,全部人共用一个账号,等到需要追责、隔离权限、清理环境的时候,才发现当初偷的懒全…

2026/10/13 20:35:41 阅读更多 →
计及氢能的综合能源优化调度Matlab实现与建模详解

计及氢能的综合能源优化调度Matlab实现与建模详解

最近因为一个模拟园区的项目,我把一套计及氢能的综合能源优化调度模型从论文里搬到了Matlab里,跑到能出结果、能出图、能复现的程度。说实话,这种题目看着“高大上”,拆开其实就是三件事:把设备建好模、把约束写对、把…

2026/10/13 20:35:41 阅读更多 →
从零构建Agent技能库:技能层设计、动态装载与回归测试的工程实践

从零构建Agent技能库:技能层设计、动态装载与回归测试的工程实践

直接做Agent应用的人,这两年应该都有同感:单个Agent的对话能力已经不是瓶颈了,真正拉开差距的是Agent能不能稳定地调用外部能力、按流程完成任务。我最近在整理和重构一个内部项目,名字就叫“agent-skills”,本质上是一…

2026/10/13 20:34:36 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →