计算机图形学实验作业Word格式.docx

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

计算机图形学实验作业Word格式.docx

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

计算机图形学实验作业Word格式.docx

能显示的行数、列数及颜色与显示方式有关。

TurboC支持6种不同的文本显示方式。

2)图形模式与点坐标系

在屏幕上能显示图形的方式称为图形方式。

屏幕是由像素点组成的,通过initgraph函数的gmode参数来指定屏幕的分辨率,分辨率决定了像素点的多少。

在图形方式下,屏幕上每个像素的显示位置用点坐标系来描述。

在该坐标系中,屏幕的左上角为坐标原点O(0,0),水平向为x轴,自左向右;

垂直方向为y轴,自上向下。

如图1-1所示。

分辨率不同,水平方向和垂直方向上的点数也不一样,即其maxx、maxy的数值不同。

在TurboC中,坐标数据有两种形式给出:

一种是绝对坐标;

另一种是相对坐标。

绝对坐标的参考点是坐标的原点O(0,0),x和y的值只能取规定范围内的正整数,其坐标值在整个屏幕范围内确定。

相对坐标是相对于“当前点”的坐标,所以其参考点不是坐标系的原点,而是当前点。

要相对坐标中,x和y的取值是相对于当前点在X方向和Y方向上的增量,这个增量可以是正的,也可以是负的,所以x和y的值可以是正整数,也可以是负整数。

此外,把在一个窗口范围内确定的坐标也称为相对坐标。

(二)C语言中的基本绘图函数及其用法:

1、绘图函数

在用绘图函数作图时,有的绘图函数坐标是相对于坐标原点,用绝对坐标。

有的绘图函数用相对坐标,这时要随时注意图形的“当前点位置”,它是绘图的起始位置。

也就是说,图形总是从当前点开始画图。

画完一个图形后,有的当前点不变,仍在原来的位置;

而有时会移到新的位置。

1)直线类绘图函数

用直线类函数绘制直线图形,可以用两种坐标:

几个常用的函数:

①点的绝对定位函数moveto(x,y)

②点的相对定位函数moverel(deltayx,deltay)

它们不绘制图形,只改变当前点的位置,接着用绘图函数绘图。

③指定两个绝对点绘直线函数:

line(x1,y1,x2,y2)

该函数不改变当前点的位置。

④从当前点到指定的绝对点绘直线函数:

lineto(x,y)

该函数画线的同时,将当前点的位置移到(x,y)。

⑤从当前点到指定的相对点绘直线函数:

linerel(dx,dy)

该函数画线的同时,将当前点的位置移到(x+dx,y+dy)。

设当前坐标为(x,y)则

linerel(dx,dy)与lineto(x+dx,y+dy)等价。

⑥读取当前点的位置x,y函数分别为:

getx(void),gety(void)

⑦读取x,y轴的最大值函数分别为:

getmaxx(void),getmaxy(void)

2)多边形类绘图函数

1画矩形函数

rectangle(x1,y1,x2,y2);

2画多边形函数:

drawpoly(n,*polypoints)

其中参数,n为多边形数;

*polypoints指向一个整形数组,共有2n个整数组成,每对整数给出了一个多边形顶点(x,y)坐标。

2、图形属性的设置

图形属性的设置包括绘制该图形所用的颜色和线型。

颜色又分为背景色和前景色:

背景色指的是屏幕的颜色,即绘图时的底色;

前景是指绘图时图形线条所用的颜色。

背景色和前景色的设置,只对设置后所绘制的颜色和线型有作用,对已经绘制的图形无作用。

1)设置前景色

设置前景颜色所用的函数setcolor。

其调用格式为:

setcolor(color);

其中color为一个整型数值,代表所取的颜色。

2)设置背景色

设置背景颜色所用的函数sebktcolor。

setbkcolor(color);

3)设置线型

设置当前绘图所用的线型和线宽,用函数setlinestyle。

线型和线宽的设置仅限于对直线类图形有效。

setlinestyle(sty,pat,b);

sty:

整型值,用来定义所画直线的类型;

pat用户定义线型使用;

b整型值,用来定义定义所画直线的线宽。

在屏幕上绘制出各种简单的几何图形,要求设置不同的线形和颜色。

3、填充

填空是指用指定的模式和颜色来填空一个指定的封闭区域。

1)设置当前的填充模式和颜色

设置填充模式和颜色,用函数setfillstyle,其调用格式为:

setfillstyle(pattern,color);

2)实施填充

对于指定的一块有界的封闭区域进行填充操作,用函数floodfill,其调用格式为:

floodfill(x,y,,bcolor);

参数(x,y)指位于填充区域内任意一点的坐标,该点作为填充的起始点,参数bcolor作为填充区域的边界颜色。

如果起始点在封闭区域内,则区域内部被填充;

如果起始点在封闭区域外,则区域外部被填充。

同学们可以自行验证。

3)其它填充函数

以下几个填充函数,均须事先由setfillstyle函数指定当前的填充模式和颜色。

①绘制并填充实椭圆函数:

fillellipse(x,y,rx,ry);

②绘制并填充实椭圆扇区函数:

sector(x,y,angs,ange,rx,ry)

③绘制并填充多边形函数:

fillpoly(nps,*pxy)

4、屏幕管理

TurboC2.0提供了11个函数,用于对屏幕和视区进行管理。

1)设置视图区

在图形方式下,可用函数setviewport在屏幕上定义一个视图区。

视图区相当于一个用于绘图的窗口。

视图区的位置和大小用屏幕的绝对坐标定义,并且可把视图区设置为裁剪和不裁剪两种状态。

函数setviewport的调用格式为:

setviewport(x1,y1,x2,y2,c);

参数x1,y1:

为视图区矩形的左上角顶点坐标;

