海龟画图

上传人:小** 文档编号:58863568 上传时间:2018-11-02 格式:PPTX 页数:58 大小:2.46MB
返回 下载 相关 举报
海龟画图_第1页
第1页 / 共58页
海龟画图_第2页
第2页 / 共58页
海龟画图_第3页
第3页 / 共58页
海龟画图_第4页
第4页 / 共58页
海龟画图_第5页
第5页 / 共58页
点击查看更多>>
资源描述

《海龟画图》由会员分享,可在线阅读,更多相关《海龟画图(58页珍藏版)》请在金锄头文库上搜索。

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() polyspi(0,120,5); ,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号