计算机图形学实验全.docx

上传人:b****8 文档编号:8928966 上传时间:2023-05-16 格式:DOCX 页数:8 大小:16.29KB
下载 相关 举报
计算机图形学实验全.docx_第1页
第1页 / 共8页
计算机图形学实验全.docx_第2页
第2页 / 共8页
计算机图形学实验全.docx_第3页
第3页 / 共8页
计算机图形学实验全.docx_第4页
第4页 / 共8页
计算机图形学实验全.docx_第5页
第5页 / 共8页
计算机图形学实验全.docx_第6页
第6页 / 共8页
计算机图形学实验全.docx_第7页
第7页 / 共8页
计算机图形学实验全.docx_第8页
第8页 / 共8页
亲,该文档总共8页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

计算机图形学实验全.docx

《计算机图形学实验全.docx》由会员分享,可在线阅读,更多相关《计算机图形学实验全.docx(8页珍藏版)》请在冰点文库上搜索。

计算机图形学实验全.docx

计算机图形学实验全

计算机图形学实验(全)

实验1直线的绘制

实验目的

1、通过实验,进一步理解和掌握DDA和Bresenham算法;

2、掌握以上算法生成直线段的基本过程;

3、通过编程,会在TC环境下完成用DDA或中点算法实现直线段的绘制。

实验环境

计算机、TurboC或其他C语言程序设计环境

实验学时

2学时,必做实验。

实验内容

用DDA算法或Besenham算法实现斜率k在0和1之间的直线段的绘制。

实验步骤

1、算法、原理清晰,有详细的设计步骤;

2、依据算法、步骤或程序流程图,用C语言编写源程序;

3、编辑源程序并进行调试;

4、进行运行测试,并结合情况进行调整;

5、对运行结果进行保存与分析;

6、把源程序以文件的形式提交;

7、按格式书写实验报告。

实验代码:

DDA:

#includeabs(dy))

epsl=abs(dx);

else

epsl=abs(dy);

xIncre=(float)dx/(float)epsl;

yIncre=(float)dy/(float)epsl;

for(k=0;k

#include

voidBresenhamLine(intx0,inty0,intx1,inty1,intcolor){

intx,y,dx,dy,e;

dx=x1-x0;

dy=y1-y0;

e=-dx;x=x0;y=y0;

while(x0){

y++;

e=e-2*dx;

}

}

}

