使用EGE 库设计一个绘制多边形的程序。并且满足以下要求: 1、可以绘制任意个多边形; 2、过程中要显示绘制路径,,绘制结束后,填充多边形内部; 3、能够将已绘制完成的多边形 保存到文件中,并目可以从文件中读取已保存的多边形,重新显示在界面上。
时间: 2024-03-20 20:39:05 浏览: 130
画多边形的程序
4星 · 用户满意度95%
好的,以下是使用EGE库设计绘制多边形的程序,满足您的要求:
```c++
#include<iostream>
#include<graphics.h>
#include<fstream>
#include<vector>
using namespace std;
// 定义结构体Point表示点
struct Point {
int x;
int y;
};
// 绘制多边形函数
void draw_poly(vector<Point>& poly) {
// 绘制多边形边界
setcolor(YELLOW);
for (int i = 0; i < poly.size() - 1; i++) {
line(poly[i].x, poly[i].y, poly[i + 1].x, poly[i + 1].y);
}
line(poly[poly.size() - 1].x, poly[poly.size() - 1].y, poly[0].x, poly[0].y);
// 填充多边形内部
setfillcolor(GREEN);
fillpoly(poly.size(), &poly[0].x);
}
// 保存多边形到文件
void save_poly(vector<Point>& poly, string filename) {
ofstream out(filename);
out << poly.size() << endl;
for (int i = 0; i < poly.size(); i++) {
out << poly[i].x << " " << poly[i].y << endl;
}
out.close();
}
// 从文件中读取多边形
vector<Point> load_poly(string filename) {
ifstream in(filename);
int size;
in >> size;
vector<Point> poly(size);
for (int i = 0; i < size; i++) {
in >> poly[i].x >> poly[i].y;
}
in.close();
return poly;
}
int main() {
initgraph(640, 480);
vector<vector<Point>> polys; // 存储多边形
vector<Point> poly; // 存储当前正在绘制的多边形
bool is_drawing = false; // 是否正在绘制多边形
bool is_saved = false; // 是否已保存当前绘制的多边形
while (true) {
if (kbhit()) {
char c = getch();
// 按下ESC键退出程序
if (c == 27) break;
// 按下S键保存当前绘制的多边形
if (c == 's') {
if (!is_saved && is_drawing) {
polys.push_back(poly);
save_poly(poly, "poly" + to_string(polys.size()) + ".txt");
is_saved = true;
}
}
// 按下L键从文件中读取多边形
if (c == 'l') {
int index;
cout << "请输入多边形编号(1-" << polys.size() << "):";
cin >> index;
if (index > 0 && index <= polys.size()) {
cleardevice();
poly = polys[index - 1];
draw_poly(poly);
is_saved = true;
}
}
// 按下空格键开始/结束绘制多边形
if (c == ' ') {
if (is_drawing) {
draw_poly(poly);
is_drawing = false;
is_saved = false;
}
else {
poly.clear();
is_drawing = true;
}
}
}
if (is_drawing) {
// 显示当前鼠标位置
setcolor(WHITE);
int mx = mousex();
int my = mousey();
outtextxy(mx, my, to_string(mx) + "," + to_string(my).c_str());
// 显示绘制路径
if (poly.size() > 0) {
setcolor(RED);
line(poly[poly.size() - 1].x, poly[poly.size() - 1].y, mx, my);
}
// 鼠标左键按下则添加点
if (GetAsyncKeyState(VK_LBUTTON) & 0x8000) {
Point p = { mx, my };
poly.push_back(p);
}
}
}
closegraph();
return 0;
}
```
程序中使用了vector存储多边形的顶点,可以绘制任意个多边形,按下空格键开始/结束绘制多边形,按下S键保存当前绘制的多边形,按下L键从文件中读取多边形。绘制时会显示鼠标当前位置和绘制路径,绘制结束后会填充多边形内部,保存多边形时会将多边形顶点坐标保存到文件中,从文件中读取多边形时会清空屏幕并显示多边形。
阅读全文