From acd9ae3ad1135b4ad685d1b5dde8c1e20797de1f Mon Sep 17 00:00:00 2001 From: biss Date: Fri, 10 Apr 2026 14:32:28 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E9=AA=8C1-3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lab1/3.cpp | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++ lab1/3.exe | Bin 0 -> 68149 bytes 2 files changed, 86 insertions(+) create mode 100644 lab1/3.cpp create mode 100644 lab1/3.exe diff --git a/lab1/3.cpp b/lab1/3.cpp new file mode 100644 index 0000000..f5cd8ba --- /dev/null +++ b/lab1/3.cpp @@ -0,0 +1,86 @@ +#include // 引入 GLUT 库,用于创建窗口和处理事件 +#include + +using namespace std; + +// 辅助函数:根据八分对称性,绘制8个对称点 +void plotCirclePoints(int xc, int yc, int x, int y) { + glBegin(GL_POINTS); + // 第1象限 + glVertex2i(xc + x, yc + y); + glVertex2i(xc + y, yc + x); + // 第2象限 + glVertex2i(xc - y, yc + x); + glVertex2i(xc - x, yc + y); + // 第3象限 + glVertex2i(xc - x, yc - y); + glVertex2i(xc - y, yc - x); + // 第4象限 + glVertex2i(xc + y, yc - x); + glVertex2i(xc + x, yc - y); + glEnd(); +} + +// 中点画圆算法主函数 +// 参数: (xc, yc) 为圆心坐标, r 为半径 +void midpointCircle(int xc, int yc, int r) { + int x = 0; + int y = r; + // 初始决策参数 d = 3 - 2r + int d = 3 - 2 * r; + + // 绘制初始点 + plotCirclePoints(xc, yc, x, y); + + // 循环计算并绘制第一个八分之一圆弧,直到 x <= y + while (x <= y) { + x++; + if (d < 0) { + // 中点在圆内,选择正右方的点 (x+1, y) + d = d + 4 * x + 6; + } else { + // 中点在圆外或圆上,选择右下方的点 (x+1, y-1) + d = d + 4 * (x - y) + 10; + y--; + } + std::cout<< xc + x << ", " << yc + y << std::endl; + // 绘制由当前(x, y)决定的8个对称点 + plotCirclePoints(xc, yc, x, y); + } + glFlush(); // 强制执行所有OpenGL命令 +} + +// --- OpenGL 设置与回调函数 --- + +// 显示回调函数 +void display() { + glClear(GL_COLOR_BUFFER_BIT); // 清除颜色缓冲区 + + glColor3f(1.0, 0.0, 0.0); // 设置绘制颜色为红色 + glPointSize(2.0f); // 设置点的大小 + + // 调用中点画圆算法 + midpointCircle(50, 50, 30); +} + +// 初始化函数 +void init() { + glClearColor(0.0, 0.0, 0.0, 1.0); // 设置背景颜色为黑色 + glMatrixMode(GL_PROJECTION); // 设置投影矩阵 + gluOrtho2D(0.0, 500.0, 0.0, 500.0); // 定义二维正交投影,窗口坐标范围 (0,0) 到 (500,500) +} + +// --- 主函数 --- +int main(int argc, char** argv) { + glutInit(&argc, argv); // 初始化 GLUT + glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); // 使用单缓冲和RGB颜色模型 + glutInitWindowSize(500, 500); // 设置窗口大小 + glutInitWindowPosition(100, 100); // 设置窗口位置 + glutCreateWindow("Midpoint Circle Algorithm"); // 创建窗口并设置标题 + + init(); // 调用初始化函数 + glutDisplayFunc(display); // 注册显示回调函数 + glutMainLoop(); // 进入 GLUT 事件处理主循环 + + return 0; +} \ No newline at end of file diff --git a/lab1/3.exe b/lab1/3.exe new file mode 100644 index 0000000000000000000000000000000000000000..31505c0d688b30e631f32ef94900b1d3d4d4e5c3 GIT binary patch literal 68149 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