计算机图形学复习提纲.docx
《计算机图形学复习提纲.docx》由会员分享,可在线阅读,更多相关《计算机图形学复习提纲.docx(16页珍藏版)》请在冰豆网上搜索。
计算机图形学复习提纲
计算机图形学复习提纲
题型:
填空10题:
共20分
选择10题:
共20分
简答2题:
共14分
计算3题:
共30分
编程2题:
共16分
考点概括:
第一章计算机图形学基础知识
计算机图形学中,生成图形的方式有两种:
互动式绘图和被动式绘图;
图形系统的结构:
图形系统的基本功能:
计算存储输入输出交互5个功能;
计算机图形系统的分类:
脱机绘图系统联机绘图系统交互式绘图系统;
CRT显示器根据其电子束轰击屏幕的方式和组成结构可分为三种类型:
随机扫描式显示器存储管式显示器光栅扫描式显示器;
一般分辨率在1024*1024像素以上的话,显示的颜色数目在256中以上;
光栅扫描式显示器的组成显示存储器图形生成器彩色表CRT控制器CRT监视器;
计算机输入设备图:
课后的三道计算题(必考一题):
彩色表的地址数目是有像素值的位长决定的,
彩色表也叫调色板(调色表设真彩色为32位)这样就可以决定系统颜色的总数;
第二章C语言图形程序设计基础
初始化要调用initgraph()函数
格式为voidfarinitgraph(int*gdriver,int*gmode,char*path);Detectgraph()函数
格式为voidfardetectgraph(int*gdriver,int*gmode);
Closegraph()函数
Moveto()函数;moverel函数;lineto()函数;linerel()函数;
画一个“王”字的程序;
#include"graphics.h"
#include"conio.h"
voidmain()
{intgdriver=DETECT,gmode;
自动搜索显示器类型和显示
intx,y;
initgraph(&gdriver,&gmode,"D:
\\TC");
cleardevice();/*清除图形屏幕
moveto(100,40);
linerel(40,0);/*从当前坐标以相对增量方式画直线
x=getx();//linerel是相对移动的意思
y=gety();//取得光标(x,y)现在的位置
moveto(x,y+20);
linerel(-40,0);
moverel(0,20);
linerel(40,0);
moverel(-20,0);
linerel(0,-40);
getch();//等待按一键结束
closegraph();
}
Sprintf()函数:
第三章基本图形的生成与计算
*直线的生成算法:
数值微分法(DDA法)、中点画线算法和Bresenham算法。
前面通用的程序:
#include"graphics.h"
#include"stdio.h"
#include"conio.h"
main()
{
intr,color;
intgdriver=DETECT,gmode;
intMidPointCircle(intr,intcolor);
printf("pleaseinputthenumbleofr=");
scanf("%d",&r);
printf("pleaseinputthenumbleofcolor=");
scanf("%d",&color);
initgraph(&gdriver,&gmode,"D:
\\TC");
MidPointCircle(r,color);
getch();
closegraph();
}
*DDA法:
DDA画线算法参考程序
dda_line(x1,y1,x2,y2,c)
intx1,y1,x2,y2,c;
{
floatdelta_x,delta_y,x,y;
intdx,dy,steps,k;
dx=x2-x1;
dy=y2-y1;
if(abs(dx)>abs(dy))steps=abs(dx);
elsesteps=abs(dy);
delta_x=(float)dx/(float)steps;
delta_y=(float)dy/(float)steps;
x=x1;
y=y1;
for(k=1;k<=steps;k++)
{
putpixel((int)(x+0.5),(int)(y+0.5),c);
x+=delta_x;
y+=delta_y;
}
}
中点画线算法:
#include"graphics.h"
main()
{intMidpoint_Line();
intgdriver=DETECT,gmode;
initgraph(&gdriver,&gmode,“D:
\\TC”);
Midpoint_Line(10,10,500,300,4);
getch();
closegraph();}
voidMidpointLine(intx0,inty0,intx1,int
y1,intcolor)
{inta,b,d1,d2,d,x,y;
a=y0-y1;b=x1-x0;
d=2*a+b;d1=2*a;d2=2*(a+b);
x=x0;y=y0;
putpixel(x,y,color);
while(x {if(d<0)
{x++;y++;d+=d2;}
else
{x++;d+=d1;}
putpixel(x,y,color);
}/*while*/
}/*midPointLine*/
Bresenham画线法:
用Bresenham方法扫描转换连接从点P0(0,0)到Pi(ix100,100)(i=1,2,3,4,5)的直线段。
#include"graphics.h"
#include"stdio.h"
#include"conio.h"
main()
{intBresenham_line();
intgdriver=DETECT,gmode;
initgraph(&gdriver,&gmode,"D:
\\TC");
Bresenham_line(0,0,100,100,4);
Bresenham_line(0,0,200,100,4);
Bresenham_line(0,0,300,100,4);
Bresenham_line(0,0,400,100,4);
Bresenham_line(0,0,500,100,4);
getch();
closegraph();
}
Bresenham_line(intx0,inty0,intx1,inty1,
intcolor)
{intx,i,y;
floatdx,dy,k,k1,e;
dx=x1-x0;
dy=y1-y0;
k=dy/dx;
k1=1/k;
e=-0.5;
x=x0;
y=y0;
for(i=0;i<=dy;i++)
{putpixel(x,y,color);
y=y+1;
e=e+k1;
if(e>=0.5)e=e-1;
if(e>=0)x++;
}
中点画圆法:
#include"graphics.h"
#include"stdio.h"
#include"conio.h"
main()
{
intr,color;
intgdriver=DETECT,gmode;
intMidPointCircle(intr,intcolor);
printf("pleaseinputthenumbleofr=");
scanf("%d",&r);
printf("pleaseinputthenumbleofcolor=");
scanf("%d",&color);
initgraph(&gdriver,&gmode,"D:
\\TC");
MidPointCircle(r,color);
getch();
closegraph();
}
MidPointCircle(intr,intcolor)
{
intx,y;
floatd;
x=0;y=r;d=1.25-r;
putpixel(x,y,color);
while(x<=y)
{
if(d<0)
{d+=2*x+3;
x++;}
else
{d+=2*(x-y)+5;
x++;
y--;}
putpixel(x,y,color);
}/*while*/
}
1.程序题时,要点:
d0=1.25-r
d<0时,d+=2*x+3;
d>=0时,d+=2*(x-y)+5;
2.做填空是,直接算就是了!
(二)区域填充算法包括:
多边形区域的填充,边填充算法,种子填充算法。
1.多边形区域的填充(四个步骤:
求交排序配对填色)考点:
边表,活动边表。
活动边表的步骤:
种子填充算法:
考算法步骤和出栈顺序。
(1)种子象素入栈
(2)当堆栈非空时重复执行如下步骤
1.栈顶象素出栈
2.将该象素设置成填充色
3.按左、上、右、下顺序检查与出栈象素相邻的四个象素,将其中不是边界且未置成填充色的象素压入堆栈。
见下图:
线刷子:
当直线斜率在[-1,1]之间时,线刷子置成垂直方向,正上方和正下方置成直线颜色;当斜率在之外时,则将线刷子置成水平方向,正左方和正右方置成直线颜色。
*要能计算点阵式字符点阵需要的字节数。
矢量式字符:
autoCAD系统的行的定义如下:
标题行中,形编号是1到255的整数值;字节数表示形定义描述行中包括结束符0在内的字节数目;形名称用大写字母才可以被调用,否则只作为形的一种解释性信息,不存入存储器,因而不占用存储空间。
2.描述行由若干个用逗号隔开的字节组成,并以0作为形定义的结束字符。
带有前缀0的字节是十六进制,无前缀0的字节是十进制。
3.描述行中的每个字节包含矢量长度和方向两种信息。
目前常用的反走样方法主要有:
提高分辨率、简单区域采样和加权区域采样。
中点分割裁剪(不知道怎么考?
)
多边形裁剪方法有很多,通常有逐边裁剪法、双边裁剪法和分区编码裁剪法等
第四章曲线与曲面的生成与计算
Bezier曲线的参数方程和性质:
DeCAsteljian算法在4p70
二次B样条曲线段的表达式
两曲面拼接