计算机图形学简明教程_第3章.pptVIP

  • 21
  • 0
  • 约1.61万字
  • 约 90页
  • 2019-08-17 发布于浙江
  • 举报
第3章 基本光栅图形算法 本章内容 3.1 用Java语言绘图 3.4.4 边界标志算法 具体例子 边界标志算法的过程 (a) 勾画边界 (b) 在y=1的扫描线上转换 (c) 在y=2的扫描线上转换 (d) 扫描转换完毕 3.3.1 正负法 算法的程序实现 void pnarc(Graphics g,int radius) { int x,y,f; x = 0; y = 0+radius; f = 0; while (y 0) { g.drawLine(x, y, x, y); if (f 0) { f = f-2*y+1; y--; } else { f = f + 2*x + 1; x++; } } if(y == 0) g.drawLine(x, y, x, y); } 3.3.2 Bresenham算法 x y 45° A B (-x,-y) (-y,-x) (-x,y) (x,y) (x,-y) (-y,x) (y,x) (y,-x) 图3.8 7个对称点 图3.9 Pi-1 的两个侯选点 x Hi Li Pi-1 y D(Hi)0 D(Li)0 A B 仅讨论图3.8中弧AB的画法,而要显示一个整圆,只需在显示AB上任一点的同时显示圆上该点的其它七个对称点即可。 从A点开始向右下方逐点寻找显示弧AB要用的点,若图3.9中的点 是已选中的一个表示圆弧上的点,则下一个点应为 或 ,选 还是选 取决于哪一个点更接近于弧AB。 3.3.2 Bresenham算法 设R为弧AB的半径,记点P到原点的距离的平方与圆的半径的平方之差为D(P),即 假定 为圆弧上的点,则 , 。令 当 时, , 比 距圆弧近,应取 来显示弧AB ; 当 时, ,应取 来显示弧AB ; 当 时,可在两者中任取一点,这里规定取 。 Bresenham算法在候选的两个像素中,总是选离圆弧最近的像素为圆弧的一个近似点,因此,它比正负法决定的像素更合理。 3.3.2 Bresenham算法 设点 坐标为 ,则 和 点的坐标分别为 和 , 和 的坐标分别为 和 。已知 , , , 。则 (3.12) (3.13) (3.14) 的递推公式 3.3.2 Bresenham算法 当 时,点 被选中,这时 ,由式(3.13)和(3.14)可得 当 时,点 被选中,这时 ,由式(3.13)和(3.14)可得 (3.15) (3.16) 式(3.12),(3.15)和(3.16)组成计算 的递推公式。 3.3.2 Bresenham算法 算法的程序实现 void bresenham_arc(Graphics g,int radius) { int x,y,d; x = 0; y = radius; d = 3-2*radius; while (x y) { g.drawLine(x, y, x, y); if(d0) d=d+4*x+6; else { d=d+4*(x-y)+10; y--; } x++; } if(x == y)g.drawLine(x,y,x,y); } 3.3.3 圆的多边形迫近法 基本思想 按一定方式计算给定圆弧轨迹上的一系列顶点,然后用连接相邻点的一系列直线段来逼近圆弧。 用正多边形迫近圆弧法 设圆弧所在圆的半径为R,圆弧的起始角和终止角分别为 和

文档评论(0)

1亿VIP精品文档

相关文档