数字测图第3讲.ppt_第1页
数字测图第3讲.ppt_第2页
数字测图第3讲.ppt_第3页
数字测图第3讲.ppt_第4页
数字测图第3讲.ppt_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三讲计算机绘图基础 主讲人 蒲仁虎 点击添加副标题 标题栏 一 窗口及坐标变换 1 基本概念a 用户域定义图形范围的实数域 理论上是连续无限的区域 可以使测图的区域范围 b 窗口区任何小于或等于用户域的区域均可称为窗口 一 窗口及坐标变换 C 屏幕域屏幕输出的最大区域 有限的整数域 0 1023 0 767 是与设备有关的概念 一 窗口及坐标变换 d 视图区任何小于或等于屏幕域的区域都称为视图区 e 设备坐标系与图形输出设备有关的绘图坐标系 x y 屏幕坐标系 一 窗口及坐标变换 2 窗口区与视图区的坐标转换1 测量坐标与笛卡尔坐标系 X Y x y P WYL WXL y x 一 窗口及坐标变换 2 屏幕坐标系与测量坐标系 X0 Y0测量坐标系下 X Y 二 绘制直线和曲线 1 直线的绘制Subline p1 ThisDrawing Utility GetPoint 输入点 获取点坐标p2 ThisDrawing Utility GetPoint p1 vbCr 输入下一点 获取下一个点的坐标CallThisDrawing ModelSpace AddLine p1 p2 画直线EndSub 二 绘制直线和曲线 2 圆的绘制Subc100 Dimcc 0To2 AsDouble 声明坐标变量cc 0 1000 定义圆心座标cc 1 0cc 2 0CallThisDrawing ModelSpace AddCircle cc 100 画圆EndSub 曲线的拟合与内插 1 曲线的拟合曲线的拟合即只是尽可能的反应曲线特征点的趋势 并不一定严格的通过特征点 拟合方法 最小二乘拟合多项式拟合 曲线拟合 2 曲线内插函数f x 不直接给出表达式 而是给出在某个区间内n个点的函数值 实际上希望计算各点间的函数值 因此希望找到一个函数使得其通过已知的每一个点 三 裁剪 在使用计算机处理图形信息时 计算机内部存储的图形往往比较大 而屏幕显示的只是图的一部分 因此需要确定图形中哪些部分落在显示区之内 哪些落在显示区之外 以便只显示落在显示区内的那部分图形 这个选择过程称为裁剪 在进行裁剪时 对应于屏幕显示的那部分区域称为窗口 一般窗口定义为矩形 由上 下 左 右四条边围成 裁剪的实质 就是决定图形中哪些点 线段 文字以及多边形在窗口之内 主要内容 1 点的裁剪2 直线的裁剪3 多边形的裁剪4 字符的裁剪 1 点的裁剪 设窗口由x xL x xR y yB y yT围成 对于点 x y 判别两对不等式 xL x xR yB y yT 若四个不等式均成立 则点在窗口之内 否则 点在窗口之外 最简单的裁剪方法是把各种图形扫描转换为点之后 再判断各点是否在窗内 但那样太费时 一般不可取 这是因为有些图形组成部分全部在窗口外 可以完全排除 不必进行扫描转换 所以一般采用先裁剪再扫描转换的方法 2 直线段裁剪 直线段裁剪算法比较简单 但非常重要 是复杂图元裁剪的基础 因为复杂的曲线可以通过折线段来近似 从而裁剪问题也可以化为直线段的裁剪问题 常用的线段裁剪方法有三种 编码裁剪算法 Cohen Sutherland 中点分割算法和参数化算法 不介绍 Cohen Sutherland裁剪算法 该算法的思想是 对于每条线段P1P2分为三种情况处理 1 若P1P2完全在窗口内 则显示该线段P1P2简称 取 之 2 若P1P2明显在窗口外 则丢弃该线段 简称 弃 之 3 若线段既不满足 取 的条件 也不满足 弃 的条件 则在交点处把线段分为两段 其中一段完全在窗口外 可弃之 然后对另一段重复上述处理 问题 如何判断线段与窗口的关系 为使计算机能够快速判断一条直线段与窗口属何种关系 采用如下编码方法 延长窗口的边 将二维平面分成九个区域 每个区域赋予4位编码CtCbCrCl 其中各位编码的定义如下 1001 1000 1010 0010 0110 0000 0001 0100 0101 裁剪一条线段时 先求出P1P2所在的区号code1 code2 若code1 0 且code2 0 则线段P1P2在窗口内 应取之 若按位与 逻辑乘 运算code1 code2 0 则说明两个端点同在窗口的上方 下方 左方或右方 可判断线段完全在窗口外 可弃之 否则 按第三种情况处理 求出线段与窗口某边的交点 在交点处把线段一分为二 其中必有一段在窗口外 可弃之 在对另一段重复上述处理 在实现本算法时 不必把线段与每条窗口边界依次求交 只要按顺序检测到端点的编码不为0 才把线段与对应的窗口边界求交 Cohen Sutherland裁剪算法步骤 求交顺序 先上后下 先右后左 已知直线 X1 Y1 X2 Y2 与水平线Y K的交点为 与垂直直线X R的交点为 在进行裁剪是除了要求直线与边界线的交点外 还要判断端点与窗口的位置关系 为此有 若编码 00010 端点与左边界有交点 若编码 00100 端点与右边界有交点 若编码 01000 端点与下边界有交点 若编码 10000 端点与上边界有交点 Cohen Sutherland裁剪 如何判定应该与窗口的哪条边求交呢 编码中对应位为1的边 计算线段P1 x1 y1 P2 x2 y2 与窗口边界的交点if LEFT Cohen Sutherland直线裁剪算法小结 本算法的优点在于简单 易于实现 他可以简单的描述为将直线在窗口上边的部分删去 按上 下 右 左的顺序依次进行 处理之后 剩余部分就是可见的了 在这个算法中求交点是很重要的 他决定了算法的速度 特点 用编码方法可快速判断线段的完全可见和显然不可见 中点分割裁剪算法 基本思想 从P0点出发找出离P0最近的可见点 和从P1点出发找出离P1最近的可见点 这两个可见点的连线就是原线段的可见部分 与Cohen Sutherland算法一样首先对线段端点进行编码 并把线段与窗口的关系分为三种情况 对前两种情况 进行一样的处理 对于第三种情况 用中点分割的方法求出线段与窗口的交点 A B分别为距P0 P1最近的可见点 Pm为P0P1中点 中点分割算法 求线段与窗口的交点 从P0出发找距离P0最近可见点采用中点分割方法先求出P0P1的中点Pm 若P0Pm不是显然不可见的 并且P0P1在窗口中有可见部分 则距P0最近的可见点一定落在P0Pm上 所以用P0Pm代替P0P1 否则取PmP1代替P0P1 再对新的P0P1求中点Pm 重复上述过程 直到PmP1长度小于给定的控制常数为止 此时Pm收敛于交点 从P1出发找距离P1最近可见点采用上面类似方法 3 多边形裁剪 错觉 多边形裁剪是直线段裁剪的组合 新的问题 1 边界不再封闭 需要用窗口边界的恰当部分来封闭它 如何确定其边界 2 一个凹多边形可能被裁剪成几个小的多边形 如何确定这些小多边形的边界 Sutherland Hodgman算法 分割处理策略 将多边形关于矩形窗口的裁剪分解为多边形关于窗口四边所在直线的裁剪 流水线过程 左上右下 前边的结果是后边的输入 亦称逐边裁剪算法 基本思想是一次用窗口的一条边裁剪多边形 这里明确一点 多边形用顶点序列表示 被窗口的一条边裁剪后 仍为多边形 仍用顶点序列表示 裁剪的结果就是一系列的顶点 考虑窗口的一条边以及延长线构成的裁剪线 该线把平面分成两个部分 可见一侧 不可见一侧 多边形的各条边的两端点S P 它们与裁剪线的位置关系只有四种 Sutherland Hodgman算法 上述算法仅用一条裁剪边对多边形进行裁剪 得到一个顶点序列 作为下一条裁剪边处理过程的输入 Sutherland Hodgeman算法 对凸多边形应用本算法可以得到正确的结果 但是对凹多边形的裁剪将如图所示显示出一条多余的直线 这种情况在裁剪后的多边形有两个或者多个分离部分的时候出现 因为只有一个输出顶点表 所以表中最后一个顶点总是连着第一个顶点 解决这个问题有多种方法 一是把凹多边形分割成若干个凸多边形 然后分别处理各个凸多边形 二是修改本算法 沿着任何一个裁剪窗口边检查顶点表 正确的连接顶点对 4 字符裁剪 前面我们介绍了字符和文本的输出 当字符和文本部分在窗口内 部分在窗口外时 就提出了字符裁剪问题 字符串裁剪可按三个精度来进行 串精度 字符精度 以及笔画 象素精度 采用串精度进行裁剪时 将包围字串的外接矩形对窗口作裁剪 当字符串方框整个在窗口内时予以显示 否则不显示 采用字符精度进行裁剪时 将包围字的外接矩形对窗口作裁剪 某个字符方框整个落在窗口内予以显示 否则不显示 采用笔画 象素精度进行裁剪时 将笔划分解成直线段对窗口作裁剪 处理方法同上 换种说法 字符串剪裁有三种可选择的方法 1 字符串的有或无剪裁 all or none tex 基于字符串 效果如下图 其算法思想是 根据字符串所含字符的个数 及字符的大小 间隔 轨迹 求出字符串的外包盒 box 以外包盒的边界极值与窗边极值比较而决定该字串的去留 a 待裁剪字符串 b 串精度裁剪 c 字符精度裁剪 d 象素精度裁剪 2 字符的有或无剪裁 all or none character 基于字符 效果如下图 其算法思想是 1 先以字串box与窗边比较而决定字串

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论