课程名称:计算机图形学指导教师:罗晓辉
上机实践名称:基本图形(直线)生成算法
年级:2008
姓名:孔广波
学号:312008*********
上机实践成绩:
上机实践日期:2011-4-10 实验一: 直线生成算法
上机实践报告
一、实验目的
理解直线生成的基本原理,掌握儿种常见的直线生成算法,利用Microsoft Visual C++6.0实现直线生成的DDA算法。
二、实验内容:
1)了解直线的生成原理。
2)掌握儿种基本的直线生成算法:DDA画线法、Bresenham画线法、中点画线法。
3)利用Microsoft Visual C++6.0实现直线生成的DDA算法,在屏幕上任意生成一条直线。
三、实验步骤:
1)预习教材关于直线的生成原理。
2)仿照教材关于直线生成的DDA算法,使用Microsoft Visual C++6.0实现该算法。
3)调试、编译、运行程序。
四、实验分析、源程序和结果:
(1.1)中点算法分析:
中点画线算法原理示意图
直线斜率:k属于[0, 1]
线段的隐式方程:F(x,y) = ax + by + c = 0
((x0 , y0), ( xl , yl )为两端点,式中a = yO - yl , b = xl - xO , c = xO * yl - xl * yO)
直线上方的点:F(x , y) > 0
直线下方的点:F ( x , y ) < 0
构造判别式:d = F(M) = F(Xp+l,Yp + 0.5)
由d>0, V0 可判定下一个象素,d 的初始值:d0 = F( X0 + 1 , Y0 + 0.5 ) = F( X0 , Y0 ) + a + 0.5b 因(X0, YO)在直线上,F(X0 , YO ) = 0,所以,dO = a + 0.5b
(1.2)具体实现代码:
void CGView::Line_DDA(long plxjong ply,long p2x,long p2y,CDC *pDC)〃画直线算法实现
(
int a,b,del 1 ,del2,d,x,y;
b=p2x-plx;
a=ply-p2y;
d=2*a+b;
dell=2*a;
del2=2*(a+b);
x=plx;
y=piy;
pDC->SetFixel(x,y,mJPenColor);
while(x<p2x)
(
if(d<0)
{
x++;y++;
d+=del2;
}
else
{
x++;
d+=dell;
}
pDC->SetPixel(x,y-2,m_lPenColor);
pDC->SetPixel(x,y-1 ,m_lPenColor);
pDC->SetPixeI(x,y,m_lPenColor);
pDC->SetPixel(x,y+1 ,m_IPenColor);
pDC->SetPixel(x,y,m_lPenColor);
(1.3)实验结果:
S3无标题-G
Jo
文件建)编辑但) E )筌图查者W )精
助冬)
Ax = xl - xO. Ay = yl - yO
图表1中点算法实验结果 (2.DDDA 算法分析:
条件:
八待扫描转换的直线段:Fo (xO,yO ),R (xl,yl ) 斜率:
〃? = △),/* 直线方程:y = m^x+B
直接求交算法: 划分区
间:[xO,xl]: 计算纵坐标: 月=m * x, + B
取整:{■,*到{(耳,光兀
月,=round 、) = (int )(月 + 0.5) (2.2)具体实现代码:
void CGView::Line_DDA(long plx,long ply,long p2x,long p2y,CDC *pDC) (
long x;
float dx,dy,y,k;
dx=p2x-plx;
dy=p2y-ply;
k=dy/dx;
y=piy ;
for(x=pl x;x<=p2x;x++)
pDC->SetPixel(xJong(y-1.5),m_lPenColor);
pDC->SetPixel(x,long(y-0.5),m_IPenColor);
pDC->SetPixel(x,long(y+1.5),m_lPenColor);
pDC->SetPixel(x,long(y+0.5),m_lPenColor);
pDC->SetPixel(xJong(y+1.5),m_lPenColor);
y=y+k;
}
(2.3)实验结果:
图表2 DDA算法结果
五、总结:
此次上机采用了两种算法:DDA算法,中点算法,都实现了直线的绘制。
通过上机,使得我们对这两种算法的原理更加的了解,有利于编程。
这次上机也遇到了不少的细节问题,当时一时半会没有看出来,感谢老师的帮助,才使得任务顺利的完成。
六、附录
参考书籍:
陈传波,陆枫主编,《计算机图形学基础》,电子工业出版社,2002年3月;
孙家广等编,《计算机图形学》(第三版),清华大学出版社,1998年9月;
孙立镌编著,《计算机图形学》,哈尔滨工业大学出版社,2000年5月;。