海龟画图 python太阳花_python画图之“小海龟”turtle

“小海龟”turtle是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形。

turtle绘图的基础知识:

1.画布(canvas)

画布就是turtle为我们展开用于绘图区域,我们可以设置它的大小和初始位置。

设置画布大小

turtle.screensize(canvwidth=None,canvheight=None,bg=None),参数分别为画布的宽(单位像素),高,背景颜色。

如:turtle.screensize(800,600,"green")

turtle.screensize()#返回默认大小(400,300)

turtle.setup(width=0.5,height=0.75,startx=None,starty=None),参数:width,height:输入宽和高为整数时,表示像素;为小数时,表示占据电脑屏幕的比例,(startx,starty):这一坐标表示矩形窗口左上角顶点的位置,如果为空,则窗口位于屏幕中心。

如:turtle.setup(width=0.6,height=0.6)

turtle.setup(width=800,height=800,startx=100,starty=100)

2.画笔

2.1画笔的状态

在画布上,默认有一个坐标原点为画布中心的坐标轴,坐标原点上有一只面朝x轴正方向小乌龟。这里我们描述小乌龟时使用了两个词语:坐标原点(位置),面朝x轴正方向(方向),turtle绘图中,就是使用位置方向描述小乌龟(画笔)的状态。

2.2画笔的属性

画笔(画笔的属性,颜色、画线的宽度等)

1)turtle.pensize():设置画笔的宽度;

2)turtle.pencolor():没有参数传入,返回当前画笔颜色,传入参数设置画笔颜色,可以是字符串如"green","red",也可以是RGB3元组。

3)turtle.speed(speed):设置画笔移动速度,画笔绘制的速度范围[0,∞]整数,数字越大越快。当前版本并不是如外面所说只有0到10,亲测100,300皆可。

2.3绘图命令

操纵海龟绘图有着许多的命令,这些命令可以划分为3种:一种为运动命令,一种为画笔控制命令,还有一种是全局控制命令。

(1)画笔运动命令

命令

说明

turtle.forward(distance)

向当前画笔方向移动distance像素长度

turtle.backward(distance)

向当前画笔相反方向移动distance像素长度

turtle.right(degree)

顺时针移动degree°

turtle.left(degree)

逆时针移动degree°

turtle.pendown()

移动时绘制图形,缺省时也为绘制

turtle.goto(x,y)

将画笔移动到坐标为x,y的位置

turtle.penup()

提起笔移动,不绘制图形,用于另起一个地方绘制

turtle.circle()

画圆,半径为正(负),表示圆心在画笔的左边(右边)画圆

setx( )

将当前x轴移动到指定位置

sety( )

将当前y轴移动到指定位置

setheading(angle)

设置当前朝向为angle角度

home()

设置当前画笔位置为原点,朝向东。

dot(r)

绘制一个指定直径和颜色的圆点

(2) 画笔控制命令

命令

说明

turtle.fillcolor(colorstring)

绘制图形的填充颜色

turtle.color(color1, color2)

同时设置pencolor=color1, fillcolor=color2

turtle.filling()

返回当前是否在填充状态

turtle.begin_fill()

准备开始填充图形

turtle.end_fill()

填充完成

turtle.hideturtle()

隐藏画笔的turtle形状

turtle.showturtle()

显示画笔的turtle形状

(3) 全局控制命令

命令

说明

turtle.clear()

清空turtle窗口,但是turtle的位置和状态不会改变

turtle.reset()

清空窗口,重置turtle状态为起始状态

turtle.undo()

撤销上一个turtle动作

turtle.isvisible()

返回当前turtle是否可见

stamp()

复制当前图形

turtle.write(s [,font=("font-name",font_size,"font_type")])

写文本,s为文本内容,font是字体的参数,分别为字体名称,大小和类型;font为可选项,font参数也是可选项

(4) 其他命令

命令

说明

turtle.mainloop()或turtle.done()

启动事件循环 -调用Tkinter的mainloop函数。

必须是乌龟图形程序中的最后一个语句。

turtle.mode(mode=None)

设置乌龟模式(“standard”,“logo”或“world”)并执行重置。如果没有给出模式,则返回当前模式。

模式

初始龟标题

正角度

standard

向右(东)

逆时针

logo

向上(北)

顺时针

turtle.delay(delay=None)

设置或返回以毫秒为单位的绘图延迟。

turtle.begin_poly()

开始记录多边形的顶点。当前的乌龟位置是多边形的第一个顶点。

turtle.end_poly()

停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点。将与第一个顶点相连。

turtle.get_poly()

返回最后记录的多边形。

3.命令详解

3.1turtle.circle(radius,extent=None,steps=None)

