计算机图形学第二章
- 格式:ppt
- 大小:1.25 MB
- 文档页数:108
计算机图形学作业答案第二章图形系统第二章图形系统1. 什么是图像的分辨率?什么是图像的分辨率?解答:在水平和垂直方向上每单位长度(如英寸)所包含的像素点的数目。
在水平和垂直方向上每单位长度(如英寸)所包含的像素点的数目。
2. 计算在240像素像素//英寸下640640××480图像的大小。
图像的大小。
解答:(640/240640/240))×(480/240)(480/240)或者(或者(或者(8/38/38/3)×)×)×22英寸。
英寸。
3. 计算有512512××512像素的2×2英寸图像的分辨率。
英寸图像的分辨率。
解答:512/2或256像素像素//英寸。
英寸。
第三章 二维图形生成技术a) 一条直线的两个端点是(0,0)和(6,18),计算x 从0变到6时y 所对应的值,并画出结果。
并画出结果。
解答:由于直线的方程没有给出,所以必须找到直线的方程。
下面是寻找直线方程(由于直线的方程没有给出,所以必须找到直线的方程。
下面是寻找直线方程(y y =mx mx++b )的过程。
首先寻找斜率:)的过程。
首先寻找斜率: m m == ⊿y/y/⊿⊿x x == (y 2-y 1)/(x 2-x 1) = (1818--0)/(6/(6--0) 0) == 3 接着b 在y 轴的截距可以代入方程y =3x 3x++b 求出求出 0 0 0==3(0)+)+b b 。
因此b =0,所以直线方程为y =3x 3x。
b) 使用斜截式方程画斜率介于0°和45°之间的直线的步骤是什么?°之间的直线的步骤是什么? 解答:1.1. 计算dx dx::dx dx==x 2-x 1。
2.2. 计算dy dy::dy dy==y 2-y 1。
3.3. 计算m :m =dy/dx dy/dx。
4.4. 计算b: b b: b==y 1-m ×x 15.5. 设置左下方的端点坐标为(x ,y ),同时将x end 设为x 的最大值。
计算机图形学(三种画线算法)第⼆章:光栅图形学算法1、光栅显⽰器:光栅扫描式图形显⽰器简称光栅显⽰器,是画点设备,可看作是⼀个点阵单元发⽣器,并可控制每个点阵单元的亮度2、由来:随着光栅显⽰器的出现,为了在计算机上处理、显⽰图形,需要发展⼀套与之相适应的算法。
3、研究内容:1>直线段的扫描转换算法2>多边形的扫描转换与区域填充算法3>裁剪算法4>反⾛样算法5>消隐算法⼀、直线段的扫描转换算法1.为了显⽰⼀条直线,就在光栅显⽰器上⽤离散的像素点逼近直线,所以我们就要知道这些像素点的坐标已知P0和P1,利⽤斜截式⽅程,y=kx+b,求出k=(y1-y0)/(x1-x0),b为截距现在k,b已知,x,y未知,现在假设⼀个像素距离为y,即可求出y的值。
因为像素的坐标是整数,所以y值还要进⾏取整处理2.在计算机中加法的运算更快,乘法较慢,故可以把上述⽅法优化来提⾼效率1>数值微分法(DDA)2>中点划线法3>Bresenham算法数值微分法(DDA)-----增量算法(只有⼀个加法)这个式⼦的含义是:当前步的y值等于前⼀步的y值加上斜率k(增量)例⼦:思考:x递增1,y递增k,是否适合任意的k?可改进的点:1>⼀般情况下,k都是⼩数,且每⼀步均要对y四舍五⼊,唯⼀改进的途径是把浮点运算变为整数加法!2>⽅程还有两点式,⼀般式当|k|<=1时,伪代码如下:voidDDALine(int x0,int y0,int x1,int y1,int color){Int x;Float dx,dy,y,k;dx=x1-x0;dy=y1-y0;K=dy/dx;y=y0;For(x=x0,x<=x1;x++){Drawpixel(x,int(y+0.5),color);//drawpixel(x, y, color)在(x, y)像素点绘制颜⾊为color的点Y=y+k;}}中点画线法采⽤直线的⼀般式⽅程:Ax+By+C=0 F(x,y)=0,其中a = y0 - y1, b = x1 - x0,c = x0y1 - x1y0令F(x, y)=0则得出直线⽅程,代⼊ (x0, y0)和(x1, y1),便可得到三个⽅程,可求出a,b,c的值⼀条直线把平⾯分成了三个部分,直线上⽅,直线上,直线下⽅x⽅向上+1,y⽅向上加不加1需判断如何判断Q在M的上⽅还是下⽅?把M点的坐标带⼊⽅程,其中a = y0 - y1, b = x1 - x0分析计算量?两个乘法,四个加法,推导出d的增量公式d的初始值包含⼩数,因此可以⽤2d来代替d实现整数加法,所以d=2a+b伪代码如下:Void MidPointLine(int x0,int y0,int x1,int y1,int color){Int a,b,delta1,delta2,d,x,y;a=y0-y1;b=x1-x0;d=2*a+b;Delta1 = 2*a;Delta2 =2*(a+b);X = x0;Y=y0;//在对应的x,y像素点着⾊putpixel(x,y,GREEN);while(x<x1){if(d<0){x++;y++;d+=delta2;}else{x++;d+=delta1;}//在对应的x,y像素点着⾊putpixel(x,y,GREEN);}Bresenham算法每步的进化:DDA把算法效率提⾼到每步只做⼀个加法中点算法进⼀步把效率提⾼到每步只做⼀个整数加法Bresenham算法提供了⼀个更⼀般的算法,该算法不仅有好的效率,⽽且有更⼴泛的适⽤范围如何把算法的效率也提⾼到整数加法?改进⼀:令e=d-0.5因为d的初值为0,所以e的初值为-0.5,e=e+k,如果e>0,e=e-1改进⼆:在计算e值的情况下还是关于浮点数的计算,所以把浮点数化为整数。