计算机图形学2010_02基本图形生成.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机图形学2010_02基本图形生成

第二章 基本图形生成 所谓基本图形生成就是:将用参数定义的平面图形元素转换为点阵,确定出图形元素在点阵平面上对应的所有点。 平面上的图形元素分为三类:点、线、面。 点无需生成,可以直接按坐标值输出到图形设备上,点的输出也是任何点阵图形设备必须具备的基本功能,其是其它图形元素输出的基础。 线主要包括:直线、圆周线、椭圆周线、二次曲线、三次曲线。 面主要包括:多边形,圆、椭圆及任意封闭区域。 第一节 直线的生成 一、问题 在一个矩形的均匀点阵平面中,给定两个整数点(x1, y1),(x2, y2)。确定该两点的连线在点阵平面中所经过的所有点。 在点阵平面中点的坐标值只能取整数。 二、直线方程法 1. 求直线方程 由给定的两点(x1, y1),(x2, y2),可得到一个直线方程:y=kx+b k和b为方程中的两个参数,分别为斜率和截距,可由给定的两点计算得到,如下: k=(y2-y1)/ (x2-x1) b=y1-kx1 该方程表示的是一个无限直线,作为直线段还需要加上x的值域[x1, x2],由此得到两点之间直线段的方程表示如下: y=kx+b x∈[x1, x2] 例1:给定两点(1,1),(9,6),求其方程。 k=(6-1)/ (9-1)=5/8=0.625 b=1-0.625*1=0.375 x的值域为[1, 9] 得:y=0.625x+0.375 x∈[1, 9] 2. 点阵生成 生成方法:在x的值域范围内取出所有的x整数值,逐一带入直线方程计算得到相应的y值并取整,即得到直线段上所有的像素点的坐标值。 例2:生成上例中两点之间的像素点。 y(1)=0.625*1+0.375=1,得(1,1) y(2)=0.625*2+0.375=1.625≈2,得(2,2) y(3)=0.625*3+0.375=2.25≈2,得(3,2) y(4)=0.625*4+0.375=2.875≈3,得(4,3) y(5)=0.625*5+0.375=3.5≈4,得(5,4) y(6)=0.625*6+0.375=4.125≈4,得(6,4) y(7)=0.625*7+0.375=4.75≈5,得(7,5) y(8)=0.625*8+0.375=5.375≈5,得(8,5) y(9)=0.625*9+0.375=6,得(9,6) 将计算结果绘入点阵平面中,如下: 3. 存在的问题 例3:生成(1,1),(6,9)之间的直线。 (1)求直线方程 k=(9-1)/ (6-1)=8/5=1.6 b=1-1.6*1=-0.6 得:y=1.6x-0.6 x∈[1, 6] (2)生成点阵 x值域范围内的整数值:1, 2, 3, 4, 5, 6 计算各点的y值: y(1)=1.6*1-0.6=1,得(1,1) y(2)=1.6*2-0.6=2.6≈3,得(2,3) y(3)=1.6*3-0.6=4.2≈4,得(3,4) y(4)=1.6*4-0.6=5.8≈6,得(4,6) y(5)=1.6*5-0.6=7.4≈7,得(5,7) y(6)=1.6*6-0.6=9,得(6,9) 将计算结果绘入点阵平面中,如下: 直线出现了间断。 问题在于x的值域范围比y的值域范围要小,按x的值域取出的点,无法完整覆盖y的值域,因此直线出现间断。 4. 解决的方法 当y的值域大于x的值域时,即:|y2-y1|>|x2-x1|时,将x与y对调,求得如下形式的直线方程: x=ky+b y∈[y1, y2] 其中:k=(x2-x1)/ (y2-y1) b=x1-ky1 然后从y的值域中取出整数值,代入方程计算出各点的x坐标。 三、数值微分法 1. 对直线方程法的分析 对直线方程法的求解过程进行一下观察,可以看到,相邻两个点取整前的y值之差总是等于直线的斜率k。这是因为相邻两点的x值总是相差1,根据直线方程的形式可以证明两点的y值必然相差k。 设第i点的x值为xi,第i+1点为xi+1,有:xi+1=xi+1。 这两点的y值分别为: yi=kxi+b yi+1=kxi+1+b=k(xi+1)+b=kxi+k+b 所以:yk+1-yk=k 根据这一规律,就可以将直线方程法的计算过程进行简化,各点的y值可以在上一个点y值的基础上加上k得到,而不需代入直线方程计算。下面就由这一思路构造出算法的计算步骤。 2. 计算步骤 对给定的两个直线端点(x1, y1),(x2, y2),有:x2≥x1,|x2-x1|>|y2-y1|。 (1)求得两点连线的斜率:k=(y2-y1)/(x2-x1) (2) px1=x1,py1=y1,得直线上的点(px1, py1);令i=1; (3)若pxi=x2,则计算结束;否则

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档