图形与图像的关系?答:图形是指由外部轮廓线条构成的矢量图。即由计算机绘制的直线、圆、矩形、曲线、图表等;而图像是由扫描仪、摄像机等输入设备捕捉实际的画面产生的数字图像,是由像素点阵构成的位图。位图图像由像素点组合而成;色彩丰富、过渡自然;保存时计算机需记录每个像素点的位置和颜色,所以图像像素点越多(分辨率高),图像越清晰,文件就越大。一般能直接通过照相、扫描、摄像得到图形都是位图图像。缺点:体积一般较大;放大图形不能增加图形的点数,可以看到不光滑边缘和明显颗粒,质量不容易得到保证矢量图形由数学公式表达的线条所构成;线条非常光滑流畅,放大图形,其线条依然可以保持良好的光滑性及比例相似性,图形整体不变形;占用空间较小。工程设计图、图表、插图经常以矢量图形曲线来表示。随机扫描与光栅扫描?答:随机扫描显示器显示图形时,电子束的移动方式是随机的,电子束可以在任意方向上自由移动,按照显示命令用画线的方式绘出图形,因此也称矢量显示器。而光栅扫描显示器显示图形时,电子束依照固定的扫描线和规定的扫描顺序进行扫描。电子束先从荧光屏左上角开始,向右扫一条水平线,然后迅速地回扫到左边偏下一点的位置,再扫第二条水平线,照此固定的路径及顺序扫下去,直到最后一条水平线,即完成了整个屏幕的扫描。随机扫描显示器依靠显示文件对屏幕图形进行刷新;光栅扫描显示器是靠帧缓存实现对屏幕图形的刷新。窗口与视口?答:窗口:就是用窗口的边界去裁剪数据并获得所需要的部分。二维情况下窗口由一个矩形上下左右四条边确定。视口:是显示设备上用于显示窗口内图形数据的一个区域。二维规则视口由一个矩形上下左右四条边确定。图形系统初始化#includegraphics.hmain(){intdriver=DETECT,mode;//适配器驱动程序设为自动检测,图形显示模式为0initgraph(&driver,&mode,”c:\\tc”);……closegraph();//关闭图形系统}颜色设置背景色voidsetbkcolor(intcolor)设置画笔色voidsetcolor(intcolor)返回背景色intgetbkcolor()返回画笔色intgetcolor()返回点的颜色intgetpixel(intx,inty)01234567BLACKBLUEGREENCYAN青REDMAGENTA洋红BROWNLIGHTGRAY89101112131415DARKGRAYLIGHTBLUELIGHTGREENLIGHTCYANLIGHTREDLIGHTMAGENTAYELLOWWHITE设置线格式voidsetlinestyle(intlinestyle,unsignedupattern,intthickness)linestyle样式SOLID-LINE0实线DOTTED-LINE1点线CENTER-LINE2中心线DASHED-LINE3虚线USERBIT-LINE4自定义线upattern仅在自定义线时有效,默认为0thickness线宽NORM-WIDTH1一个像素宽THICK-WIDTH3三个像素宽点画点voidputpixel(intx,inty,intcolor)指定点voidmoveto(intx,inty)50,30当前坐标50,30相对画点voidmoverel(intdx,intdy)10,20当前坐标60,50获取坐标intgetx()intgety()直线2个点画线voidline(intx0,inty0,intx1,inty1)从已有点画线到指定坐标lineto(intx,inty)相对画线linerel(intdx,intdy)矩形画矩形voidrectangle(int左上角x,int左上角y,int右下角x,int右下角y)圆,圆弧椭圆画圆voidcircle(intx,inty,intr)指定圆心和半径画同心圆弧voidarc(intx,inty,intsangle,inteangle,intr)指定圆心半径,从开始角到终止角画弧,角度0~360即圆画异心圆弧voidellipse(intx,inty,intsangle,inteangle,intxr,intyr)指定圆心,x方向半径,y方向半径,从开始角到终止角画弧,角度0~360即椭圆多边形画多边形voiddrawpoly(intnum,int*polypoints)num为顶点数polypoints为各顶点的整数序列若第一个和最后一个点坐标相同则画出多边形,否则为折线intRound(floatx){return(int)(x0?x-0.5:x+0.5);}//四舍五入直线的生成算法图形的扫描转换:在光栅显示器等数字设备上确定一个最佳逼近于图形的象素集的过程直线DDA算法DigitalDifferentialAnalyservoidLine_DDA(intx1,intx2,inty1,inty2,intcolor){inti=0;floatx,y;floatdx,dy;intsteps=abs(x2-x1)abs(y2-y1)?abs(x2-x1):abs(y2-y1);x=(float)x1;y=(float)y1;dx=(float)(x2-x1)/steps;dy=(float)(y2-y1)/steps;for(i=0;isteps;i++){putpixel(Round(x),Round(y),color);x=x+dx;y=y+dy;}}缺点:浮点增量的连续迭加,误差积累使长线段计算的象素位置偏离实际线段浮点运算十分耗时简述dda直线的数字微分分析法的算法与步骤?答:直线生成算法中的数字微分分析法是一种增量计算方法。它使用数字微分分析器(通过同时在X方向和Y方向分别增加dx和dy成正比的小数值来积分微分方程的机械设备),按照斜率绝对值|k|1和|k|1来递增画描点。|k|1时,取像素(x,(int)(y+0.5);|k|1时,取像素((int)(x+0.5),y)。其步骤为:1.选择dx或dy中的较大者为一个光栅单位Length;2.取Δy=dy/Length,Δx=dx/Length3.按照斜率绝对值|k|1和|k|1来递增画描点。直线Bresenham算法voidBRES(intx1,inty1,intx2,inty2,intcolor){intx,y,dx,dy;inti=0;floatp;x=x1;y=y1;dx=x2-x1;dy=y2-y1;p=2*dy-dx;for(i=0;idx;i++){putpixel(x,y,color);x=x+1;p=p+2*dy;if(p=0){y++;p=p-2*dx;}}}(要保证x2x1)优点:不做除法,只用整数,只有整数加减和乘2运算圆的生成算法圆的Bresenham算法voidputdot(intx1,inty1,intx,inty,intcolor)//8方向对称画点{putpixel(x1+x,y1+y,color);putpixel(x1+x,y1-y,color);putpixel(x1-x,y1+y,color);putpixel(x1-x,y1-y,color);putpixel(x1+y,y1+x,color);putpixel(x1+y,y1-x,color);putpixel(x1-y,y1+x,color);putpixel(x1-y,y1-x,color);}voidBRESC(intx1,inty1,intr,intcolor){intx,y;floatp;x=0;y=r;p=5/4-r;while(x=y){putdot(x1,y1,x,y,color);if(p0){p=p+x*2+3;}else{p=p+2*(x-y)+5;y--;}x++;}}圆的生成——Bresenham算法及步骤?答:考虑以坐标原点为圆心的第一四分圆,取x=0,y=R为起点按顺时针方向生成圆,假设圆心及起点均精确地落在像素点上。从圆上任意一点出发,按顺时针方向生成圆时,为了最佳逼近该圆,对于下一像素的的取法只有三种可能:右方mh,右下角md,下方mv。要在三个像素中选择一个使其与真正圆的距离的平方达到最小即可。结合圆与点(xi,yi)附近光栅网格相交关系的五种可能,找到最合适的像素点显示即为圆的Bresenham算法。其具体步骤为:1.判别圆心到右下角像素的距离和圆心到圆上点距离的平方之差Δi的正负性;2.根据第一步的结果,继续判别圆到mh,md距离的平方差δ。当Δi0时,若δ≤0,取mh,若δ0,取md;当Δi0时,若δ≤0,取md,若δ0,取mv;当Δi=0时,取md。填色算法扫描线填色算法:按扫描线顺序计算扫描线与多边形的相交区间,再用要求的颜色或图案显示这些区间的象素,需提供多边形各顶点坐标1.用水平扫描线由上往下扫描多边形2.每根扫描线与多边形各边产生一系列交点,采用递归算法3.将交点按x坐标进入分类,将分类后的交点成对取出,作为两个端点,以所需要填的色彩画水平直线。种子填色算法:要求给出边界颜色特征区域内的一个点的坐标1.从(x,y)开始检测相邻位置以确定它们是否是边界颜色,若不是,则用填充颜色涂色,并检测其相邻位置。2.直至检测完所有象素。voidseed_filling(x,y,fill_color,boundary_color){intc;c=inquire_color(x,y);if((cboundary_color)&&(cfill_color)){setpixel(x,y,fill_color);seed_filling(x,y+1,fill_color,boundary_color);seed_filling(x,y-1,fill_color,boundary_color);seed_filling(x-1,y,fill_color,boundary_color);seed_filling(x+1,y,fill_color,boundary_color);}}种子填充算法?答:从多边形区域的一个内点(种子)开始,由内向外用给定的颜色画点直到边界为止。如果边界是以一种颜色指定的,则种子填充算法可逐个像素地处理直到遇到边界颜色为止。种子填充算法常用四连通域和八连通域技术进行填充操作。从区域内任意一点出发,通过上、下、左、右四个方向到达区域内的任意像素。用这种方法填充的区域就称为四连通域;这种填充方法称为四向连通算法。从区域内任意一点出发,通过上、下、左、右、左上、左下、右上和右下八个方向到达区域内的任意像素。用这种方法填充的区域就称为八连通域;这种填充方法称为八向连通算法。设置填充方式setfillstyle(intpattern,intcolor)EMPTY-FILL0用背景色SOLID-FILL1实心LINE-FILL2粗水平线LTSLASH-FILL3细斜线SLASH-FILL4粗斜线BKSLASH-FILL5粗反斜线LTBKSLASH-FILL6细反斜线HATCH-FILL7网格线XHATCH-FILL8斜网格线INTERLEAVE-FILL9隔点WIDE-DOT-FILL10宽间断点CLOSE-DOT-FILL11密间断点USER-FILL12自定义用当前样式填充长方形bar(intx1,inty1,intx2,inty2)3d长方形bar3d(intx1,inty1,intx2,inty2,intdepth,inttopflag)depth垂直于屏幕方向上的深度topflag,0画顶点,非0不画顶点多边形fillpoly(intnum,int*polypoints)扇形pieslice(intx,inty,intsangle,inteangle,intr)椭圆扇形sector(intx,inty,intsangle,inteangle,intxr,intyr)种子floodfill(intx,inty,intborder)bor