From 28463e2c427e486989cddb26a4c44faf5405675a Mon Sep 17 00:00:00 2001 From: biss Date: Sun, 5 Apr 2026 20:34:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E9=AA=8C=E4=B8=80=201.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lab1/2.cpp | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++ lab1/2.exe | Bin 0 -> 66836 bytes 2 files changed, 80 insertions(+) create mode 100644 lab1/2.cpp create mode 100644 lab1/2.exe diff --git a/lab1/2.cpp b/lab1/2.cpp new file mode 100644 index 0000000..01f7c91 --- /dev/null +++ b/lab1/2.cpp @@ -0,0 +1,80 @@ +#include +#include +#include + +// 窗口宽度和高度 +const int WIDTH = 640; +const int HEIGHT = 480; + +void drawDDALine(int x1, int y1, int x2, int y2) { + float x = x1; + float y = y1; + + // 计算差值 + int dx = x2 - x1; + int dy = y2 - y1; + + // 确定步数,取 dx 和 dy 中绝对值较大的那个 + int steps = std::abs(dx) > std::abs(dy) ? std::abs(dx) : std::abs(dy); + + // 计算每一步的增量 + float xIncrement = (float)dx / steps; + float yIncrement = (float)dy / steps; + + // 开始绘制点 + glBegin(GL_POINTS); + glVertex2i((int)round(x), (int)round(y)); // 绘制起点 + + for (int k = 0; k < steps; k++) { + x += xIncrement; + y += yIncrement; + // 将浮点坐标四舍五入转换为整数像素坐标 + std::cout << (int)round(x) << ", " << (int)round(y)<<"\n"; + glVertex2i((int)round(x), (int)round(y)); + } + glEnd(); +} + +// 显示回调函数 +void display() { + drawDDALine(0, 0, 50, 20); + glFlush(); +} + +// 初始化 OpenGL 设置 +void init() { + // 设置背景颜色为白色 + glClearColor(1.0f, 1.0f, 1.0f, 1.0f); + + // 设置投影矩阵为 2D 正交投影 + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + // 定义可视区域,左下角(0,0),右上角(WIDTH, HEIGHT) + gluOrtho2D(0.0, WIDTH, 0.0, HEIGHT); +} + +int main(int argc, char** argv) { + // 初始化 GLUT + glutInit(&argc, argv); + + // 设置显示模式:单缓冲、RGB 颜色模式 + glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); + + // 设置窗口大小和位置 + glutInitWindowSize(WIDTH, HEIGHT); + glutInitWindowPosition(100, 100); + + // 创建窗口 + glutCreateWindow("DDA算法"); + + // 注册回调函数 + glutDisplayFunc(display); + + // 初始化设置 + init(); + + // 进入主循环 + glutMainLoop(); + + return 0; +} \ No newline at end of file diff --git a/lab1/2.exe b/lab1/2.exe new file mode 100644 index 0000000000000000000000000000000000000000..e6348df8bcf1aa59f7f9938ae9fed89363fbddcd GIT binary patch literal 66836 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