版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Python语言程序课程设计(报告)《Python语言程序课程设计》(报告)题目:爱心图像绘制
摘要本文主要设计了使用Pythonturtle库,绘制和创建各种类型的形状和图像。该设计的Python版本是
Python3.x
,Python环境是IDLE。turtle库包含创建图像所需的所有方法和函数。软件采用Pythonturtle库语言编程。实现的主要功能是绘制和创建各种类型的形状和图像。本设计的优点是理解Python概念的一种简单而通用的方式,且它是一个内置库,所以不需要安装任何新包。可以应用到绘制形状、创建设计,制作图像,创建迷你游戏,动画等领域。Turtle,也叫海龟渲染器,使用Turtle库画图也叫海龟作图。Turtle库是Python语言中一个很流行的绘制图像的函数库。海龟渲染器,和各种三维软件都有着良好的结合。功能强大,使用方便。该渲染器的特色在于其渲染速度可以优海龟渲染器,和各种三维软件都有着良好的结合。功能强大,使用方便。化得非常快,相比起mentalray来说,这是他的一大优点。尤其是在全局光与finalgather联用的时候效果更是明显。海龟渲染器在渲染大场景时非常有效,其对于光线的处理和色彩的鲜艳程度都要更胜三维软件自带的渲染器。其缺点在于对于三维软件的程序纹理贴图的支持不够,很多情况下并不能对它的材质球使用程序纹理贴图。关于跳动爱心。其实,画这个爱心,主要有几个要素:①基础爱心②爱心周边的散列点③爱心抖动。这几个要素,都有对应的数学算法,套用相应算法就可以实现。关键词:
Python3.x
IDLEPythonturtle库制作图像目录TOC\o"1-3"\h\u第1章概述 第1章概述课题选择与其他编程语言相比,Python更易于学习。它的语法很简单,与英语非常相似。Python提供了许多有用的功能特性,这些功能使其相比其他编程语言更流行也更易于学习。它支持面向对象的编程,也支持面向过程编程没有使用分号或花括号,而是用缩进来定义代码块,可以更清晰地理解代码块。Python可以使用几行代码来执行复杂的任务。[2]Python可以在Windows,Linux,UNIX和Macintosh等不同平台上平等运行。因此,可以说Python是一种可移植的语言。它使程序员只需编写一次程序即可为多个平台开发软件。每个人都可以免费使用Python。[6]可在其官方网站上免费获得。它在全球拥有一个庞大的社区,致力于开发新的python模块和功能。任何人都可以为Python社区做出贡献。开源意味着任何人都可以不花一分钱就可以下载其源代码。Python支持面向对象的语言,并且类和对象的概念应运而生。它支持继承、多态性和封装等。[4]面向对象的过程有助于程序员编写可重用的代码;并以较少的代码来开发应用程序。Python的生态系统中有着为机器学习,Web开发人员和脚本编写等各个领域提供了广泛的库。有各种机器学习库和数据分析、数据科学库,例如Tensorflow,,Pandas,Numpy,Keras和Pytorch等turtle库是python的基础绘图库,这个库被介绍为一个最常用的用来给python新手介绍编程知识的方法库,其主要是用于程序设计入门,是标准库之一,利用turtle可以制作很多复杂的绘图。简单理解turtle库就是一个用于图形绘制的基础库。1.2设计目的turtle库的使用目的是解决图像绘制一类的问题,掌握了turtle库的使用即可完成一些简单的图像制作与绘制。我们可以通过代码来控制海龟的爬行轨迹便能绘制出各种各样的图案。[9]绘图时会自动打开一个绘图窗口可以查看绘图的动态过程,这个过程相当有趣。1.3设计工具画布:画布就是turtle为我们展开用于绘图区域,我们可以设置它的大小和初始位置
turtle.screensize(canvwidth=none,canvheight=none,bg=none)turtle.screensize(800,600,”green”)
#画布的宽,高,画布颜色turtle.screensize()
#返回默认大小(400,300)画笔turtle.pensize()
设置画笔的宽度turtle.pencolor()
传入参数可设置画笔的颜色,可以是字符串”green”,”red”,也可以RGB3元组,不传入参数则返回当前画笔的颜色turtle.speed()
设置画笔的移动速度,画笔绘制的速度范围[0,10]的整数,数字越大越快画笔运动命令:turtle.forward(distance)
向当前画笔方向移动distance像素长turtle.backward(distance)
向当前画笔相反方向移动distance像素长度turtle.right(degree)
顺时针移动degree°turtle.left(degree)
逆时针移动degree°turtle.seth(angle)
只改变海龟的行进方向(角度按逆时针),但不行进,angle为绝对度数turtle.pendown()
移动时绘制图形,缺省时也会绘制。落笔turtle.penup()
移动时不绘制图形,用于换个地方绘制时使用,提笔turtle.goto(x,y)
将画笔移动到坐标为x,y的位置turtle.speed()
画笔绘制的速度范围[0,10]整数,建议加在前面turtle.circle()
画圆,半径为正(负),表示圆心在画笔的左边(右边)画圆画笔的控制命令:turtle.pensize(width)
绘制图形时的宽度turtle.pencolor()
画笔颜色turtle.fillcolor(colorstring)
绘制图形的填充颜色turtle.color(color1,color2)
同时设置pencolor=color1,fillcolor=color2
设置画笔颜色和填充颜色turtle.filling()
返回当前状态是否在填充状态turtle.begin_fill()
准备开始填充图形turtle.end_fill()
填充完成turtle.hideturtle()
隐藏箭头显示turtle.showturtle()
与hideturtle()函数对应全局控制命令:print(turtle.pos())
获取鼠标当前位置并输出turtle.clear()
清空turtle窗口,但是turtle的位置和状态不会改变turtle.reset()
清空窗口,重置turtle状态为起始状态turtle.undo()
撤销上一个turtle动作turtle.isvisible()
返回当前turtle是否可见stamp
()
复制当前图形第2章设计内容2.1题目1跳动爱心2.11设计任务及要求请运用函数绘制黑色背景粉色爱心动图,且在中心输入文字(呈现代码和运行结果)2.12程序代码、importrandomfrommathimportsin,cos,pi,logfromtkinterimport*CANVAS_WIDTH=640#画布的宽CANVAS_HEIGHT=640#画布的高CANVAS_CENTER_X=CANVAS_WIDTH/2#画布中心的X轴坐标CANVAS_CENTER_Y=CANVAS_HEIGHT/2#画布中心的Y轴坐标IMAGE_ENLARGE=11#放大比例HEART_COLOR="#e77c8e"#心的颜色defheart_function(t,shrink_ratio:float=IMAGE_ENLARGE):"""“爱心函数生成器”:paramshrink_ratio:放大比例:paramt:参数:return:坐标"""#基础函数x=16*(sin(t)**3)y=-(13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t))#放大x*=shrink_ratioy*=shrink_ratio#移到画布中央x+=CANVAS_CENTER_Xy+=CANVAS_CENTER_Yreturnint(x),int(y)defscatter_inside(x,y,beta=0.15):"""随机内部扩散:paramx:原x:paramy:原y:parambeta:强度:return:新坐标"""ratio_x=-beta*log(random.random())ratio_y=-beta*log(random.random())dx=ratio_x*(x-CANVAS_CENTER_X)dy=ratio_y*(y-CANVAS_CENTER_Y)returnx-dx,y-dydefshrink(x,y,ratio):"""抖动:paramx:原x:paramy:原y:paramratio:比例:return:新坐标"""force=-1/(((x-CANVAS_CENTER_X)**2+(y-CANVAS_CENTER_Y)**2)**0.6)#这个参数...dx=ratio*force*(x-CANVAS_CENTER_X)dy=ratio*force*(y-CANVAS_CENTER_Y)returnx-dx,y-dydefcurve(p):"""自定义曲线函数,调整跳动周期:paramp:参数:return:正弦"""#可以尝试换其他的动态函数,达到更有力量的效果(贝塞尔?)return2*(3*sin(4*p))/(2*pi)classHeart:"""爱心类"""def__init__(self,generate_frame=20):self._points=set()#原始爱心坐标集合self._edge_diffusion_points=set()#边缘扩散效果点坐标集合self._center_diffusion_points=set()#中心扩散效果点坐标集合self.all_points={}#每帧动态点坐标self.build(2000)self.random_halo=1000self.generate_frame=generate_frameforframeinrange(generate_frame):self.calc(frame)defbuild(self,number):#爱心for_inrange(number):t=random.uniform(0,2*pi)#随机不到的地方造成爱心有缺口x,y=heart_function(t)self._points.add((x,y))#爱心内扩散for_x,_yinlist(self._points):for_inrange(3):x,y=scatter_inside(_x,_y,0.05)self._edge_diffusion_points.add((x,y))#爱心内再次扩散point_list=list(self._points)for_inrange(4000):x,y=random.choice(point_list)x,y=scatter_inside(x,y,0.17)self._center_diffusion_points.add((x,y))@staticmethoddefcalc_position(x,y,ratio):#调整缩放比例force=1/(((x-CANVAS_CENTER_X)**2+(y-CANVAS_CENTER_Y)**2)**0.520)#魔法参数dx=ratio*force*(x-CANVAS_CENTER_X)+random.randint(-1,1)dy=ratio*force*(y-CANVAS_CENTER_Y)+random.randint(-1,1)returnx-dx,y-dydefcalc(self,generate_frame):ratio=10*curve(generate_frame/10*pi)#圆滑的周期的缩放比例halo_radius=int(4+6*(1+curve(generate_frame/10*pi)))halo_number=int(3000+4000*abs(curve(generate_frame/10*pi)**2))all_points=[]#光环heart_halo_point=set()#光环的点坐标集合for_inrange(halo_number):t=random.uniform(0,2*pi)#随机不到的地方造成爱心有缺口x,y=heart_function(t,shrink_ratio=11.6)#魔法参数x,y=shrink(x,y,halo_radius)if(x,y)notinheart_halo_point:#处理新的点heart_halo_point.add((x,y))x+=random.randint(-14,14)y+=random.randint(-14,14)size=random.choice((1,2,2))all_points.append((x,y,size))#轮廓forx,yinself._points:x,y=self.calc_position(x,y,ratio)size=random.randint(1,3)all_points.append((x,y,size))#内容forx,yinself._edge_diffusion_points:x,y=self.calc_position(x,y,ratio)size=random.randint(1,2)all_points.append((x,y,size))forx,yinself._center_diffusion_points:x,y=self.calc_position(x,y,ratio)size=random.randint(1,2)all_points.append((x,y,size))self.all_points[generate_frame]=all_pointsdefrender(self,render_canvas,render_frame):forx,y,sizeinself.all_points[render_frame%self.generate_frame]:render_canvas.create_rectangle(x,y,x+size,y+size,width=0,fill=HEART_COLOR)defdraw(main:Tk,render_canvas:Canvas,render_heart:Heart,render_frame=0):render_canvas.delete('all')render_heart.render(render_canvas,render_frame)render_canvas.create_text(320,320,text="刘兰芳",fill='#e77c8e',font=('微软雅黑',15,'bold'))#此处可自定义main.after(160,draw,main,render_canvas,render_heart,render_frame+1)if__name__=='__main__':root=Tk()#一个Tkroot.title('宝贝爱你哟')#此处可自定义canvas=Canvas(root,bg='black',height=CANVAS_HEIGHT,width=CANVAS_WIDTH)canvas.pack()heart=Heart()#心draw(root,canvas,heart)#开始画root.mainloop()2.4.3编译调试及运行结果2.2题目2奥运五环2.2.1设计任务及要求请用pythonturtle库绘制奥运五环,且符合相应的颜色(呈现代码和运行结果)2.2.2程序代码importturtler=45xy_list=[(-110,-25),(0,-25),(110,-25),(-55,-75),(55,-75)]color_list=['red','yellow','green','blue','black']turtle.pensize(5)foriinrange(5):turtle.penup()turtle.goto(xy_list[i][0],xy_list[i][1])turtle.pendown()#绘制图案turtle.color(color_list[i])turtle.circle(r)turtle.begin_fill()turtle.end_fill()turtle.hideturtle()turtle.done()2.2.3编译调试及运行结果2.3题目3多瓣小花2.3.1设计任务及要求请用pythonturtle库绘制多瓣小花,使其多片花瓣,且带有绿色花叶。(呈现代码和运行结果)2.3.2程序代码importturtleastt.speed(0)#花柄t.penup()t.goto(0,-150)t.pendown()t.pensize(2)t.setheading(90)t.color('brown')t.fd(300)#花瓣t.pensize(1)t.color('black','red')t.begin_fill()foriinrange(10):t.left(45)t.circle(80,60)t.left(120)t.circle(80,60)t.end_fill()#叶子foriinrange(2):t.penup()t.goto(0,10-50*i)x=20+80*it.setheading(x)t.pendown()t.color('brown','green')t.begin_fill()t.circle(60,60)t.left(120)t.circle(60,60)t.end_fill()t.hideturtle()2.3.3编译调试及运行结果2.4题目4六边形2.1.1设计任务及要求请用pythonturtle库绘制一个绿色正六边形(呈现代码和运行结果)2.1.2程序代码importturtleturtle.setup(1000,450,200,200)#画布的大小及位置turtle.penup()#抬起画笔turtle.fd(-400)#移动画笔,也可使用turtle.goto(x,y)让画笔移动到相应的坐标turtle.seth(90)#改变画笔的朝向,让画笔方向从起始方向开始,逆时针旋转90度turtle.fd(100)turtle.seth(0)#让画笔方向变为起始方向turtle.pendown()#落下画笔turtle.pensize(10)#调正画笔的粗细turtle.penup()turtle.fd(250)turtle.pendown()turtle.color("green")foriinrange(6):turtle.fd(100)turtle.seth(-60*(i+1))turtle.done()2.1.3编译调试及运行结果总结1、importturtle:直接引入对应的库备注:使用这种方式引入库,那么在对turtle库中的函数进行调用时,需要使用这种形式:turtle.函数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 绥化市庆安县2025-2026学年第二学期五年级语文期末考试卷(部编版含答案)
- 锡林郭勒盟正镶白旗2025-2026学年第二学期二年级语文第八单元测试卷部编版含答案
- 铁岭市开原市2025-2026学年第二学期五年级语文第七单元测试卷(部编版含答案)
- 呼伦贝尔市根河市2025-2026学年第二学期五年级语文第八单元测试卷(部编版含答案)
- 大理白族自治州漾濞彝族自治县2025-2026学年第二学期三年级语文期末考试卷(部编版含答案)
- 南充市南部县2025-2026学年第二学期四年级语文期末考试卷(部编版含答案)
- 安庆市郊区2025-2026学年第二学期五年级语文第七单元测试卷(部编版含答案)
- 2026年深圳物业条例考试试题及答案
- 项目4 任务3 探索自然语言处理技术的实践认知与体验
- 航空物流与供应链管理试题
- 中考英语阅读理解练习与重点词汇汇编
- 《古蜀文明保护传承工程实施方案》
- 建筑垃圾资源化监理实施细则
- 2026年太原市高三下学期一模语文试卷和答案
- 2025-2030中国导电塑料市场投资风险及应用趋势预测研究报告
- 中国成人体重管理指南2025解读
- 2025年宁波能源实业有限公司招聘备考题库及完整答案详解一套
- 行政事业单位会计监督制度
- 宁波水务面试常见面试技巧解析
- 钻井液与钻井的关系
- 第八章 公关礼仪文体的写作
评论
0/150
提交评论