描述:以给定半径画圆

参数:

radius(半径):半径为正(负),表示圆心在画笔的左边(右边)画圆;

extent(弧度)(optional);

steps(optional)(做半径为radius的圆的内切正多边形,多边形边数为steps)。

举例:

circle(50)#整圆;

circle(50,steps=3)#三角形;

circle(120,180)#半圆

4.实例

1、太阳花

# coding=utf-8

import turtle

import time

# 同时设置pencolor=color1, fillcolor=color2

turtle.color("red", "yellow")

turtle.begin_fill()

for _ in range(50):

turtle.forward(200)

turtle.left(170)

turtle.end_fill()

turtle.mainloop()

2017129164133710.png?2017119164148

2、五角星

# coding=utf-8

import turtle

import time

turtle.pensize(5)

turtle.pencolor("yellow")

turtle.fillcolor("red")

turtle.begin_fill()

for _ in range(5):

turtle.forward(200)

turtle.right(144)

turtle.end_fill()

time.sleep(2)

turtle.penup()

turtle.goto(-150,-120)

turtle.color("violet")

turtle.write("Done", font=('Arial', 40, 'normal'))

turtle.mainloop()

2017129164232741.png?2017119164242

3、时钟程序

# coding=utf-8

import turtle

from datetime import *

# 抬起画笔,向前运动一段距离放下

def Skip(step):

turtle.penup()

turtle.forward(step)

turtle.pendown()

def mkHand(name, length):

# 注册Turtle形状,建立表针Turtle

turtle.reset()

Skip(-length * 0.1)

# 开始记录多边形的顶点。当前的乌龟位置是多边形的第一个顶点。

turtle.begin_poly()

turtle.forward(length * 1.1)

# 停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点。将与第一个顶点相连。

turtle.end_poly()

# 返回最后记录的多边形。

handForm = turtle.get_poly()

turtle.register_shape(name, handForm)

def Init():

global secHand, minHand, hurHand, printer

# 重置Turtle指向北

turtle.mode("logo")

# 建立三个表针Turtle并初始化

mkHand("secHand", 135)

mkHand("minHand", 125)

mkHand("hurHand", 90)

secHand = turtle.Turtle()

secHand.shape("secHand")

minHand = turtle.Turtle()

minHand.shape("minHand")

hurHand = turtle.Turtle()

hurHand.shape("hurHand")

for hand in secHand, minHand, hurHand:

hand.shapesize(1, 1, 3)

hand.speed(0)

# 建立输出文字Turtle

printer = turtle.Turtle()

# 隐藏画笔的turtle形状

printer.hideturtle()

printer.penup()

def SetupClock(radius):

# 建立表的外框

turtle.reset()

turtle.pensize(7)

for i in range(60):

Skip(radius)

if i % 5 == 0:

turtle.forward(20)

Skip(-radius - 20)

Skip(radius + 20)

if i == 0:

turtle.write(int(12), align="center", font=("Courier", 14, "bold"))

elif i == 30:

Skip(25)

turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))

Skip(-25)

elif (i == 25 or i == 35):

Skip(20)

turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))

Skip(-20)

else:

turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))

Skip(-radius - 20)

else:

turtle.dot(5)

Skip(-radius)

turtle.right(6)

def Week(t):

week = ["星期一", "星期二", "星期三",

"星期四", "星期五", "星期六", "星期日"]

return week[t.weekday()]

def Date(t):

y = t.year

m = t.month

d = t.day

return "%s %d%d" % (y, m, d)

def Tick():

# 绘制表针的动态显示

t = datetime.today()

second = t.second + t.microsecond * 0.000001

minute = t.minute + second / 60.0

hour = t.hour + minute / 60.0

secHand.setheading(6 * second)

minHand.setheading(6 * minute)

hurHand.setheading(30 * hour)

turtle.tracer(False)

printer.forward(65)

printer.write(Week(t), align="center",

font=("Courier", 14, "bold"))

printer.back(130)

printer.write(Date(t), align="center",

font=("Courier", 14, "bold"))

printer.home()

turtle.tracer(True)

# 100ms后继续调用tick

turtle.ontimer(Tick, 100)

def main():

# 打开/关闭龟动画,并为更新图纸设置延迟。

turtle.tracer(False)

Init()

SetupClock(160)

turtle.tracer(True)

Tick()

turtle.mainloop()

if __name__ == "__main__":

main()

2017129164405752.png?2017119164415

画一个边长为60的正方形,并填充为红色,边框为蓝色

#-*- coding: utf-8 -*-

import turtle

turtle.reset()

a= 60

turtle.fillcolor("red")

turtle.pencolor("blue")

turtle.pensize(10)

