画直线基本思想:
假设直线的斜率0<k<1,直线在第一象限,Bresenham算法的过程如下:
1.画起点(x0, y0).
2.准备画下一个点,X坐标加1,判断如果达到终点,则完成。否则找下一个点,由图可知要画的点要么为当前点的右邻接点,要么是当前点的右上邻接点。
2.1.如果线段ax+by+c=0与x=x1+1的交点y坐标大于(y+*y+1))/2则选右上那个点
2.2.否则选右下那个点。
3.画点
4.跳回第2步
5.结束
具体的思路网上很多更详细的解释,在这里我主要提供的是基于鼠标操作的画直线程序:
详细可以参考:http://www.cnblogs.com/gamesky/archive/2012/08/21/2648623.html
代码如下:
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<gl\glut.h>
using namespace std;
int m0,m1,n0,n1;//声明全局变量,起始坐标和终止坐标
int winwidth=1024,winheight=720;//窗口长宽
void DrawLine();
void MidpointLine(int,int,int,int);
void BresenhamLine(int ,int,int,int);
void DrawLine(){
// MidpointLine(m0,n0,m1,n1);//中心划线法
BresenhamLine(m0,n0,m1,n1);//BresenhamLine算法
}
/*中心画线法*/
void MidpointLine (int x0,