ImageVerifierCode 换一换
格式:PPTX , 页数:58 ,大小:2.46MB ,
资源ID:5717284      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-5717284.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(海龟画图.pptx)为本站会员(weiwoduzun)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

海龟画图.pptx

1、C程序设计基础 海龟画图,林大 经管学院 瞿华,海龟画图,建立海龟画图项目 基本命令 循环与基本图形,一、建立海龟画图项目,文件-新建-项目,一、建立海龟画图项目,选择“C语言程序设计”选项卡中的“C语言-海龟作图” 注意填写项目名称,一、建立海龟画图项目,选择项目文件(.dev文件)的保存位置 最好将每个项目的文件放在单独的目录中,可使用该按钮创建新目录,一、建立海龟画图项目,项目向导会自动为项目生成一个可以运行的demo程序。直接在该程序基础上 进行修改即可。,一、建立海龟画图项目,注意: 打开已有项目时,要打开项目文件(.dev文件),二、基本命令,海龟作图(Turtle Graphic

2、s)的基本思想是这样的: 屏幕上有一只小海龟,我们可以给它下命令在屏幕上爬行 海龟爬行的时候,会在屏幕上留下痕迹,从而产生图形。,二、基本命令,程序初始化和控制相关: initWorld(width,height); 设置绘图窗口大小为width*height setSpeed(x); 设置海龟的爬行速度,1为最慢,1000为最快 setImmediate(x); 设置是否显示动画。0为显示,1为不显示。缺省为显示动画 pause(); 程序等待用户按任意键 setRewind(x); 设置海龟爬到屏幕边缘时是否自动回绕。0为自动回绕,1为不自动回绕。缺省为自动回绕,二、基本命令,海龟运动相关

3、: fd(x); forward(x); 向前爬行x个像素(x可以为小数) bk(x); backward(x); 向后爬行x个像素 lt(degree); leftTurn(degree); 海龟向左转degree度(degree可以为小数),rt(double); rightTurn(degree); 海龟向右转degree度 home(); 海龟返回起始点(屏幕正中央) void cs(); void clear(); void clearScreen(); 海龟返回起始点,同时清除屏幕上的所有痕迹,二、基本命令,画笔相关: void penUp(); void pu(); 抬笔,此时海

4、龟爬行不留痕迹 void pd(); void penDown(); 落笔,此时海龟爬行留痕迹 void setPenColor(color_t color); 设置画笔的颜色,常用颜色常量: BLACK 黑色 BLUE 蓝色 GREEN 绿色 CYAN 青色 RED 红色 MAGENTA 紫色 BROWN 棕色 LIGHTGRAY 浅灰色 DARKGRAY 深灰色 LIGHTBLUE 浅蓝色 LIGHTGREEN 浅绿色 LIGHTCYAN 浅青色 LIGHTRED 浅红色 LIGHTMAGENTA 浅紫色 YELLOW 黄色 WHITE 白色,2.1 简单示例,forward(100);

5、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 三角形绘制,思考(见下图) : 如果想

6、绘制一个底边和窗口下沿平行的三角形,该怎么办? 希望画完图后,海龟的头部还是指向正上方,该怎么办?,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); rightTur

7、n(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)

8、;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 多边形,我们

9、知道,任意多边形都可以由一系列连续下面两条语句的组合来绘出: 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;

10、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边型来模

11、拟圆形,也可以用同样的方法来绘制圆弧,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

12、;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(12

13、0);for(i=1;i=60;i+) forward(3);rightTurn(1);rightTurn(120);rightTurn(60); ,四、函数,在上一章绘制的过程中,我们可以发现,复杂图形的绘制可以分解为若干个的简单图形的绘制。 很多简单图形是类似的 如果能够将简单图形的绘制步骤用一条语句代替,我们的绘制过程将更简洁 在C语言里,我们可以用函数来实现这一点,4.1 自定义函数,void arcl(double side, double degree) int i;for (i=1;i=degree;i+) forward(side);leftTurn(1); void arcr

14、(double side, double degree) int i;for (i=1;i=degree;i+) forward(side);rightTurn(1); int main() . ,我们在主程序前面定义两个绘制弧线的函数arcr和arcl,4.1 自定义函数,有了这两个自定义函数,我们就可以在主函数中调用它们:,arcr(2,90); arcl(2,90);,4.1 自定义函数,利用这些函数,我们可以绘制出更复杂的图形:,void arcl(double side, double degree) void arcr(double side, double degree) int