main(){

intgdriver,gmode;

gdriver=DETECT;

initgraph(

BresenhamLine(0,0,120,200,5);

getch();

closegraph();

}

实验2圆和椭圆的绘制

实验目的

1、通过实验,进一步理解和掌握中点算法;

2、掌握以上算法生成椭圆或圆的基本过程;

3、通过编程,会在TC环境下完成用中点算法实现椭圆或圆的绘制。

实验环境

计算机、TurboC或其他C语言程序设计环境

实验学时

2学时,必做实验。

实验内容

用中点(Besenham)算法实现椭圆或圆的绘制。

实验步骤

1.算法、原理清晰,有详细的设计步骤;

2.依据算法、步骤或程序流程图,用C语言编写源程序;

3.编辑源程序并进行调试;

4.进行运行测试,并结合情况进行调整;

5.对运行结果进行保存与分析;

6.打印源程序或把源程序以文件的形式提交;

7.按格式书写实验报告。

分析与思考

1.为何在程序运行时,有的椭圆或圆仅在屏幕左上角显示了一部分?

2.用中点算法生成的椭圆,为何在半径较大时,图形的失真严重?

实验代码:

圆:

#include

#include

voidCirclePoint(intx,inty,intcolor)

{

putpixel(x+100,y+100,color);

putpixel(-x+100,y+100,color);

putpixel(x+100,-y+100,color);

putpixel(-x+100,-y+100,color);

putpixel(y+100,x+100,color);

putpixel(y+100,-x+100,color);

putpixel(-y+100,x+100,color);

putpixel(-y+100,-x+100,color);

}

voidMidBresenhamCircle(intr,intcolor)

{

intx,y,d;

x=0;y=r;d=1-r;

while(x=0)

putpixel(x,y,value);

getch();

if(aymax)

max=ar[i][1];

if(ar[i][1]xr)

c=RIGHT;

if(y>yb)

c=BOTTOM;

elseif(y

c=TOP;

if(x==xl||x==xr||y==yt||y==yb)

c=0;

*code=c;

}

C_S_LINECLIP(x1,y1,x2,y2,x3,y3,xl,xr,yb,yt){

intx,y,code1,code2,code3,code;

encode(x1,y1,

encode(x2,y2,

encode(x3,y3,

while(code1!

=0||code2!

=0)

{

if(code1

code=code1;

if(code1==0)

code=code2;

if((LEFT

y=y1+(long)(y2-y1)*(xl-x1)/(x2-x1);

}

elseif((RIGHT

y=y1+(long)(y2-y1)*(xr-x1/x2-x1);

}

elseif((BOTTOM

x=x1+(long)(x2-x1)*(yb-y1)/(y2-y1);

}

elseif((TOP

x=x1+(long)(x2-x1)*(yt-y1)/(y2-y1);

if(code==code1)

{x1=x;

y1=y;

encode(x,y,

}

else

{x2=x;

y2=y;

encode(x,y,

}

}

while(code1!

=0||code3!

=0)

{

if(code1

code=code1;

if(code1==0)

code=code3;

if((LEFT

y=y1+(long)(y3-y1)*(xl-x1)/(x3-x1);

}

elseif((RIGHT

y=y1+(long)(y3-y1)*(xr-x1/x3-x1);

}

elseif((BOTTOM

x=x1+(long)(x3-x1)*(yb-y1)/(y3-y1);

}

elseif((TOP

x=x1+(long)(x3-x1)*(yt-y1)/(y3-y1);

}

if(code==code1)

{x1=x;

y1=y;

encode(x,y,

}

{x3=x;

y3=y;

encode(x,y,

}

}

while(code3!

=0||code2!

=0)

{

if(code3

code=code3;

if(code3==0)

code=code2;

if((LEFT

y=y3+(long)(y2-y3)*(xl-x3)/(x2-x3);

}

elseif((RIGHT

y=y1+(long)(y2-y3)*(xr-x3/x2-x3);

}

elseif((BOTTOM

x=x1+(long)(x2-x1)*(yb-y3)/(y2-y3);

}

elseif((TOP

x=x1+(long)(x2-x1)*(yt-y3)/(y2-y3);

}

if(code==code3)

{x1=x;

y1=y;

encode(x,y,

}

else

{x2=x;

y2=y;

encode(x,y,

}

}

setcolor(RED);

line(x1,y1,x2,y2);

line(x1,y1,x3,y3);

line(x2,y2,x3,y3);

return;

}

voidmain()

{

intgraphdriver=DETECT,graphmode;

initgraph(rectangle(xl,yt,xr,yb);

line(x1,y1,x2,y2);

line(x1,y1,x3,y3);

line(x2,y2,x3,y3);

C_S_LINECLIP(x1,y1,x2,y2,x3,y3,xl,xr,yb,yt);

getch();

closegraph();

}

实验截图:

实验6曲线生成算法的实现

实验目的

了解曲线生成的原理,掌握几种常见的曲线生成算法,利用TurboC实现Bezier曲线的生成算法。

实验环境

计算机、TurboC或其他C语言程序设计环境

实验学时

2学时,必做实验。

实验内容

(1)了解曲线生成的原理;

(2)掌握曲线生成算法(Bezier曲线、B样条曲线);

(3)利用TurboC实现Bezier曲线的生成算法,在屏幕上任意绘制一条三次Bezier曲线。

实验步骤

1、算法、原理清晰,有详细的设计步骤;

2、依据算法、步骤或程序流程图,用C语言编写源程序;

3、编辑源程序并进行调试;

4、进行运行测试,并结合情况进行调整;

5、对运行结果进行保存与分析;

6、打印源程序或把源程序以文件的形式提交;

7、按格式书写实验报告。

实验代码:

#include"graphics.h"

#include"malloc.h"

#include"math.h"

#defineMULTIPLE7

#defineROW4

structnode{

floatx,y;

};

voiddraw_polygon(structnodea[],intoriginx,intoriginy)

{

intn;

for(n=0;n

if(n==0)moveto(originx+a[0].x,originy-a[0].y);

lineto(originx+a[n].x,originy-a[n].y);

}

}

structnodedecasteljau(structnodep[],intn,floatu)

{

inti,r;

structnodepoint,q[20];

for(i=0;i

q[i]=p[i];

for(r=1;r

for(i=0;i

q[i].x=(1.0-u)*q[i].x+u*q[i+1].x;

q[i].y=(1.0-u)*q[i].y+u*q[i+1].y;

}

returnq[0];

}

voiddraw_bezier_curve(structnodep[],intn,intx0,inty0){

inti,x,y;

floatu,delta;

structnodepoint;

delta=1.0/(float)(MULTIPLE*ROW);

for(i=0,u=0;u<=1.0;i++,u=u+delta){

point=decasteljau(p,n,u);

if(i==0)moveto(x0+point.x,y0-point.y);

lineto(x0+point.x,y0-point.y);

}

}

main()

{

intgdriver=DETECT,gmode;

intnumber,n,originx,originy;

structnodea[]={{120,0},{45,0},{0,45},{0,120}};

initgraph(

originx=getmaxx()/2;

originy=getmaxy()/2;

setcolor(BLUE);

draw_polygon(a,originx,originy);

setcolor(RED);

draw_bezier_curve(a,ROW,originx,originy);

getch();

closegraph();}

实验截图:

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2