python+turtle

turtle画图基本操作

窗体大小

import turtle
turtle.setup(width,height,startx,starty)
作用 设置主窗体 大小和位置。

画笔状态函数

如下:
即可完成。

画笔运动函数

函数如下:

即可完成。
turtle.fd( )函数最常用,它控制画笔向当前行进方向前进一个距离,函数定义如下:
turtle. forward (distance)
别名
turtle. fd (distance)
turtle.bk( )函数控制画笔向行进的反方向运动一个距离,函数定义如下:
turtle. bk (distance)
别名
turtle. backward (distance)
代码如下所示:
import turtle

for i in range(1,20):
    turtle.fd(i)
    turtle.left(2*i)
    turtle.fd(4*i)

如果加入turtle.bd

import turtle

for i in range(1,20):
    turtle.fd(i)
    turtle.left(2*i)
    turtle.fd(4*i)
    turtle.bk(5*i)

turtle.circle

半径为50,角度为270°,代码如下:

import turtle
turtle.circle(50,270)

半径为20,代码如下:

import turtle
turtle.circle(20)#半径为20像素的圆

直接生成图形,不显示乌龟运动轨迹。turtle.tracer(False)

import turtle
turtle.pensize(1)

turtle.tracer(False)#直接生成图形,不显示乌龟运动轨迹。
for i in range(1,100,10):
    turtle.circle(i)

生成图形:

如下图所示代码:

import turtle
#turtle.tracer(False)

turtle.pensize(3)

turtle.circle(20)
turtle.circle(30)
turtle.circle(40)
turtle.circle(50)

turtle.tracer

加入了turtle.tracer(False)

删去了turtle.tracer(False)

最后生成的图形有略微的不同。加入了turtle.tracer(False),小乌龟最后没有回到起点。这个是在运行过程中需要注意的。

生成几何图形

同切圆、双层圆

绘制一组半径不同的同切圆。

运行如下代码:

import turtle
turtle.setup(500,500,None,None)
turtle.circle(50)


turtle.goto(4,6)
turtle.circle(30)#半径为30像素的圆

turtle.pendown()

turtle.home()

生成图形如下

三角形、六边形、圆

运行以下这段代码

import turtle
turtle.pensize(3)
turtle.penup()

turtle.goto(-200,-50)
turtle.pendown()
turtle.begin_fill()
turtle.color('red')
turtle.circle(100,steps=3)#运动一圈 circle,三步step=3,三角形
turtle.end_fill()


turtle.goto(0,-50)
turtle.pendown()

turtle.begin_fill()
turtle.color('yellow')
turtle.circle(100,steps=6)#运动一圈 circle,六步step=6,六边形
turtle.end_fill()



turtle.goto(200,-50)
turtle.dot(50,"green")#运动一圈,一个圆形 dot


生成如下图形:

星星

图形在右,代码在左。

五彩圆

程序代码

import turtle

colors=['red','orange','yellow','green','blue','indigo','purple']
for i in range(7):
    c=colors[i]
    turtle.color(c,c)
    turtle.begin_fill()
    turtle.rt(360/7)
    turtle.circle(50)
    turtle.end_fill()
turtle.done()

生成图形

组合体

积累程序-turtle-数学几何图形-不断调试中发现新东西-新图形。

程序代码

from turtle import *
setup(800,600)

speed(10)
for i in range(5):
    goto(40*i,30*i)
    goto(40*i,0)
    goto(0,0)

    penup()
    goto(0,50*i)
    pendown()
    circle(50*i)
    goto(0,0)

生成图形

 循环网

运行代码:

from turtle import *
tracer(False)

myNum=6
for m in range(6):
    right(30)
    circle(10)
    for i in range(1,100,5):
        pendown()
        
        circle(i)
        
        penup()
        goto(i,i)

    

生成图形:

生成数学图像

不同角度的螺线

程序代码

运行代码,输入不同角度。

import turtle
import time


myjiaodu=int(input("请输入旋转角度:"))
turtle.tracer(False)
#turtle.speed("fastest")#画笔速度
turtle.pensize(2)
turtle.bgcolor("white")
colors=["red","yellow","blue","purple"]


for i in range(400):    
    turtle.forward(2*i)
