- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机图形学实验大纲及实验指导-演示
PAGE
PAGE 70
六《计算机图形学》
实验课程教学目的与要求:
掌握计算机图形的生成技术和生成各种平面图形和简单立体图形的基本算法,掌握图形填充、裁剪、图形变换及图形消隐等计算机图形处理的基本方法,初步掌握用C语言编写基本图形生成和处理程序的方法,为后续的课程奠定良好的基础。
实验1:Bresenham算法的应用
一、所需主要仪器及环境:
每人微机一台,安装Turbo c 2.0 或者VC++
二、实验目的和要求:
通过本次实验要求学生掌握Bresenham算法的基本原理和算法设计,并初步熟悉C/C++进行图形编程的方法。
三、实验主要内容:
实现绘制各种情况直线的Bresenham算法,并将实现的算法应用于任意多边形的绘制,要求多边形的顶点由键盘输入或鼠标拾取,绘制的多边形顶点要准确,图形应该封闭。
要求画出算法实现的程序流程图,使用C或者VC++实现算法,并演示。
四、参考实验步骤:
分析各种情况下直线绘制的方法,确定直线绘制的算法流程
实现任意情况下的直线绘制算法,并测试该算法
上述算法测试成功后,考虑使用上述算法按次序连接多边形的顶点来绘制多边形。
实例程序(这里只给出绘制个方向直线的中点Bresenham算法的参考代码,此代码为VC环境下使用,若要在C环境下使用,则需将程序中使用pDC-SetPixel()绘制点的函数调用改为putpixel(),注意大小写)
void Bresenhamline(int x1, int y1, int x2, int y2)
{ //对于所有直线均按照从左至右的方向绘制
if(x1x2){
int tempx,tempy;
tempx=x1;x1=x2;x2=tempx;
tempy=y1;y1=y2;y2=tempy;
}
//根据斜率的情况不同而绘制
if(y1==y2){//斜率为0的情况
for(x=x1;x=x2;x++)
pDC-SetPixel(x,y1,2);
}
else if(x1==x2){//直线为垂直的情况
if(y1y2){ //使直线按从下往上画
int tempy=y1;
y1=y2;y2=tempy;
}
for(y=y1;y=y2;y++)
pDC-SetPixel(x1,y,2);
}
else{
dy=y2-y1;
dx=x2-x1;
if(abs(dy)==abs(dx)){////斜率为1或-1时
x=x1;y=y1;
if(dy0){//斜率为1
for(;y=y2;y--){
x++;
pDC-SetPixel(x,y,2);
}
}//斜率为1
else{//斜率为-1
for(;y=y2;y++){
x++;
pDC-SetPixel(x,y,2);
}
}//斜率为-1
}
else if(abs(dy)abs(dx)){//斜率的绝对值小于1时
if(dy0dx0){//斜率为正时
right=-2*dy;
rightleft=2*dx-2*dy;
d=dx-2*dy;
x=x1;y=y1;
while(x=x2){
pDC-SetPixel(x,y,2);
x++;
if(d0){
y++;
d=d+rightleft;
}else{
d=d+right;
}
}
}//斜率为正时
else {//斜率为负时
right=2*dy;
rightleft=2*dy-2*dx;
d=2*dy-dx;
x=x1;y=y1;
while(x=x2){
pDC-SetPixel(x,y,2);
x++;
if(d0){
y++;
d=d+rightleft;
}else{
d=d+right;
}
}
}//斜率为负时
}//斜率的绝对值小于1时
else{ //斜率的绝对值大于1时
if(dy0dx0){ //斜率为正时
right=2*dx;
rightleft=2*dx-2*dy;
d=2*dx-dy;
x=x1;y=y1;
while(y=y2){
pDC-SetPixel(x,y,2);
y++;
if(d=0){
x++;
文档评论(0)