x2,y2:

为视图区矩形的右下角顶点坐标。

c为裁剪状态参数。

c=1,超出视图区的图形部分被自动裁剪掉;

c=0时,对超出部分不作裁剪处理。

应注意:

视图区建立以后,所有的图形输出坐标都是相对于当前视图区的,即视图区左上角点为坐标(0,0)点,而与视图区和图形在屏幕上的位置无关。

在默认情况下,整个屏幕为一个视图区。

2)清除视图区

清除视图区用函数clearviewport。

它的作用是清除掉当前视图区,将当前点的位置设置于屏幕左上角(0,0)点。

调用格式为:

clearviewport();

3)清屏

清屏的函数为cleardevice();

四、程序调试中的问题

在Options中directories分别把

改到TC安装路径下:

经过修改合适。

基本都是路径有错误,修改之后就合适。

五、程序运行结果或数据

1、金刚石图案

2、肾形图案

3、正方形图案

5、人在公路上行走

5、正多边形图案

六、实验收获及体会

1)可以充分运用TurboC2.0,我们对TurboC的环境更加熟悉,也对计算机图形学里涉及的函数有一个更深的理解。

2)在TurboC2.0中编写,要求的程序,并且调试错误;

3)将TurboC2.0中出现的错误,改正过来,从中了解并且知道TurboC2.0中相关程序。

4)在TurboC2.0出现的问题一一纠正,了解并且绘制出自己想要的图案,按要求绘制相关图案;

5)将TurboC2.0熟练的运用,掌握相关的技巧;

6)可以对C语言的进一步认识,熟悉掌握相关的知识;

7)对C语言初步了解,还待提高。

七、参考源程序(可附页)

1、金刚石图案的程序

#include<

math.h>

main()

{

floatt;

intx0=320,y0=240;

intn,i,j,r,x[50],y[50];

intgdriver=DETECT,gmode;

printf("

inputn(23-31)andr(100-200)\n"

);

scanf("

%d,%d"

&

n,&

r);

initgraph(&

gdriver,&

gmode,"

C:

\\tc"

cleardevice();

setbkcolor(9);

setcolor(4);

t=6.28318/n;

for(i=0;

i<

n;

i++)

{x[i]=r*cos(i*t)+x0;

y[i]=r*sin(i*t)+y0;

}

=n-2;

{for(j=i+1;

j<

=n-1;

j++)

line(x[i],y[i],x[j],y[j]);

getch();

closegraph();

2、肾形图案相关程序

#definePI3.1415926

{

intx,y,r,r1;

doublea;

intgdriver=9,gmode=2;

d:

inputradus(<

150)\n"

%d"

setbkcolor(MAGENTA);

setcolor(WHITE);

for(a=0;

a<

2*PI;

a+=PI/27)

x=r*cos(a)+320;

y=r*sin(a)+240;

r1=abs(x-320);

circle(x,y,r1);

getch();

}

3、一个正方形程序

voidmain(void)

intgdriver=DETECT,gmode,errorcode;

inti,c,x=5,y=6;

inputcolornumber:

\n"

c);

\\TC"

setbkcolor(14);

setcolor(9);

for(i=c;

c+8;

setcolor(i);

rectangle(x,y,x+140,y+104);

x=x+70;

y=y+52;

setfillstyle(1,i);

floodfill(x,y,i);

4、人在公路上行走

#include<

conio.h>

stdio.h>

stdlib.h>

dos.h>

voidt1(intx1,intx,inty)

line(0,y/2+72,x,y/2+72);

circle(x1,y/2,10);

line(x1,y/2+10,x1-5,y/2+38);

line(x1-5,y/2+38,x1+5,y/2+52);

line(x1+5,y/2+52,x1-12,y/2+65);

line(x1-5,y/2+38,x1,y/2+54);

line(x1,y/2+54,x1-8,y/2+70);

line(x1-8,y/2+10,x1-8,y/2+35);

line(x1,y/2+10,x1+1,y/2+25);

line(x1+1,y/2+25,x1+10,y/2+32);

voidt2(intx1,intx,inty)

circle(x1+40,y/2,10);

line(x1+40,y/2+10,x1+28,y/2+50);

line(x1+28,y/2+52,x1+11,y/2+47);

line(x1+30,y/2+40,x1+52,y/2+50);

line(x1+52,y/2+50,x1+42,y/2+70);

line(x1+39,y/2+11,x1+24,y/2+22);

line(x1+24,y/2+22,x1+34,y/2+32);

line(x1+39,y/2+11,x1+45,y/2+30);

line(x1+45,y/2+30,x1+58,y/2+24);

intgdriver=DETECT,gmode,errorcode;

intx,y,x1;

intbuf1[3000],buf2[4000];

initgraph(&

E:

\\TC"

x=getmaxx();

y=getmaxy();

x1=12;

while(!

kbhit())

sound(200);

while(x1+58<

x)

{t1(x1,x,y);

delay(4500);

cleardevice();

t2(x1,x,y);

;

x1=x1+50;

nosound();

closegraph();

5、正多边形绘图程序

include<

raphics.h>

voidpolygon(intx0,inty0,inta,intn,floataf)

intx,y,i,x2,y2;

floatdtheta,theta;

if(n<

3)return;

dtheta=6.28318/n;

theta=af*0.0174533;

moveto(x0,y0);

x=x0;

y=y0;

for(i=1;

x=x+a*cos(theta);

y=y+a*sin(theta);

lineto(x,y);

theta=theta+dtheta;

lineto(x0,y0);

inti,a=80,x=200,y=100;

setbkcolor(15);

setcolor(4);

for(i=10;

i>

=3;

i--)

polygon(x,y,a,i,0.0);

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

当前位置:首页 > 教学研究 > 教学反思汇报

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

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