turtle.fill(True)

turtle.left(90)

turtle.forward(a)

turtle.left(90)

turtle.forward(a)

turtle.left(90)

turtle.forward(a)

turtle.left(90)

turtle.forward(a)

turtle.fill(False)

2017129164543013.png?201711916461

最后一个实例:

from numpy import *

from random import random

import turtle

turtle.reset()

x = array([[.5],[.5]])

p = [0.85,0.92,0.99,1.00]

A1 = array([[.85, 0.04],

[-0.04,.85]])

b1 = array([[0],[1.6]])

A2 = array([[0.20,-0.26],

[0.23,0.22]])

b2 = array([[0],[1.6]])

A3 = array([[-0.15,0.28],

[0.26,0.24]])

b3 = array([[0],[0.44]])

A4 = array([[0,0],

[0,0.16]])

turtle.color("blue")

cnt = 1

while True:

cnt += 1

if cnt == 2000:

break

r = random()

if r < p[0]:

x = dot(A1 , x) + b1

elif r < p[1]:

x = dot(A2 , x) + b2

elif r < p[2]:

x = dot(A3 , x) + b3

else:

x = dot(A4 , x)

#print x[1]

turtle.up()

turtle.goto(x[0][0] * 50,x[1][0] * 40 - 240)

turtle.down()

turtle.dot()

2017129164759441.jpg?201711916489

PS:在我自己第一次使用turtle的时候(Windows)出现了Can Not find the moudle named "tkinter",原因是我在安装Python时取消了tcl组件的安装。如果重装Python不能解决的话,参看CSDN的诸位大神了解一下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1381456.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

python turtle库制作可爱的假向日葵

效果图&#xff1a; 是不是很可爱呢&#xff01;现在就带各位朋友们亲手做一个假向日葵花吧 # sun flower 向日葵 # 创作人&#xff1a;李国庆 # 扣扣&#xff1a;1974914843 import turtle as tt.begin_fill() t.pendown() t.circle(60) t.fd(14) t.fillcolor(yellow) t.end…

windows系统链接UBuntu向日葵

参考链接&#xff1a; 1、https://www.pianshen.com/article/67791913548/ 2、https://www.codeleading.com/article/8793979874/ 3、https://www.linuxidc.com/Linux/2011-07/39491.htm 解决方法 1.官网下载: https://sunlogin.oray.com/download/ 双击deb安装&#xff0c;然…

python画行向日葵,基于matplotlib的向日葵散点图

我不知道有什么matplotlib实现&#xff0c;但不难做到。在这里&#xff0c;我让hexbin进行计数&#xff0c;然后遍历每个单元格并添加适当数量的花瓣&#xff1a; import numpy as np import matplotlib.pyplot as plt from matplotlib import colors np.random.seed(0) n 200…

python用turtle画太阳花_详解python使用turtle库来画一朵花

看了群主最后成像的图片&#xff0c;应该是循环了36次画方框&#xff0c;每次有10度的偏移。 当然不能提前看答案&#xff0c;自己试着写代码。 之前有用过海龟画图来画过五角星、奥运五环、围棋盘等&#xff0c;所以感觉不难。 # !/usr/bin/env python # -*- coding:utf-8…

微信小程序隐私协议模板

在 设置 中找到 用户隐私保护 进行更新&#xff0c;如下图&#xff1a; 具体协议补充可参考如下&#xff1a; 为了分辨用户&#xff0c;开发者将在获取你的明示同意后&#xff0c;收集你的微信昵称、头像 为了显示距离&#xff0c;开发者将在获取你的明示同意后&#xff0c;收…

多线程与并发编程面试题总结

多线程与并发编程 多线程 线程和进程的区别&#xff1f; 从操作系统层面上来讲&#xff1a;进程(process)在计算机里有单独的地址空间&#xff0c;而线程只有单独的堆栈和局部内存空间&#xff0c;线程之间是共享地址空间的&#xff0c;正是由于这个特性&#xff0c;对于同…

linux鲁班猫代码初尝试[编译镜像][修改根文件系统重编译][修改设备树改屏幕为MIPI]

编译镜像 官方百度云盘资料:https://doc.embedfire.com/linux/rk356x/quick_start/zh/latest/quick_start/baidu_cloud/baidu_cloud.html 解压虚拟机压缩包:"鲁班猫\8-SDK源码压缩包\开发环境虚拟机镜像\ubuntu20.04.7z"后既可以用VMware打开,打开后可以看到已经有…

idea 快捷键代码行标记并快捷跳到标记行(搬砖必备)