#    turtle.color(colors[i%4])
    turtle.left(myjiaodu)

turtle.done()

用IDLE运行代码的时候,较慢。所以可以用CMD运行。

用CMD运行,生成图形如下:

12度角

35度角

66度角

97度角

108度角

170度角

直线切割出螺线

代码在左,右为生成图形

所用代码如下:


#SquareSpiral1.py
import turtle

t = turtle.Pen()

#sides=eval(input("输入要绘制的边的数目,请输入2-6的数字!"))
sides=6
colors=["red","yellow","green","blue","orange","purple"]
for x in range(360):
    t.pencolor(colors[x%sides])
    t.forward(x*3/sides+x)
    t.left(360/sides+1)
    t.width(x*sides/180)
    t.left(91)

不同角度和颜色的螺线

程序代码

import turtle
import time


myjiaodu=int(input("请输入旋转角度:"))
turtle.tracer(False)
#turtle.speed("fastest")#画笔速度
turtle.pensize(2)
turtle.bgcolor("black")
colors=["red","yellow","blue","purple"]


for i in range(400):    
    turtle.forward(2*i)
    turtle.color(colors[i%4])
    turtle.left(myjiaodu)

turtle.done()

输入不同角度数值,生成不同的图像。

生成复杂图形

几何旋转花瓣,

运行代码如下:

#!/usr/bin/env python3
"""      turtle-example-suite:

        tdemo_bytedesign.py

An example adapted from the example-suite
of PythonCard's turtle graphics.

It's based on an article in BYTE magazine
Problem Solving with Logo: Using Turtle
Graphics to Redraw a Design
November 1982, p. 118 - 134

-------------------------------------------

Due to the statement

t.delay(0)

in line 152, which sets the animation delay
to 0, this animation runs in "line per line"
mode as fast as possible.
"""

from turtle import Turtle, mainloop
from time import perf_counter as clock

# wrapper for any additional drawing routines
# that need to know about each other
class Designer(Turtle):

    def design(self, homePos, scale):
        self.up()
        for i in range(5):
            self.forward(64.65 * scale)
            self.down()
            self.wheel(self.position(), scale)
            self.up()
            self.backward(64.65 * scale)
            self.right(72)
        self.up()
        self.goto(homePos)
        self.right(36)
        self.forward(24.5 * scale)
        self.right(198)
        self.down()
        self.centerpiece(46 * scale, 143.4, scale)
        self.getscreen().tracer(True)

    def wheel(self, initpos, scale):
        self.right(54)
        for i in range(4):
            self.pentpiece(initpos, scale)
        self.down()
        self.left(36)
        for i in range(5):
            self.tripiece(initpos, scale)
        self.left(36)
        for i in range(5):
            self.down()
            self.right(72)
            self.forward(28 * scale)
            self.up()
            self.backward(28 * scale)
        self.left(54)
        self.getscreen().update()

    def tripiece(self, initpos, scale):
        oldh = self.heading()
        self.down()
        self.backward(2.5 * scale)
        self.tripolyr(31.5 * scale, scale)
        self.up()
        self.goto(initpos)
        self.setheading(oldh)
        self.down()
        self.backward(2.5 * scale)
        self.tripolyl(31.5 * scale, scale)
        self.up()
        self.goto(initpos)
        self.setheading(oldh)
        self.left(72)
        self.getscreen().update()

    def pentpiece(self, initpos, scale):
        oldh = self.heading()
        self.up()
        self.forward(29 * scale)
        self.down()
        for i in range(5):
            self.forward(18 * scale)
            self.right(72)
        self.pentr(18 * scale, 75, scale)
        self.up()
        self.goto(initpos)
        self.setheading(oldh)
        self.forward(29 * scale)
        self.down()
        for i in range(5):
            self.forward(18 * scale)
            self.right(72)
        self.pentl(18 * scale, 75, scale)
        self.up()
        self.goto(initpos)
        self.setheading(oldh)
        self.left(72)
        self.getscreen().update()

    def pentl(self, side, ang, scale):
        if side < (2 * scale): return
        self.forward(side)
        self.left(ang)
        self.pentl(side - (.38 * scale), ang, scale)

    def pentr(self, side, ang, scale):
        if side < (2 * scale): return
        self.forward(side)
        self.right(ang)
        self.pentr(side - (.38 * scale), ang, scale)

    def tripolyr(self, side, scale):
        if side < (4 * scale): return
        self.forward(side)
        self.right(111)
        self.forward(side / 1.78)
        self.right(111)
        self.forward(side / 1.3)
        self.right(146)
        self.tripolyr(side * .75, scale)

    def tripolyl(self, side, scale):
        if side < (4 * scale): return
        self.forward(side)
        self.left(111)
        self.forward(side / 1.78)
        self.left(111)
        self.forward(side / 1.3)
        self.left(146)
        self.tripolyl(side * .75, scale)

    def centerpiece(self, s, a, scale):
        self.forward(s); self.left(a)
        if s < (7.5 * scale):
            return
        self.centerpiece(s - (1.2 * scale), a, scale)

