使用EGE库设计一个绘制多边形的程序。并且满足以下要求: 1、可以绘制任意个多边形; 2、过程中要显示绘制路径,绘制结束后,填充多边形内部; 3、能够将已绘制完成的多边形保存到文件中,并且可以从文件中读取已保存的多边形,重新显示在界面上。
时间: 2024-04-04 17:33:38 浏览: 146
以下是使用 EGE 库设计一个绘制多边形的程序,满足以上要求:
```cpp
#include <graphics.h>
#include <conio.h>
#include <fstream>
using namespace std;
const int MAX_POINTS = 1000; // 多边形最大顶点数
struct Polygon {
int n; // 多边形的边数
int x[MAX_POINTS]; // 多边形的顶点横坐标
int y[MAX_POINTS]; // 多边形的顶点纵坐标
};
void drawPolygon(Polygon p) {
setbkcolor(WHITE); // 设置背景色为白色
cleardevice(); // 清空屏幕
setcolor(BLACK); // 设置画笔颜色为黑色
for (int i = 0; i < p.n; i++) {
line(p.x[i], p.y[i], p.x[(i + 1) % p.n], p.y[(i + 1) % p.n]); // 画多边形边
}
setfillcolor(YELLOW); // 设置填充颜色为黄色
fillpoly(p.n, p.x, p.y); // 填充多边形内部
}
void savePolygon(Polygon p, string filename) {
ofstream fout(filename);
fout << p.n << endl;
for (int i = 0; i < p.n; i++) {
fout << p.x[i] << " " << p.y[i] << endl;
}
fout.close();
}
Polygon loadPolygon(string filename) {
Polygon p;
ifstream fin(filename);
fin >> p.n;
for (int i = 0; i < p.n; i++) {
fin >> p.x[i] >> p.y[i];
}
fin.close();
return p;
}
int main() {
initgraph(640, 480); // 初始化绘图窗口
Polygon p;
bool drawing = false;
bool saved = false;
while (true) {
if (kbhit()) { // 监听键盘输入
int ch = getch();
switch (ch) {
case ' ': // 空格键,结束绘制
if (p.n > 2) { // 至少需要三个点才能构成多边形
saved = false;
drawing = false;
drawPolygon(p);
}
break;
case 27: // ESC键,退出程序
closegraph();
return 0;
case 's': // S键,保存多边形
if (!saved && p.n > 2) { // 至少需要三个点才能构成多边形
string filename;
cout << "请输入保存文件名:";
cin >> filename;
savePolygon(p, filename);
saved = true;
}
break;
case 'l': // L键,加载多边形
if (!drawing && !saved) {
string filename;
cout << "请输入加载文件名:";
cin >> filename;
p = loadPolygon(filename);
saved = true;
drawPolygon(p);
}
break;
default: // 其他键,添加多边形顶点
if (drawing && p.n < MAX_POINTS) {
saved = false;
int x, y;
getmouse(&x, &y);
p.x[p.n] = x;
p.y[p.n] = y;
p.n++;
drawPolygon(p);
}
break;
}
}
if (ismouseclick(WM_LBUTTONDOWN)) { // 监听鼠标左键点击
if (!drawing && !saved) {
p.n = 0;
drawing = true;
}
clearmouseclick(WM_LBUTTONDOWN);
}
}
}
```
程序流程说明:
1. 初始化绘图窗口,定义多边形结构体和最大顶点数常量。
2. 定义绘制多边形、保存多边形、加载多边形的函数。
3. 进入主循环,监听键盘输入和鼠标点击。
4. 如果按下空格键,结束绘制多边形,并在屏幕上显示多边形并填充内部。
5. 如果按下 ESC 键,退出程序。
6. 如果按下 S 键,保存多边形到文件中。
7. 如果按下 L 键,从文件中加载多边形并显示在屏幕上。
8. 如果按下其他键并且正在绘制多边形,添加多边形顶点并更新屏幕显示。
9. 如果鼠标左键被点击并且之前没有绘制多边形或者已经保存了多边形,开始绘制多边形。
注意事项:
1. 在程序中使用了 EGE 库提供的函数来进行绘图、键盘输入和鼠标点击的监听,需要在编译时将 EGE 库链接进去。
2. 为了保证多边形能被填充,需要先画多边形的边,再填充多边形内部。
3. 为了方便起见,程序中保存的多边形文件格式为第一行为多边形的边数,后面每行为一个顶点的横坐标和纵坐标。实际使用时可以根据需要自行修改。
阅读全文