idea有一个组合快捷键 非常好用 快捷键1 标记代码行&#xff08;左边的行数会出现一个1&#xff0c;代表着已经标记了&#xff09;&#xff1a; ctrlshift1 快捷键2 迅速跳到标记行&#xff08;直接抵达砖厂&#xff0c;哈哈&#xff09;&#xff1a; ctrl1 这边给大家送上…

圈子才是成功的捷径

前言 最近我在读徐涛写的《历史的面孔》这本书&#xff0c;感受颇深&#xff0c;启发挺大的。 真心建议大家可以读一读历史人物相关的书籍&#xff0c;每个历史人物在其所在的背景下&#xff0c;每一个的抉择几乎都能给人以思考。 &#xff08;文末有彩蛋&#xff09; 尤其…

工作中,我们应该走捷径吗?

很多人喜欢走捷径&#xff0c;遇到困难&#xff0c;为了走捷径&#xff0c;找了很多方法&#xff0c;做了很多努力&#xff0c;到最后才发现&#xff0c;这个硬碰硬的过程是避免不了的&#xff0c;除了正面击溃困难&#xff0c;别无选择。 工作中有没有捷径可以走呢&#xff1f…

【几个python虚拟环境会遇到的问题】

几个python虚拟环境会遇到的问题 twine is not recognized as an internal or external command,operable program or batch file.setup命令不报错但不起作用pipreqs is not recognized as an internal or external command,operable program or batch file. ‘twine’ is not …

包管理工具详解npm 、 yarn 、 cnpm 、 npx 、 pnpm(2023)

1、包管理工具npm &#xff08;1&#xff09;包管理工具npm&#xff1a; Node Package Manager&#xff0c;也就是Node包管理器&#xff1b;但是目前已经不仅仅是Node包管理器了&#xff0c;在前端项目中我们也在使用它来管理依赖的包&#xff1b;比如vue、vue-router、vuex、…

OOAD 2 UML

什么是UML&#xff08;Unified Modeling Language&#xff09; 统一建模语言&#xff08;UML&#xff09; 是描述、构造和文档化系统制品的可视化语言。 The Unified Modeling Language is a visual language for specifying,constructing and documenting the artifacts of sy…

北邮:OOAD笔记

1.用例图&#xff1a;描述角色以及角色与用例之间的连接关系 2.类图&#xff1a;描述系统中的类&#xff0c;以及对象&#xff0c;接口&#xff0c;协作等事物之间的关系 3.交互图&#xff1a;描述对象间如何协作&#xff0c;包括序列图和协作图 4.状态图 描述类的对象所有可能…

OOAD实验

类图综述该类图总共分为大致几个模块&#xff1a;用户、票务管理、个人信息管理、用户管理。其中用户分为乘客、票务管理员和系统管理员三类。票务管理员除了负责平时更新车票信息之外&#xff0c;还可以查看车票的销售情况&#xff1b;而系统管理员主要是对乘客和票务管理员的…

OOAD练习题

一 选择题&#xff1a; 1. UpClean公司准备开发一套战略游戏系统。该系统中有很多战略角色&#xff08;character&#xff09;&#xff0c;比如King、Queen、Troll、Knight等&#xff0c;每个战略角色可以发出各种攻击行为&#xff08;weapon behavior&#xff09;&#xff0c;…

OOAD概述

OOA Object-Oriented Analysis (OOA)&#xff1a;面向对象的分析与设计 OOA的侧重点是业务领域分析&#xff0c;与软件所要应用的行业领域相关&#xff0c;而与软件技术关系不大&#xff0c;需要由领域专家进行。这一部分的工作被称为“需求分析”。 OOA的成果&#xff1a; 业…

OOAD与UML

1.OOAD&#xff08;Object Oriented Analysis and Design&#xff09;面向对象分析和设计 --OOA 分析阶段&#xff0c;主要解决以下问题&#xff1a; --建立对业务问题域的清晰视图 --列出必须要完成的核心业务 --针对问题域建立公共词汇表 --列出针对此问题域的最佳解决方案 -…

OOAD之设计原则

一、设计原则意义 为了设计出一个好的软件系统。我们必须遵照一定的规则。 衡量软件设计质量的首要标准是该设计是否能满足软件的功能需求。除了功能需求以外&#xff0c;还有很多衡量软件设计质量的标准&#xff0c;包括可读性、可复用性、可扩展性、可维护性等。 1、一般一个…

ooad设计模式_OOAD-面向对象的分析与设计

ooad设计模式 让我们分为以下几节来讨论OOAD&#xff1a; (Lets discuss OOAD by dividing into the below sections:) OOS 操作系统 OOA OOA OOD 面向对象 Thumbnails principles of the object oriented design 面向对象设计的缩略图原则 OO Design Quality Metrics OO设计质…