计算机图形学学习记录(一)

您所在的位置:网站首页 dda直线扫描算法 计算机图形学学习记录(一)

计算机图形学学习记录(一)

2023-08-12 03:04| 来源: 网络整理| 查看: 265

数值微分 DDA(Digital Differential Analyzer)画线算法

首先在这里给不想读大篇幅的朋友,直接写上DDA算法的核心实现代码:

这里写图片描述 上面这个只针对斜率绝对值小于1的。

// 实现DDA算法。 // author: 赵天宇 // date : 2018/03/09 void DDADrawLine::LineDDA(int x0, int y0, int x1, int y1) { float x = 0.0; float y = 0.0; float m = 0.0; // 添加增量,实现增量思想 float dx = x1 - x0; float dy = y1 - y0; if (dx != 0) { m = dy / dx; if (m = -1) { y = y0; for (x = x0; x 1 || m < -1) { m = 1 / m; x = x0; for (y = y0; y abs(dy)) { steps = abs(dx); } else { steps = abs(dy); } delta_x = (GLfloat)dx / (GLfloat)steps; delta_y = (GLfloat)dy / (GLfloat)steps; x = xa; y = ya; // glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_POINTS); glVertex3f(x, y, 0); for (int i = 1; i xs >> ys >> xe >> ye; glutInitWindowPosition(50, 100); glutInitWindowSize(500, 500); glutCreateWindow("DDA画线算法"); glClearColor(1.0, 1.0, 1.0, 1.0); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0, 500, 0.0, 500.0); glutDisplayFunc(lineSegement); glutMainLoop(); } // 实现DDA算法。 // author: 赵天宇 // date : 2018/03/09 void DDADrawLine::LineDDA(int x0, int y0, int x1, int y1) { float x = 0.0; float y = 0.0; float m = 0.0; // 添加增量,实现增量思想 float dx = x1 - x0; float dy = y1 - y0; if (dx != 0) { m = dy / dx; if (m = -1) { y = y0; for (x = x0; x 1 || m < -1) { m = 1 / m; x = x0; for (y = y0; y abs(dy)) { steps = abs(dx); } else { steps = abs(dy); } delta_x = (GLfloat)dx / (GLfloat)steps; delta_y = (GLfloat)dy / (GLfloat)steps; x = xa; y = ya; // glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_POINTS); glVertex3f(x, y, 0); for (int i = 1; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3