15、 main() for (i=1;i=9;i+) arcr(1,360);rightTurn(40); ,4.1 自定义函数,void arcl(double side, double degree) void arcr(double side, double degree) int main() for (i=1;i=9;i+) for(j=1;j=2;j+)arcl(1,90);arcr(1,90);rightTurn(160); ,4.2 重复曲线,void polyspi(int side,int angle,int inc) int s=side;while(1) forward(s

16、ide);rightTurn(angle);side+=inc; int main() . ,使用函数,我们可以使主函数更简洁,也便于调整程序的参数:,4.2 重复曲线,void polyspi(int side,int angle,int inc) int main() polyspi(0,95,5); ,4.2 重复曲线,void polyspi(int side,int angle,int inc) int main() polyspi(0,90,5); ,4.2 重复曲线,void polyspi(int side,int angle,int inc) int main() polys

17、pi(0,120,5); ,4.2 重复曲线,void polyspi(int side,int angle,int inc) int main() polyspi(0,117,5); ,4.3 重复曲线2,void inspi(int side,int angle,int inc) int s=side;while(1) forward(side);rightTurn(angle);angle+=inc; int main() . ,我们来看看另外一种重复曲线:,4.3 重复曲线2,void inspi(int side,int angle,int inc) int main() inspi

18、(15,0,7); ,4.3 重复曲线2,void inspi(int side,int angle,int inc) int main() inspi(50,40,30); ,4.3 重复曲线2,void inspi(int side,int angle,int inc) int main() inspi(50,2,20); ,4.4 函数嵌套,void subspiro(int side, int angle,int n) int i;for (i=1;i=n;i+) forward(side*i);rightTurn(angle); void spiro(int side,int ang

19、le, int n) while(1) subspiro(side,angle,n); int main() ,在自定义函数中也可以调用已经定义的其他函数,例:,4.4 函数嵌套,void subspiro(int side, int angle,int n) void spiro(int side,int angle, int n) int main() spiro(30,90,10); ,4.4 函数嵌套,void subspiro(int side, int angle,int n) void spiro(int side,int angle, int n) int main() spi

20、ro(20,144,8); ,4.4 函数嵌套,void subspiro(int side, int angle,int n) void spiro(int side,int angle, int n) int main() spiro(20,60,10); ,五、递归作图,既然在函数内能调用其他函数,那么当然也可以调用自己。这就形成了递归。,5.1 斯宾斯基三角形,void nest_tri(double size) int i;if (size5) return ;for (i=1;i=3;i+) nest_tri(size/2);forward(size);rightTurn(120)

21、; int main() nest_tri(200); ,5.2 hilbert曲线,void hilbert(double size,int level, int parity) 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(siz

22、e);hilbert(size,level-1,-parity);leftTurn(parity*90); int main() hilbert(5,5,1); ,5.3 间接递归,除了直接自己调用自己形成递归外,也可以通过多个函数的相互调用形成间接的递归。 在编写间接递归函数时要注意,需要提供函数的前置声明。例如:,void cor_poly_step(double size,double angle); void cor_poly(double size,int angle) int totalturn=0;if (size10) return ; docor_poly_step(size

23、,angle);totalturn+=angle;while(totalturn % 360 !=0); void cor_poly_step(double size,double angle) forward(size);cor_poly(size/2,-angle);rightTurn(angle); int main() ,5.3 间接递归,void cor_poly_step(double size,double angle); void cor_poly(double size,int angle) void cor_poly_step(double size,double angl

24、e) int main() cor_poly(100,90); ,5.3 间接递归,void cor_poly_step(double size,double angle); void cor_poly(double size,int angle) void cor_poly_step(double size,double angle) int main() cor_poly(100,120); ,5.3 间接递归,void cor_poly_step(double size,double angle); void cor_poly(double size,int angle) void co

25、r_poly_step(double size,double angle) int main() cor_poly(50,60); ,5.3 间接递归,void cor_poly_step(double size,double angle); void cor_poly(double size,int angle) void cor_poly_step(double size,double angle) int main() cor_poly(50,144); ,课后练习(不强制要求),二、使用arcl和arcr函数,绘制下面的图形,一、使用海龟函数,绘制一个带门、窗和烟囱的小房子,参考书目,Turtle Geometry. Harold Abelson, Andrea A. diSessa. The MIT Press. 1980,

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报