> # ♻️ 资源
> **大小:** 1.64MB
> **文档链接:**[**https://www.yuque.com/sxbn/ks/100010824**](https://www.yuque.com/sxbn/ks/100010824)
> **➡️ 资源下载:**[**https://download.csdn.net/download/s1t16/87453185**](https://download.csdn.net/download/s1t16/87453185)
> **注:更多内容可关注微信公众号【神仙别闹】,如当前文章或代码侵犯了您的权益,请私信作者删除!**
> ![qrcode_for_gh_d52056803b9a_344.jpg](https://cdn.nlark.com/yuque/0/2023/jpeg/2469055/1692147256036-49ec7e0c-5434-4963-b805-47e7295c9cbc.jpeg#averageHue=%23a3a3a3&clientId=u8fb96484-770e-4&from=paste&height=140&id=u237e511a&originHeight=344&originWidth=344&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=8270&status=done&style=none&taskId=ud96bf5f7-fe85-4848-b9c2-82251181297&title=&width=140.1999969482422)
# 大作业——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”。
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1716169852997-b070bca8-aa71-40b8-98de-699e8e821171.png#averageHue=%23fdfdfd&from=url&id=vUuR4&originHeight=527&originWidth=558&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
## 2.2 抛物线
绘制下面的图形,保存为“2_parabolic.bmp”。
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1716169853134-840f1548-66c8-4dad-9853-7226d211caa9.png#averageHue=%23fdfdfd&from=url&id=cSocG&originHeight=554&originWidth=702&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
## 2.3 笛卡尔心形线
绘制下面的图形,保存为“3_heart.bmp”。提示,调用 plotPara 函数实现。
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1716169853200-67b117db-f962-4a3a-8237-9cfcbf6833f7.png#averageHue=%23fefefe&from=url&id=WDIkm&originHeight=311&originWidth=339&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
## 2.4 其他心形线
绘制下面的图形,保存为“4_heart.bmp”。提示,可通过多次调用 plot2D 函数实现。
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1716169853278-4b2812c1-5940-46c1-8d7d-78480c0041af.png#averageHue=%23fcfcfb&from=url&id=O4aHg&originHeight=601&originWidth=724&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
## 2.5 多层心形线
绘制下面的图形,保存为“5_hearts.bmp”。提示,可多次调用 plot2D 和 plotPara 函数实现。
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1716169853336-9c0aa4ec-2a91-4413-acc4-81a863bc73f4.png#averageHue=%23fdfdfc&from=url&id=fCTct&originHeight=659&originWidth=727&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
## 2.6 墨西哥草帽
绘制下面的图形,保存为“6_hat.bmp”。提示,调用 plot3D 和实现。
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1716169853411-ee70e3b5-4990-4520-8147-10a0d5c02ead.png#averageHue=%23fbfcf5&from=url&id=fFEzU&originHeight=493&originWidth=1269&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
详情介绍:https://www.yuque.com/sxbn/ks/100010824 本项目旨在绘制函数图像是帮助我们理解函数性质的重要手段。让我们使用C/C++ 语言,编写一个 MyPlot 工具,实现绘制已知函数的图像的功能,
资源推荐
资源详情
资源评论
收起资源包目录
100010824-基于C++实现绘制已知函数的图像功能.zip (55个子文件)
myplot
大作业_MyPlot函数绘制工具.pdf 495KB
MyPlot.exe 253KB
src
func4.cpp 158B
Para.txt 52B
font.txt 738B
func2.cpp 36B
func1.cpp 34B
extend.h 382B
MyPlot.exe 253KB
func.h 271B
myplot.cpp 8KB
main.cpp 2KB
func6.cpp 151B
bmpheader.h 374B
extend.cpp 4KB
演示.bat 270B
autocompile.bat 348B
myplot.h 1KB
2d.txt 13B
3d.txt 40B
func3.cpp 142B
func5.cpp 188B
LICENSE 1KB
简介.docx-md
13-77efc99895dfec3a23997619321f2d9a.png 886B
8-596a17a4b6f97fca202baeb246efd4cb.png 783B
5-51b76616bf7cab5110d0fea093256686.png 45KB
18-c9f5ce40d419f40f2d9f1a34eafafb2c.png 17KB
9-5dcab701f2d5d24e2b366016907e7651.png 1KB
17-0b676ecf164d8e3230a5a86b913b913a.png 2KB
21-e9886aa5fb35c5710a9d4cb55542e409.png 1KB
7-f002e07e4f38a5911df434e15d47f3ac.png 58KB
3-bef28a6166e316d69c0ad5fa2c118d45.png 18KB
15-9696967b9c835fcdcddaff154ffac537.png 2KB
11-90dfec1b618f83cc469730dec0a932a8.png 63KB
1-9b91172c2f90096d220799cc532f4dfa.png 17KB
23-d08032a402e6682641eb86f58d42670b.png 5KB
22-78fba22cd3dd883d978e4de66d58bcea.png 4KB
6-ac1c9c829dc3fb2527c7854261ec0c43.png 3KB
19-9caae890c404ad67ea4d6c2e4b26efed.png 49KB
24-a211eeec56fd812b6ba0c7821d1434e7.png 84KB
2-175babfdee625ca82a7fb47d27f03ce2.png 5KB
12-ce31a2681d01cca0c68bda20bc4f0ce3.png 58KB
4-fa2a92d83c1ff2d93bd0ee1638709e05.png 3KB
14-054900e4ced3093e25c3a0d277153fe0.png 1KB
20-d7dd5f31ffe259f106ce4a15da51742b.png 20KB
16-b5c7df4a5a512fbc2897321b3cedcd85.png 1KB
10-5ed38ef04acb04b203c17651c8b0868a.png 9KB
img.doc-md
1-fdc2b534e3309ddc90753d45b89d16d9.png 14KB
6-2fd18a1f2687d98a187c3d03f8467a65.png 102KB
3-29d782d85ac55944a21b7a411b18cbde.png 6KB
5-0e6ea287c2205581989f241e51f979e6.png 25KB
4-b1b6eb8857c688c2dc36403ce77c9571.png 21KB
2-fa6fd326ac90d550640b37bf8ae8f680.png 20KB
简介.docx 483KB
README.md 19KB
共 55 条
- 1
资源评论
- dsndffjfkfm2023-07-12感谢资源主的分享,这个资源对我来说很有用,内容描述详尽,值得借鉴。
神仙别闹
- 粉丝: 3620
- 资源: 7460
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功