网站大量收购独家精品文档,联系QQ:2885784924

计算机图形学OpenGL(第三版)第三章更多的绘图工具技术总结.ppt

计算机图形学OpenGL(第三版)第三章更多的绘图工具技术总结.ppt

  1. 1、本文档共52页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3.3.6 练习 3.3.6 绘制蛇(龟) 形图 3.3.7 绘制熟知的 logo 3.3.7 用字符串命令绘制 蛇(龟)形图Turtle F 调用 forward(d, 1); {d为距离} L 调用 turn(60); {左转} R 调用 turn(-60). {右转} 编程实现下面的字符串命令 FLFLFLFRFLFLFLFRFLFLFLFR. (见第9章产生分形程序) 3.3.8 绘制曲径 一个曲径如右图,通常由一个连续的曲径组成。一个经常看到曲径如古希腊花瓶,中国或来自不同国家的面砖。这里的基本图案是为蛇形图。 3.3.8 绘制曲径 一个曲径如右图,通常由一个连续的曲径组成。一个经常看到的曲径如古希腊花瓶,中国或来自不同国家的面砖。这里的基本图案是为蛇形图。 曲径a)由基本图案b)构成。 设置线宽。绘制雕刻图案。 3.3.9 绘制其他类型的曲径 3.3.10 绘制精心制作的曲径 3.3.11 实现螺旋线 编写polyspiral(float length, float angle,float incr, int num) ; 绘制螺旋线由多条折线组成。 每条线段增加长度和旋转角度。 3.3.12 螺旋线是一个迭代函数系统(IFS)吗? 你能把一个螺旋线描述为第二章定义的迭代函数吗? 指定每一次迭代的龟形图迭代函数。 3.3,13 Polyspiral()函数的递归形式。 重写 polyspiral()用递归形式,这样polyspiral() 有dist参数,调用时dist+inc。 加入停止标准。 * 3.4 正多边形、圆和圆弧 3.4.1 正多边形 图形学中经常绘制的一种形状是有n条边的正多边形。一个多边形是正的,如果它是简单的,而且所有的边相等,所有的内角相等。我们称有n条边的正多边形为正n边形,常见的例子是正四边形(正方形),正八边形等等。 如果正n边形有很多条边,则这个正n边形看上去会像一个圆。事实上这是绘制圆的方法。正n边形的n个顶点位于一个圆上,即所谓的正n边形的外接圆,其位置容易被计算。 3.4.2 正n边形的变种 基于正n边形顶点,可以绘制有趣的变种。 a.正7边形 b. 一个星形 c. 一个7花环 例子3.4.1 花环和黄金5花环 花环是每个顶点和其他顶点相连的正n边形。 绘制花环很容易:只要将每一个点和其他顶点 相连。绘制花环的代码见第三章代码.doc: 右图为5花环和它的无穷嵌套--五边形和 五角星 例子3.4.2 基于两个同心多边形的图形 右图显示了一些由两个同心圆建造的图像。 外半径是R,内半径是fR,f为某个因子。 每个图形都使用了一个正n边形的变种, 其半径在内径和外径之间交替。 练习: 练习3.4.1 星形和花环 将正五边形每隔一个点相连,就可以得到 一个五角星。推广到任意一个n是奇数的正 n边形,改写moveTo和lineTo函数 练习3.4.2 绘制一个著名的标志图 右图为一个标志,它包括了一个图片的三个实例,相互旋转了一定的角度。 3.4.3 绘制圆弧和圆 许多艺术、建筑和科学中的图形需要将圆弧按某种有意义的方式放置。一个圆弧可以方便的通过其中心c,外接圆的半径R以及开始的角度a和它展开的角度b来表示。我们约定如果b是正的,则圆弧从a逆时针方向展开。 绘制圆弧的代码: void drawArc(Point2 center, float radius, float startAngle, float sweep) { // startAngle and sweep are in degrees const int n = 30; // number of intermediate segments in arc float angle = startAngle * 3/ 180; // initial angle in radians float angleInc = sweep * 3/(180 * n); // angle increment float cx = center.getX(), cy = center.getY(); cvs.moveTo(cx + radius * cos(angle), cy + radius * sin(angle)); for(int k = 1; k n; k++, angle += angleInc) cvs.lineTo(cx + radius * cos(angle), cy + radius * sin(ang

您可能关注的文档

文档评论(0)

502992 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档