海龟画图.pptx_第1页
海龟画图.pptx_第2页
海龟画图.pptx_第3页
海龟画图.pptx_第4页
海龟画图.pptx_第5页
免费预览已结束,剩余53页可下载查看

下载本文档

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

文档简介

C程序设计基础 海龟画图 林大经管学院瞿华 海龟画图 建立海龟画图项目基本命令循环与基本图形 一 建立海龟画图项目 文件 新建 项目 一 建立海龟画图项目 选择 C语言程序设计 选项卡中的 C语言 海龟作图 注意填写项目名称 一 建立海龟画图项目 选择项目文件 dev文件 的保存位置最好将每个项目的文件放在单独的目录中 可使用该按钮创建新目录 一 建立海龟画图项目 项目向导会自动为项目生成一个可以运行的demo程序 直接在该程序基础上进行修改即可 一 建立海龟画图项目 注意 打开已有项目时 要打开项目文件 dev文件 二 基本命令 海龟作图 TurtleGraphics 的基本思想是这样的 屏幕上有一只小海龟 我们可以给它下命令在屏幕上爬行海龟爬行的时候 会在屏幕上留下痕迹 从而产生图形 二 基本命令 程序初始化和控制相关 initWorld width height 设置绘图窗口大小为width heightsetSpeed x 设置海龟的爬行速度 1为最慢 1000为最快setImmediate x 设置是否显示动画 0为显示 1为不显示 缺省为显示动画pause 程序等待用户按任意键setRewind x 设置海龟爬到屏幕边缘时是否自动回绕 0为自动回绕 1为不自动回绕 缺省为自动回绕 二 基本命令 海龟运动相关 fd x forward x 向前爬行x个像素 x可以为小数 bk x backward x 向后爬行x个像素lt degree leftTurn degree 海龟向左转degree度 degree可以为小数 rt double rightTurn degree 海龟向右转degree度home 海龟返回起始点 屏幕正中央 voidcs voidclear voidclearScreen 海龟返回起始点 同时清除屏幕上的所有痕迹 二 基本命令 画笔相关 voidpenUp voidpu 抬笔 此时海龟爬行不留痕迹voidpd voidpenDown 落笔 此时海龟爬行留痕迹voidsetPenColor color tcolor 设置画笔的颜色 常用颜色常量 BLACK黑色BLUE蓝色GREEN绿色CYAN青色RED红色MAGENTA紫色BROWN棕色LIGHTGRAY浅灰色DARKGRAY深灰色LIGHTBLUE浅蓝色LIGHTGREEN浅绿色LIGHTCYAN浅青色LIGHTRED浅红色LIGHTMAGENTA浅紫色YELLOW黄色WHITE白色 2 1简单示例 forward 100 rightTurn 90 forward 100 rightTurn 90 forward 100 rightTurn 90 forward 100 rightTurn 90 绘制正方形 2 1 1正方形绘制 for i 1 i 4 i forward 100 rightTurn 90 绘制正方形 使用循环 2 1 2三角形绘制 绘制三角形 思考 每次绘制完一条边后 海龟应该转多少度 应循环多少次 for i 1 i 3 i forward 100 rightTurn 120 2 1 2三角形绘制 思考 见下图 如果想绘制一个底边和窗口下沿平行的三角形 该怎么办 希望画完图后 海龟的头部还是指向正上方 该怎么办 rightTurn 30 for i 1 i 3 i forward 100 rightTurn 120 leftTurn 30 2 1 3复合图形 思考 想绘制如下的图形 该怎么办 三 循环绘图 使用循环和多重循环 可以绘制出更多美丽的图案 3 1美丽花样 forward 100 rightTurn 90 forward 100 rightTurn 90 forward 50 rightTurn 90 forward 50 rightTurn 90 forward 100 rightTurn 90 forward 25 rightTurn 90 forward 25 rightTurn 90 forward 50 3 1美丽花样 for i 1 i 4 i forward 100 rightTurn 90 forward 100 rightTurn 90 forward 50 rightTurn 90 forward 50 rightTurn 90 forward 100 rightTurn 90 forward 25 rightTurn 90 forward 25 rightTurn 90 forward 50 循环4次 3 1美丽花样 错开一点距离和角度 不断重复 for forward 100 rightTurn 90 forward 100 rightTurn 90 forward 50 rightTurn 90 forward 50 rightTurn 90 forward 100 rightTurn 90 forward 25 rightTurn 90 forward 25 rightTurn 90 forward 50 rightTurn 10 forward 50 3 2多边形 我们知道 任意多边形都可以由一系列连续下面两条语句的组合来绘出 forwar side rightTurn angle 因此 我们可以准备下面这段程序 只要改变参数变量n side和angle的值 就能绘制出多种不同多变形来 for i 1 i n i forward side rightTurn angle for i 1 i n i forward side rightTurn angle side 100 angle 72 n 5 side 100 angle 144 n 5 side 100 angle 60 n 6 side 100 angle 108 n 10 3 3圆与正多边形 我们知道 任意凸多边形的内角和等于 边数 2 180所以可以这样来画任意的n正多边形 边长为x 计算每个角的度数angle n 2 180 n循环n次 每次 海龟前进x海龟右转180 angle度 angle n 2 180 0 n for i 1 i n i forward x rightTurn 180 angle 3 3圆与多边形 正五边形 边长为100 正六边形 边长为100 正八边形 边长为100 3 3圆与多边形 当n越来越大时 我们会发现多边形越来越接近圆形我们可以用正360边型来模拟圆形 也可以用同样的方法来绘制圆弧 side 3 for i 1 i 360 i forward side rightTurn 1 3 3圆与多边形 用两个60度的圆弧组成一片叶子 for i 1 i 60 i forward 2 rightTurn 1 rightTurn 120 for i 1 i 60 i forward 2 rightTurn 1 让海龟转回起始方向rightTurn 120 3 4多重循环绘图 利用多重循环 我们可以在圆和多边形的基础上绘制出更复杂的图案 for j 1 j 6 j for i 1 i 360 i forward 2 rightTurn 1 rightTurn 60 3 4多重循环绘图 for j 1 j 6 j for i 1 i 6 i forward 100 rightTurn 60 rightTurn 60 3 4多重循环绘图 for j 1 j 8 j for i 1 i 6 i forward 100 rightTurn 60 rightTurn 45 3 4多重循环绘图 for j 1 j 6 j for i 1 i 60 i forward 3 rightTurn 1 rightTurn 120 for i 1 i 60 i forward 3 rightTurn 1 rightTurn 120 rightTurn 60 四 函数 在上一章绘制的过程中 我们可以发现 复杂图形的绘制可以分解为若干个的简单图形的绘制 很多简单图形是类似的如果能够将简单图形的绘制步骤用一条语句代替 我们的绘制过程将更简洁在C语言里 我们可以用函数来实现这一点 4 1自定义函数 voidarcl doubleside doubledegree inti for i 1 i degree i forward side leftTurn 1 voidarcr doubleside doubledegree inti for i 1 i degree i forward side rightTurn 1 intmain 我们在主程序前面定义两个绘制弧线的函数arcr和arcl 4 1自定义函数 有了这两个自定义函数 我们就可以在主函数中调用它们 arcr 2 90 arcl 2 90 4 1自定义函数 利用这些函数 我们可以绘制出更复杂的图形 voidarcl doubleside doubledegree voidarcr doubleside doubledegree intmain for i 1 i 9 i arcr 1 360 rightTurn 40 4 1自定义函数 voidarcl doubleside doubledegree voidarcr doubleside doubledegree intmain for i 1 i 9 i for j 1 j 2 j arcl 1 90 arcr 1 90 rightTurn 160 4 2重复曲线 voidpolyspi intside intangle intinc ints side while 1 forward side rightTurn angle side inc intmain 使用函数 我们可以使主函数更简洁 也便于调整程序的参数 4 2重复曲线 voidpolyspi intside intangle intinc intmain polyspi 0 95 5 4 2重复曲线 voidpolyspi intside intangle intinc intmain polyspi 0 90 5 4 2重复曲线 voidpolyspi intside intangle intinc intmain polyspi 0 120 5 4 2重复曲线 voidpolyspi intside intangle intinc intmain polyspi 0 117 5 4 3重复曲线2 voidinspi intside intangle intinc ints side while 1 forward side rightTurn angle angle inc intmain 我们来看看另外一种重复曲线 4 3重复曲线2 voidinspi intside intangle intinc intmain inspi 15 0 7 4 3重复曲线2 voidinspi intside intangle intinc intmain inspi 50 40 30 4 3重复曲线2 voidinspi intside intangle intinc intmain inspi 50 2 20 4 4函数嵌套 voidsubspiro intside intangle intn inti for i 1 i n i forward side i rightTurn angle voidspiro intside intangle intn while 1 subspiro side angle n intmain 在自定义函数中也可以调用已经定义的其他函数 例 4 4函数嵌套 voidsubspiro intside intangle intn voidspiro intside intangle intn intmain spiro 30 90 10 4 4函数嵌套 voidsubspiro intside intangle intn voidspiro intside intangle intn intmain spiro 20 144 8 4 4函数嵌套 voidsubspiro intside intangle intn voidspiro intside intangle intn intmain spiro 20 60 10 五 递归作图 既然在函数内能调用其他函数 那么当然也可以调用自己 这就形成了递归 5 1斯宾斯基三角形 voidnest tri doublesize inti if size 5 return for i 1 i 3 i nest tri size 2 forward size rightTurn 120 intmain nest tri 200 5 2hilbert曲线 voidhilbert doublesize intlevel intparity if level 0 return leftTurn parity 90 hilbert size level 1 parity forward size rightTurn parity 90 hilbert size level 1 parity forward size hilbert size level 1 parity rightTurn parity 90 forward size hilbert size level 1 parity leftTurn parity 90 intmain hilbert 5 5 1 5 3间接递归 除了直接自己调用自己形成递归外 也可以通过多个函数的相互调用形成间接的递归 在编写间接递归函数时要注意 需要提供函数的前置声明 例如 voidcor poly step doublesize doubleangle voidcor poly doublesize intangle inttotalturn 0 if size 10 return do cor poly step size angle totalturn angle while totalturn 360 0 voidcor poly step doublesize doubleangle forward size cor poly size 2 angle rightTurn angle intmain 5 3间接递归 voidcor poly step doublesize doubl

温馨提示

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

评论

0/150

提交评论