小言_互联网的博客

中点画直线算法

236人阅读  评论(0)

中点画直线算法是计算机图形学中绘制直线的一种经典算法。

该算法的迭代公式:

完整代码:

实现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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场