上海师范大学计算机图形学第二章.ppt

上传人:max****ui 文档编号:10988497 上传时间:2020-04-17 格式:PPT 页数:66 大小:367.50KB
返回 下载 相关 举报
上海师范大学计算机图形学第二章.ppt_第1页
第1页 / 共66页
上海师范大学计算机图形学第二章.ppt_第2页
第2页 / 共66页
上海师范大学计算机图形学第二章.ppt_第3页
第3页 / 共66页
点击查看更多>>
资源描述
二 绘图函数1 点voidputpixel intx inty intcolor color符号名 取值为0 15voidmoveto intdeltax intdeltay 例题 当前坐标CPputpixel 100 200 5 100 200 moveto 50 30 50 30 moverel 10 20 60 50 intgetx void intgety void 2 直线voidline intx0 inty0 intx1 inty1 当前坐标 x y voidlineto intx inty voidlinerel intdeltax intdeltay 当前坐标 x deltax y deltay 例题 arc 40 40 0 120 30 3 矩形voidrectangle intleft inttop intright intbottom 左上角坐标 left top 右下角坐标 right bottom 5 多边形 voiddrawpoly intnumpoints int polypoints numpoints 为多边形的顶点数polypoints 各顶点坐标的整数序列共有2 numpoints个整数 若第一个点和最后一个点坐标相同 则画出封闭多边形 否则为多边形折线 多边形例题 intp 2 6 45 50 75 30 85 75 180 65 70 5 45 50 drawpoly 6 p 45 50 三 颜色控制 1 voidsetbkcolor intcolor 默认色为黑色2 voidsetcolor intcolor 设置当前画线颜色 默认色为白色 15 3 intgetbkcolor void 返回当前背景色4 intgetcolor void 返回当前绘图颜色5 intgetpixel intx inty 4 圆 圆弧和椭圆voidcircle intx inty intradius voidarc intx inty intstangle intendangle intradius 起始角stangle 终止角endangle0 360 voidellipse intx inty intstangle intendangle intxradius intyradius 从起始角stangle开始画椭圆弧至终止角endangle xradius yradius分别为方向x y的半径 0BLACK1BLUE2GREEN3CYAN4RED5MAGENTA6BROWN7LIGHTGRAY 8DRAKGRAY9LIGHTBLUE10LIGHTGREEN11LIGHTCYAN12LIGHTRED13LIGHTMAGENTA14YELLOW15WHITE 6 voidsetlinestyle intlinestyle unsignedupattern intthickness Linestyle取值 SOLID LINE0实线DOTTED LINE1点线CENTER LINE2中心线DASHED LINE3虚线USERBIT LINE4用户定义的线upattern仅在userbit line时起作用 thickness线宽NORM WIDTH1一个象素宽THICK WIDTH3三个象素宽 例题 setlinestyle DASHED LINE 0 THICK WIDTH 或setlinestyle 3 0 3 line 300 50 300 200 上机作业2 画出如下图形 第二章基本图形的生成和计算 如何在指定的输出设备上描述构造基本二维几何图形 点 直线 圆 椭圆 多边形 字符串及其相关属性等 2 1直线的生成算法 图形的扫描转换 在光栅显示器等数字设备上确定一个最佳逼近于图形的象素集的过程 用一系列的象素点来逼近直线 2 1直线的生成算法 2 1 1直线DDA算法 DigitalDifferentialAnalyser 设直线起点 x1 y1 终点 x2 y2 则斜率mm y2 y1 x2 x1 dy dx dy dx Dy Dxxi 1 xi Dxyi 1 yi DyDy m Dx x y 1b 1a 4a 4b 3b 3a 2a 2b xi 1 xi 1yi 1 yi m xi 1 xi 1yi 1 yi m x1 y1 x2 y2 O xi 1 xi 1 myi 1 yi 1 象限DxDy象限DxDy1a1m4a1 m1b1 m14b1 m 12a 1m2b 1 m13a 1 m3b 1 m 1结论 1 当 m 1时 Dx 1 Dy m否则 Dx 1 m Dy 1 结论 2 Dx Dy的符号与dx dy的符号相同 缺点 1 浮点增量的连续迭加 误差积累使长线段计算的象素位置偏离实际线段2 浮点运算十分耗时 1965年由Bresenham提出设直线起点 x1 y1 终点 x2 y2 y mx bb y1 m x1m y2 y1 x2 x1 dy dx 2 1 2直线Bresenham算法 13 12 11 10 10 11 12 13 11 11 12 11 或 12 12 当直线方向限于1a象限 x1 y1 x2 y2 当直线方向限于1a象限 则xi 1 xi 1yi 1 yi 1 yi 13 12 11 10 10 11 12 13 xi yi x1 y1 x2 y2 Bresenham算法采取对整型参量的符号进行检测 整型参量的值正比于两象素与实际线段之间的偏移yi 1的选择由d1 d2的大小决定 如d1 d2 则yi 1 yi 1 否则yi 1 yid1 y yid2 yi 1 y d1 d2 2y 2yi 1y m xi 1 bm dy dx d1 y yid2 yi 1 y d1 d2 2dy dx xi 1 2b 2yi 1两边 dx 令Pi d1 d2 dx则Pi 2dy xi 1 2b dx 2yi dx dx 2xidy 2yidx 2dy 2b 1 dx 由于dx 0 则Pi可用来判断符号Pi 1 2xi 1dy 2yi 1dx 2dy 2b 1 dx 2 xi 1 dy 2yi 1dx 2dy 2b 1 dx Pi 2dy 2yi 1dx 2yidx Pi 2dy 2 yi 1 yi dx Pi 2xidy 2yidx 2dy 2b 1 dx P1 2x1dy 2y1dx 2dy 2b 1 dx 2x1dy 2y1dx 2dy 2 y1 dy dx x1 1 dx 2x1dy 2y1dx 2dy 2y1dx 2x1dy dx 2dy dx Pi 2xidy 2yidx 2dy 2b 1 dxb y1 m x1 1 画点 x1 y1 dx x2 x1dy y2 y1P1 2dy dxi 12 xi 1 xi 1当Pi 0 则yi 1 yi 1 否则yi 1 yi3 画点 xi 1 yi 1 画线步骤 P1 2dy dx 4 求Pi 1 当Pi 0则Pi 1 Pi 2dy 2dx否则Pi 1 Pi 2dy5 i i 1如i dx 1则转2否则结束 优点1 不做除法2 只用整数3 只有整数加减和乘2运算 例 起点 20 10 终点 30 18 斜率0 8dx 10 dy 8P1 2dy dx 2 8 10 6iPi xi 1 yi 1 123 iPi xi 1 yi 1 45678910 例 起点 20 10 终点 30 18 斜率0 8dx 10 dy 8P1 2dy dx 2 8 10 6iPi xi 1 yi 1 16 21 11 22 22 12 3 2 23 12 iPi xi 1 yi 1 414 24 13 510 25 14 66 26 15 72 27 16 8 2 28 16 914 29 17 1010 30 18 Bresenham画法对任意斜率的线段具有通用性 当m 0 且m 1 则交换x y之间规则 2 2圆的生成算法 2 2 1基础知识设圆心坐标 xc yc 半径r1 直角坐标法 x xc 2 y yc 2 r2 y yc r2 x xc 2 1 2x xc从 r r作加1递增 可求出y坐标但圆周上的点不均匀即象素位置间的间距不一致 2 2圆的生成算法 2 极坐标法x xc rcos y yc rsin r 0 4 利用对称法则 2 2圆的生成算法 2 2 2圆的Bresenham算法Bresenham圆算法通过比较象素与圆的距离的平方而避免了平方根运算 设圆心坐标 0 0 半径为r起点 0 r 顺时针方向1 8圆周xi 1 xi 1yi 1 yi或yi 1 yi 1 x y xi xi 1 yi y yi 1 d21 2 d11 2 2 2圆的生成算法 y2 r2 xi 1 2d1 yi2 y2 yi2 r2 xi 1 2d2 y2 yi 1 2 r2 xi 1 2 yi 1 2令Pi d1 d2 2 xi 1 2 yi2 yi 1 2 2r2Pi 1 Pi 4xi 6 2 yi 12 1 yi2 2 yi 12 1 yi2 当P 0 则yi 1 yi 否则yi 1 yi 1 2 2圆的生成算法 Pi 1 2 xi 2 2 yi 12 yi 1 1 2 2r2 2 xi 1 2 4xi 6 yi 12 yi 1 1 2 2r2 Pi 4xi 6 yi2 yi 1 2 yi 12 yi 1 1 2 Pi 4xi 6 2 yi 12 yi2 2 yi 1 yi 当P1 x1 0 y1 r P1 2 r2 r 1 2 2r2 3 2r 2 3区域填充算法 2 3 1基本知识1 区域填充定义 给出一个区域的边界 要求对边界范围内的所有象素单元赋予指定的颜色代码 最常用的是多边形填色 2 3区域填充算法 2 数学方法 扫描交点的奇偶数判断法1 将多边形画在平面上2 用一根水平扫描线从左到右通过多边形 从而与多边形的边界相交 扫描线与边界相交奇数次后进入多边形 偶次数后走出多边形 A B C 错判 错判 错判 1 扫描线填色算法 按扫描线顺序计算扫描线与多边形的相交区间 再用要求的颜色或图案显示这些区间的象素 需提供多边形各顶点的坐标 填色算法 2 种子填色算法 要求给出边界颜色特征区域内的一个点的坐标 2 3 2扫描线填色算法 1 用水平扫描线由上往下扫描多边形2 每根扫描线与多边形各边产生一系列交点 采用递归算法3 将交点按x坐标进入分类 将分类后的交点成对取出 作为两个端点 以所需要填的色彩画水平直线 扫描线与边的求交点方法采用递归算法 以 x1 y1 x2 y2 为端点的边与第i 1条扫描线的交点 yi 1 yi 1 xi 1 xi x2 x1 y2 y1 即xi 1 xi 1 m yi x2 y2 Pi xi yi x1 y1 左右顶点处理 以1 2 3次序画多边形外框 左顶点2 y1 y2 y3 右顶点2 y1 y2 y3 一个顶点同属于多边形两条边的端点 如果所交的顶点是左顶点或右顶点 填色因扫描交点的奇偶计数出错而出现错误 解决方法 删去左右顶点的入边的终点 即1 2边 2 3 2 对于左顶点 x1 y1 x2 y2 改为 x1 y1 x2 1 m y2 1 对于右顶点 x1 y1 x2 y2 改为 x1 y1 x2 1 m y2 1 删去水平边 1 2 3 1 2 3 水平边处理 删去水平边 2 3 3种子填色算法 已知多边形边界位置及颜色以及多边形内的一点 x y 位置 x y 方法 1 从 x y 开始检测相邻位置以确定它们是否是边界颜色 若不是 则用填充颜色涂色 并检测其相邻位置 2 直至检测完所有象素 常用的 四邻法和八邻法 四邻法不能通过狭窄区域 种子填色算法 voidseed filling x y fill color boundary color intx y fill color boundary color intc c inquire color x y if cboundary color 种子填色算法 种子填色算法 上 下 左 右
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!