- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1558.计算机图形学实验报告推荐
计算机图形学实验报告
学 院
班 级
学 号
学生姓名
指导教师 |k|≤1,则取xinc =±1, yinc =±k, yi+1 = yi ±k ;
若 |k|1,则取yinc =±1, xinc =±1/k, yi+1 = yi ±1/k
(2)、源程序
#include stdio.h
#include math.h
#include graphics.h
int ADDline(int k,int x1,int y1,int x2,int color)
{
int curx,cury,k1;
curx = x1;
cury = y1;
k1 = k;
k1 = abs(k1);
if (k1 = 1)
{
while(curx!=x2)
{
curx +=1;
cury +=k;
putpixel(curx,cury,color);
}
}
else
{
while(curx!=x2)
{
cury +=1;
curx +=1/k;
putpixel(curx,cury,color);
}
}
return(0);
}
main()
{
int x1,y1,x2,k;
int color = 10;
int gdriver=DETECT,gmode;
detectgraph(gdriver,gmode);
initgraph(gdriver,gmode,);
printf(please input begin:);
scanf(%d%d,x1,y1);
printf(/nplease input end:);
scanf(%d%d,x2,k);
ADDline(k,320+x1,240+y1,320+x2,color);
getch();
cleardevice();
closegraph();
}
(3)、运行结果
(二)、Bresenham直线生成算法
(1)、算法
1.Bresenham算法画直线:由Bresenham算法的基本原理是每次在最大位移方向上面走一步,而另一个方向上是走步还是不走步取决于误差项的判别。而在误差项的判别是利用中点来判断的,是否走一步,取决于中点的位置,若如果中点在直线上部,则不需要走一步,如果中点在直线下部,则要走一步。其绘图过程为:
(1)输入直线的两端点P0(x0,y0)和P1(x1,y1)。
(2)计算初始值△x, △y,d=△x-2△y,x=x0,y=y0。
(3)绘制点(x,y),判断d的符号。若d0,则(x,y)更新为(x+1,y+1),d更新为d+2△x-2△y;否则(x,y)更新为(x+1,y),d更新为d-2△y.
(4)当直线未画完时,重复步骤(3),否则结束。
(2)、源程序
#include stdio.h
#include graphics.h
#include math.h
int Bres_Line(int x1,int y1,int x2,int y2,int color)
{
int oldcolor,iTag;
int dx,dy,tx,ty,inc1,inc2,curx,cury,d;
putpixel(x1,y1,color);
if (x1==x2 y1==y2)
{
return(1);
}
iTag=0;
dx = abs(x2-x1);
dy = abs(y2-y1);
if(dxdy)
{
iTag =1;
iSwap(x1,y1);
iSwap(x2,y2);
iSwap(dx,dy);
}
tx=(x2-x1)0?1:-1;
ty=(y2-y1)0?1:-1;
curx = x1;
cury = y1;
inc1 = 2*dy;
inc2 = 2*(dy-dx);
d=inc1-dx;
while(curx!=x2)
{
if (d0)
{
d+=inc1;
}
else
{
cury+=ty;
d+=inc2;
}
if(iTag)
putpixel(cury,curx,color);
else
putpixe
文档评论(0)