中点画直线算法是计算机图形学中绘制直线的一种经典算法。
该算法的迭代公式:
完整代码:
实现0<k<1的情况(k是直线的斜率)
#include<GL/glut.h>
void lineMidpoint(int x1, int y1, int x2, int y2)
{
int dx = abs(x2 - x1);
int dy = abs(y2 - y1);
int a = -dy;
int b = dx;
int d = a + 0.5*b;
int x, y;
int xEnd;
if (x1 >x2) { x = x2; y = y2; xEnd = x1; }
else { x = x1; y = y1; xEnd = x2; }
glVertex2i(x, y);
while (x < xEnd) {
x++;
if (d < 0) {
y++;
d += a + b;
}
else {
d += a;
}
glVertex2i(x, y);
}
}
void display(void) {
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0, 1.0f, 0.0f);
glBegin(GL_POINTS);
lineMidpoint(20, 20, 200, 300);
glEnd();
glFlush();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("中点画直线算法");
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, 400.0,0.0, 400.0);
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
运行结果:
如果对上面代码不清楚的,建议看一下Bresenham直线算法注释:
Bresenham直线算法
https://blog.csdn.net/qq_40573632/article/details/102306526
转载:https://blog.csdn.net/qq_40573632/article/details/102307949
查看评论