计算机图形学实验全Word文档格式.docx

上传人:b****5 文档编号:20956194 上传时间:2023-01-26 格式:DOCX 页数:24 大小:150.88KB
下载 相关 举报
计算机图形学实验全Word文档格式.docx_第1页
第1页 / 共24页
计算机图形学实验全Word文档格式.docx_第2页
第2页 / 共24页
计算机图形学实验全Word文档格式.docx_第3页
第3页 / 共24页
计算机图形学实验全Word文档格式.docx_第4页
第4页 / 共24页
计算机图形学实验全Word文档格式.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

计算机图形学实验全Word文档格式.docx

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

计算机图形学实验全Word文档格式.docx

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

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

for(k=0;

k<

=epsl;

k++)

{

putpixel((int)(x+0.5),(int)(y+0.5),4);

x+=xIncre;

y+=yIncre;

}

}

main(){

intgdriver,gmode;

gdriver=DETECT;

initgraph(&

gdriver,&

gmode,"

C:

\\TC20\\BGI"

);

DDALine(0,0,35,26,4);

getch();

closegraph();

Bresenham:

#include<

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

intx,y,dx,dy,e;

e=-dx;

x=x0;

y=y0;

while(x<

=x1){

putpixel(x,y,color);

x++;

e=e+2*dy;

if(e>

0){

y++;

e=e-2*dx;

main(){

initgraph(&

c:

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

getch();

closegraph();

实验2圆和椭圆的绘制

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

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

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

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

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

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

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

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

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

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

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

分析与思考

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

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

圆:

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;

=y){

CirclePoint(x,y,color);

if(d<

0)d+=2*x+3;

else{

d+=2*(x-y)+5;

y--;

}

x++;

main()

\\tc20\\bgi"

);

MidBresenhamCircle(50,6);

实验截图:

椭圆:

#include"

graphics.h"

voidMidBresenhamEllipse(inta,intb,intcolor)

intx,y;

floatd1,d2;

y=b;

d1=b*b+a*a*(-b+0.5);

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

while(b*b*(x+1)<

a*a*(y-0.5)){

if(d1<

=0){

d1+=b*b*(2*x+3);

}

d1+=b*b*(2*x+3)+a*a*(-2*y+2);

y--;

d2=b*b*(x+0.5)*(x+0.5)+a*a*(y-1)*(y-1)-a*a*b*b;

while(y>

0){

if(d2<

=0){

d2+=b*b*(2*x+2)+a*a*(-2*y+3);

x++;

y--;

d2+=a*a*(-2*y+3);

}

}

MidBresenhamEllipse(8,6,2);

实验3图形填充

4、通过实验,进一步理解和掌握图形填充常用算法;

5、掌握以上算法进行填充图形的基本过程;

6、通过编程,会在TC环境下完成图形填充。

任意画一个多边形,并用边填充算法进行填充。

(多边形的顶点坐标存放在数组中,坐标值由键盘输入)

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

stdio.h>

conio.h>

#defineMP100

stdlib.h>

#definefalse0

voidedge_mark(intarr[][2],intvalue,intpolydeflen)

intby,x,y,ax,ay;

inti,j;

floatk;

by=arr[polydeflen-1][1];

for(i=0;

i<

polydeflen;

i++)

if(i==polydeflen-1)

{

ax=arr[0][0];

ay=arr[0][1];

else

ax=arr[i+1][0];

ay=arr[i+1][1];

x=arr[i][0];

y=arr[i][1];

if((y-ay)!

=0)

k=(ax-x)/(float)(y-ay);

if((y-by)*(ay-y)>

putpixel(x,y,value);

getch();

if(ay<

y)

for(j=y-1;

j>

ay;

j--)

putpixel(x+(int)((y-j)*k),j,value);

elsefor(j=y+1;

j<

j++)

putpixel(x-(int)((j-y)*k),j,value);

by=y;

voidedge_mark_fill(intar[][2],intvalue,intpolydeflen)

inti,x,y,inside;

intmin,max;

inside=false;

min=ar[0][1];

max=ar[0][1];

edge_mark(ar,value,polydeflen);

for(i=1;

if(ar[i][1]>

max)

max=ar[i][1];

if(ar[i][1]<

min)

min=ar[i][1];

for(y=min;

y<

=max;

y++)

for(x=0;

x<

=640;

x++)

if(getpixel(x,y)==value)

inside=!

(inside);

if(inside!

=false)

putpixel(x,y,value);

elseputpixel(x,y,0);

if(getch()==17)

exit

(1);

voidmain()

{

chart[100];

intpolydef[MP][2];

inti,j,gdriver,gmode,polydeflen,value;

gdriver=DETECT;

gdriver,&

gmode,"

printf("

pleaseinputthenumberofedges:

\n"

scanf("

%d"

&

polydeflen);

pleaseinputthecolor:

value);

pleaseinputthe(x,y):

i++)

for(j=0;

2;

j++)

scanf("

polydef[i][j]);

pleasepressthespacekey!

"

edge_mark_fill(polydef,value,polydeflen);

for(i=0;

sprintf(t,"

(%d,%d)"

polydef[i][0],polydef[i][1]);

outtextxy(polydef[i][0],polydef[i][1],t);

getch();

closegraph();

实验4二维图形几何变换

1、通过实验,进一步理解和掌握二维图形几何变换算法;

2、掌握以上算法进行二维图形几何变换基本过程;

3、通过编程,会在TC环境下完成二维图形几何变换过程。

任意画一个平面图形,

(1)按比例缩小或放大.缩放比例由用户定义,缩放的参考点由用户确定;

(2)旋转.由键盘输入旋转角度和旋转中心。

stdio.h"

conio.h"

#include"

math.h"

structpoint

intx;

inty;

}triangle[3];

voidini()

{triangle[0].x=30;

triangle[0].y=30;

triangle[1].x=30;

triangle[1].y=120;

triangle[2].x=120;

triangle[2].y=70;

setcolor(RED);

line(triangle[0].x,triangle[0].y,triangle[1].x,triangle[1].y);

line(triangle[0].x,triangle[0].y,triangle[2].x,triangle[2].y);

line(triangle[1].x,triangle[1].y,triangle[2].x,triangle[2].y);

voidzoom(floatsx,floatsy)

intxx[3];

intyy[3];

inti;

3;

xx[i]=(triangle[i].x-triangle[0].x)*sx+triangle[0].x;

yy[i]=(triangle[i].y-triangle[0].y)*sy+triangle[0].y;

line(xx[i]+120,yy[i],xx[(i+1)%3]+120,yy[(i+1)%3]);

setcolor(5);

voidturn(intx,inty,inta)

i++){

xx[i]=(triangle[i].x-x)*cos(a)-(triangle[i].y-y)*sin(a)+x;

yy[i]=(triangle[i].x-x)*sin(a)+(triangle[i].y-y)*cos(a)+y;

line(xx[i],yy[i],xx[(i+1)%3],yy[(i+1)%3]);

intgdriver=DETECT,gmode;

ini();

setcolor(0);

turn(120,70,-1);

zoom(0.5,0.5);

zoom(3,3);

实验5二维图形裁剪

1、通过实验,进一步理解和掌握二维图形裁剪常用算法;

2、掌握以上算法进行二维图形裁剪的基本过程;

3、通过编程,会在TC环境下完成二维图形裁剪过程。

生成若干条直线段,由用户确定一个矩形裁剪窗口的位置和大小,保留窗口里的图形,抹去其余部分(使用Cohen-Sutherland算法)。

(完成作业的同学可以用line、setviewport函数再做该题)。

#defineLEFT1

#defineRIGHT2

#defineBOTTOM4

#defineTOP8

intx1=60,y1=60,x2=200,y2=200,x3=200,y3=300,xl=30,xr=100,yb=100,yt=20;

intencode(intx,inty,int*code)

intc;

c=0;

if(x<

xl)

c=LEFT;

elseif(x>

xr)

c=RIGHT;

if(y>

yb)

c=BOTTOM;

elseif(y<

yt)

c=TOP;

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

*code=c;

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

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

encode(x1,y1,&

code1);

encode(x2,y2,&

code2);

encode(x3,y3,&

code3);

while(code1!

=0||code2!

=0)

if(code1&

code2!

return;

code=code1;

if(code1==0)

code=code2;

if((LEFT&

code)!

x=x1;

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

elseif((RIGHT&

x=xr;

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

elseif((BOTTOM&

y=yb;

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

elseif((TOP&

y=yt;

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

if(code==code1)

{x1=x;

y1=y;

encode(x,y,&

{x2=x;

y2=y;

while(code1!

=0||code3!

code3!

code=code3;

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

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

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

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

{x3=x;

y3=y;

while(code3!

if(code3&

if(code3==0)

x=x3;

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

elseif

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

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1