2、0,Y0),(X1,Y1),直线将二维空间划分为三个区域:直线方程:F(x,y)=ax+by+c=0其中:a=-(y1-y0),b=(x1-x0),c=-B(x1-x0)如F(x,y)=0,则(x,y)在直线上如F(x,y)<0,则(x,y)在直线下方如F(x,y)>0,则(x,y)在直线上方yxF(x,y)=0F(x,y)>0F(x,y)<0(x1,y1)(x0,y0)因此,可将中点M的坐标(Xp+1,Yp+0.5)代入直线方程,并判断其符号即可确定象素点的选取。定义决策变量:d=F(xi+1,yi+0.5)=a(xi+1)+b(yi+0.5)+c如果d
3、>0,则M在理想直线上方,选正右方P2点;如果d<0,则M在理想直线下方,选右上方P1点;如果d=0,则M在理想直线上,选P1/P2点。由于d是xi和yi的线性函数,可采用增量计算提高运算效率。1.如由pi点确定在是正右方P2点(d>0).,则新的中点M仅在x方向加1,新的d值为:dnew=F(xi+2,yi+0.5)=a(xi+2)+b(yi+0.5)+c而dold=F(xi+1,yi+0.5)=a(xi+1)+b(yi+0.5)+cdnew=dold+a=dold-dy2.如由pi点确定是右上方P1点(d<0),则新的中点M在x和y方向都增加1,新的d
4、值为dnew=F(xi+2,yi+1.5)=a(xi+2)+b(yi+1.5)+c而dold=F(xi+1,yi+0.5)=a(xi+1)+b(yi+0.5)+cdnew=dold+a+b=dold-dy+dx在每一步中,根据前一次第二迭中计算出的d值的符号,在正右方和右上方的两个点中进行选择。d的初始值:d0=F(x0+1,y0+0.5)=F(x0,y0)+a+b/2=a+b/2=-dy+dx/2F(x0,y0)=0,(x0,y0)在直线上。为了消除d的分数,重新定义F(x,y)=2(ax+by+c)则每一步需要计算的dnew是简单的整数加法dy=y1-
5、y0,dx=x1-x0d0=-2dy+dxdnew=dold-2*dy,当dold>=0dnew=dold-2(dy-dx),当dold<0Bresenham画线算法算法原理:与DDA算法相似,Bresenham画线算法也要在每列象素中找到与理想直线最逼近的象素点。根据直线的斜率来确定变量在x或y方向递增一个单位。另一个方向y或x的增量为0或1,它取决于实际直线与最接近网格点位置的距离。这一距离称为误差。算法的巧妙构思,使每次只需检查误差项(增量)的符号即可。定义决策变量:d=d+k(06、1,y)(d<0.5)或(x+1,y+1)(d>=0.5)当d>1时,让d=d-1,以保证0<=d<1,d0=0令e=d-0.5(0=0)当e>0时,让e=e-1,(重新初始化误差项)由于算法只用到误差项的符号,为了改用整数以避免除法,可以作如下替换:e=2*e*dx定义决策变量e=2*e*dx,则e0=-dx,e=e+2*dy则下一点为:(x+1,y),(e<0)(x+1,y+1)(e>=0)当e>0时,让e=e-dx,(重新初始化误差项)实验环境实验条件硬件平台:
7、PC软件(推荐):Windows平台,Visualstdio2013,OpenGL实验步骤实验步骤1.掌握算法原理;2.依据算法,编写源程序并进行调试;3.对运行结果进行保存与分析;1.把源程序以文件的形式提交;2.按格式书写实验报告实验内容#include"stdafx.h"#include#include#include#includeusingnamespacestd;voidinit(){glClearColor(1.0,1.0,1.0,1.0);glMatrixMode(GL_P
8、ROJECTION);glLoadIdentity();gluOr