python turtle画直角三角形,python turtle绘制三角形

本文介绍了如何使用Python的turtle模块进行基础图形绘制,如直线、正方形和螺旋,以及递归和分形艺术的应用,包括画分形树和谢尔宾斯基三角形。
摘要由CSDN通过智能技术生成

大家好,给大家分享一下python中用turtle绘制三角形,很多人还不知道这一点。下面详细解释一下。现在让我们来看看!

Source code download: 本文相关源码

1. Python中的turtle模块制图

前面已经讲了递归的原理,这里用递归作图来直观的理解递归。
首先了解以下Python中用于作图的内置海龟作图系统turtle modulePython中Turtle画蝴蝶
Python内置,随时可用,以LOGO语言的创意为基础。
其意象为模拟海龟在沙滩上爬行而留下的足迹。

爬行:forward(n); backward(n)
转向:left(a); right(a)
抬笔放笔:penup(); pendown()
笔属性:pensize(s); pencolor( c )

1.1 画一条带方向的直线

import turtle

t = turtle.Turtle()  # 开始作图
t.forward(100)  # 指挥海龟作图
turtle.done()  # 结束作图

1.2 画一个正方形

import turtle

t = turtle.Turtle()

for i in range(4):
    t.forward(100)  # 往前走100的距离
    t.right(90)  # 向右旋转90度

turtle.done()

1.3 画一个星星

import turtle

t = turtle.Turtle()
t.pencolor('red')  # 设置线条的颜色
t.pensize(5)  # 设置线条的粗细
for i in range(5):
    t.forward(100)
    t.right(144)
t.hideturtle()  # 将箭头隐藏
turtle.done()

1.4 画一个螺旋的图,用递归的方法

import turtle

t = turtle.Turtle()


def draw_spiral(line_len):  # line_len是最开始的线的长度
    if line_len > 0:  # 最小规模,当线的长度小于0时,结束。
        t.forward(line_len)
        t.right(90)
        draw_spiral(line_len - 5)  # 调用自身,每次线的长度减小,向最小规模演进。


draw_spiral(100)

turtle.done()

2. 用turtle画一个分形树

分形树就是每棵树都是由树干+左小树+右小树组成的,如图所示。最小的左(右)小树只有三根线。

import turtle

t = turtle.Turtle()
t.left(90)
t.penup()  # 提笔,意思是,轨迹正常走,但是不画出来,可以避免画出不必要的路径
t.backward(100)  # 向箭头的反向走100
t.pendown()
t.pencolor('green')  # 树的颜色设置为绿色
t.pensize(2)  # 线的宽度


def tree(branch_len):
    if branch_len > 5:  # 树干太短时,不画,递归结束
        t.forward(branch_len)  # 画树干
        t.right(20)  # 向右画长为20的右边(右子树的一部分)
        tree(branch_len - 15)  # 递归调用,画右子树
        t.left(40)  # 向左倾斜40°,即画向左的20°的左子树
        tree(branch_len - 15)  # 递归调用,画右子树
        t.right(20)  # 向右回正
        t.backward(branch_len)  # 海龟回到原来的位置


tree(75)  # 画树干为75的分形树
t.hideturtle()
turtle.done()

3. 谢尔宾斯基三角形

谢尔宾斯基三角形,也具有与分形树类似的自相似性(就是每一个小部分和大部分的结构是相似的)。
谢尔宾斯基三角形是由3个尺寸减半的谢尔宾斯基三角形按照品字形拼叠而成。
真正的谢尔宾斯基三角形是无限个小三角组成的,因此我们只能做有限个谢尔宾斯基三角形。

引入一个degree的概念。
当只有一个三角形时,degree是0,这也是递归的结束条件。
当degree是1时,degree=1的三角形,由三个degree=0的三角形组成。
当degree是2时,degree=2的三角形,由三个degree=1的三角形组成。


以此类推。
在degree有限的情况下,degree=n的三角形,是由3个degree=n-1的三角形按照品字形拼叠而成。

代码:画一个degree = 5的谢尔宾斯基三角形

import turtle

t = turtle.Turtle()


def draw_triangle(points, color):  # 这个函数,用来画三角形。color参数,是自己设置的,填充三角形的颜色。
    t.fillcolor(color)  # 设置填充颜色
    t.penup()  # 抬笔
    t.goto(points['top'])  # 让小海龟朝着这个方向移动
    t.pendown()  # 落笔
    t.begin_fill()  # 开始填充颜色
    t.goto(points['left'])
    t.goto(points['right'])
    t.goto(points['top'])
    t.end_fill()  # 停止填充颜色


def get_mid(p1, p2):  # 找两个点间的中点
    return (p1[0] + p2[0]) / 2, (p1[1] + p2[1]) / 2


def sierpinski(degree, points):
    colormap = ['blue', 'red', 'green', 'white', 'yellow', 'orange']
    draw_triangle(points, colormap[degree])  # 画等边三角形,不同度数的三角形颜色不同
    if degree > 0:  # 递归结束条件
        sierpinski(degree - 1,  # 朝递归结束条件演进
                   {'left': points['left'],
                    'top': get_mid(points['left'], points['top']),  # 减小规模,边长减半
                    'right': get_mid(points['left'], points['right'])})
        sierpinski(degree - 1,
                   {'left': get_mid(points['left'], points['top']),
                    'top': points['top'],
                    'right': get_mid(points['top'], points['right'])})
        sierpinski(degree - 1,
                   {'left': get_mid(points['left'], points['right']),
                    'top': get_mid(points['top'], points['right']),
                    'right': points['right']})


points = {'left': (-200, -100), 'top': (0, 200), 'right': (200, -100)}  # 三角形外轮廓的三个点
sierpinski(5, points)
turtle.done()

参考文献

本文的知识来源于B站视频 【慕课+课堂实录】数据结构与算法Python版-北京大学-陈斌-字幕校对-【完结!】,是对陈斌老师课程的复习总结

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值