def main():
    t = Designer()
    t.speed(0)
    t.hideturtle()
    t.getscreen().delay(0)
    t.getscreen().tracer(0)
    at = clock()
    t.design(t.position(), 2)
    et = clock()
    return "runtime: %.2f sec." % (et-at)

if __name__ == '__main__':
    msg = main()
    print(msg)
    mainloop()





生成图形如下:

五彩雪景

运行代码:

'''
【目标】绘制雪景图片


turtle.pensize(3)
turtle.penup()
setx(240)
sety(300)
turtle.circle(10)
turtle.pendown()


'''
#第一步,构建图的背景
from turtle import *
from random import *
import turtle

setup(800,600,200,200)


tracer(False)#不用跟踪画画的轨迹
bgcolor("black")#背景颜色


#第二步,绘制雪花效果。随机数,雪花

hideturtle()
pensize(2)
for i in range(100):
    r,g,b=random(),random(),random()
    pencolor(r,g,b)
    penup()
    setx(randint(-350,350))#修改画笔的横坐标到x,纵坐标不变
    sety(randint(-300,300))#修改画笔的纵标到y,横坐标不变,注意没有等号
    pendown()

    dens=randint(8,12)#dens雪花花瓣数
    snowsize=randint(10,14)#雪花大小


    for j in range(dens):#画每一个雪花线条,来回一条线
        forward(snowsize)
        backward(snowsize)
        right(360/dens)#旋转角度
        

        
#第三步,绘制雪地效果。横线,灰度
hideturtle()
for i in range(400):
    pensize(randint(1,5))
    x=randint(-400,350)#注意有等号
    y=randint(-280,-1)
    r,g,b=0,0,0
    pencolor=(r,g,b)
    penup()
    goto(x,y)
    pendown()
    forward(randint(40,100))

done()

生成图形:

运动星系

程序代码


'''
This example is
inspired by the Wikipedia article on turtle
graphics. (See example wikipedia1 for URLs)

First we create (ne-1) (i.e. 35 in this
example) copies of our first turtle p.
Then we let them perform their steps in
parallel.

Followed by a complete undo().
'''

from turtle import Screen, Turtle, mainloop
from time import perf_counter as clock, sleep

def mn_eck(p, ne,sz):
    turtlelist = [p]
    #create ne-1 additional turtles
    for i in range(1,ne):
        q = p.clone()
        q.rt(360.0/ne)
        turtlelist.append(q)
        p = q
    for i in range(ne):
        c = abs(ne/2.0-i)/(ne*.7)
        # let those ne turtles make a step
        # in parallel:
        for t in turtlelist:
            t.rt(360./ne)
            t.pencolor(1-c,0,c)
            t.fd(sz)

def main():
    s = Screen()
    s.bgcolor("black")
    p=Turtle()
    p.speed(0)
    p.hideturtle()
    p.pencolor("red")
    p.pensize(3)

    s.tracer(36,0)

    at = clock()
    mn_eck(p, 36, 19)
    et = clock()
    z1 = et-at

    sleep(1)

    at = clock()
    while any(t.undobufferentries() for t in s.turtles()):
        for t in s.turtles():
            t.undo()
    et = clock()
    return "runtime: %.3f sec" % (z1+et-at)


if __name__ == '__main__':
    msg = main()
    print(msg)
    mainloop()

图形如下:

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值