计算机图形学基础第五章课后习题答案

  • 格式:doc
  • 大小:172.50 KB
  • 文档页数:3

下载文档原格式

  / 3
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

5.3 试用中点Bresenham 算法画直线段的原理推导斜率在[-1,0]之间的直线段绘制过程(要求写清原理、误差函数、递推公式以及最终画图过程)。

解:

原理:每次在最大位移方向上走一步,而另一个方向是走步还是不走步取决于误差项的判别。

∵斜率k 在[-1,0]之间

∴x 为最大位移方向,每次在x 加1,而y 或减1或减0。 设直线段的方程F(x,y)=y-kx-b ,假设当前点是P(x i ,y i ),则下一点在P u (x i +1,y i )与P d (x i +1,y i -1)中选一。设M 为P u 和P d 的中点,则M 点的坐标为(x i +1,y i -0.5)。

构造误差判别式:

d i =F(x M ,y M )=F(x i +1,y i -0.5)= y i -0.5-k(x i +1)-b

若d i ≥0,取P d (x i +1,y i -1);

若d i <0,取P u (x i +1,y i );

即有x i+1=x i +1,y i+1=y i -1(d i ≥0)或y i (d i <0)。

误差函数的递推: d i ≥0时,取P d (x i +1,y i -1),再判断下一像素取哪个时,应计算 d i+1=F(x i +2,y i -1.5)= y i -1.5-k(x i +2)-b=d i -1-k ,增量为-1-k 。

d i <0时,取P u (x i +1,y i ),再判断下一像素取哪个时,应计算 d i+1=F(x i +2,y i -0.5)= y i -0.5-k(x i +2)-b=d i -k ,增量为-k 。

(x 0,y

从(x0,y0)点出发,下一个像素的选取计算

d0=F(x0+1,y0-0.5)= y0-0.5-k(x0+1)-b=-0.5-k

取的是误差判别式的符号,因此可进行如下变换:D=d*2∆x

∆x=x1-x0,根据选取的起点和绘制方向,∆x>0,因此,D与d同号。画图过程:

(1)输入两端点P0(x0,y0)和P1(x1,y1);

(2)计算初始值∆x,∆y,D=-∆x-2∆y,x=x0,y=y0;

(3)绘制点(x,y)。判断D的符号,若D≥0,则(x,y)更新为(x+1,y-1),D更新为D-2∆x-2∆y;否则(x,y)更新为(x+1,y),D更新为D-2∆y。(4)当x<x1时,重复(3),否则结束。

5.7 利用中点Bresenham画圆算法原理推导第一象限x=y到y=0圆弧段的扫描转换算法(要求写清原理、误差函数、递推公式以及最终画

图过程)。

移方向。

原理:每次沿y方向上走一步,

而x方向上或减1或减0。

假设当前已确定P(x i,y i),下一步

在P u(x i,y i+1)与P d(x i-1,y i+1)中选取。设M为P u和P d的中点,则M点

的坐标为(x i-0.5,y i+1)。

d i=F(x M,y M)=F(x i-0.5,y i+1)= (x i-0.5)2+(y i+1)2-R2

若d i≥0,取P d(x i-1,y i+1);

若d i<0,取P u(x i,y i+1);

即有y i+1=y i+1,x i+1=x i-1(d i≥0)或x i(d i<0)。

误差函数的递推:

d i≥0时,取P d(x i-1,y i+1),再判断下一像素时,应计算

d i+1=F(x i-1.5,y i+2)= (x i-1.5)2+(y i+2)2-R2

=(x i-0.5)2+(y i+1)2-R2+5-2x i+2y i=d i+5-2(x i-y i),增量为5-2(x i-y i)。

d i<0时,取P u(x i,y i+1),再判断下一像素时,应计算

d i+1=F(x i-0.5,y i+2)= (x i-0.5)2+(y i+2)2-R2

=(x i-0.5)2+(y i+1)2-R2+3+2y i=d i+3+2y i,增量为3+2y i。

判别式的初值:

从(R,0)点出发,计算d0=F(R-0.5,1)= (R-0.5)2+1-R2=1.25-R

对于整数,判断1.25-R的符号与判断1-R的符号等价,因此取d0=1-R。画图过程:

(1)输入圆的半径R;

(2)计算初始值d=1-R,x=R,y=0;

(3)绘制点(x,y)。判断d的符号,若d≥0,则(x,y)更新为(x-1,y+1),d更新为d+5-2(x-y);否则(x,y)更新为(x,y+1),d更新为d+3+2y。(4)当y<x时,重复(3),否则结束。