• 培训机构
  • 培训课程
15111108655

客服时间:9:00-18:00

71爱课网   培训资讯  Python   python画三角形turtle(如何用python画三角形)

python画三角形turtle(如何用python画三角形)

本文作者: Python培训学校 发布时间:2022-06-03 栏目分类:Python 浏览人数:119
【导读】:python画三角形turtle(如何用python画三角形) 。

python画三角形turtle(如何用python画三角形) 。

Python

1 谢尔宾斯基三角形

===============

1.1 谢尔宾斯基三角形(英语:Sierpinski triangle)是一种分形,由波兰数学家谢尔宾斯基在1915年提出。

1.2 瓦茨瓦夫·弗朗西斯克·谢尔宾斯基,1882年3月14日-1969年10月21日,波兰数学家。

2 python3.8-turtle黑白版

===================

2.1 效果图1

谢尔宾斯基三角形:python-turtle可视化实现

2.2 代码1

#https://fishc.com.cn/forum.php?mod=viewthread&ordertype=2&tid=151507

import turtle

#定义谢尔宾斯基三角形函数

def Sierpinski(size,times,total_angle):

#times为0,就是外围大三角形

if times == 0:

turtle.fd(size)

else:

for angle in [0,120,-120,-120,120]:

total_angle += angle

turtle.right(angle)

total_angle = total_angle%180

if total_angle == 0:

Sierpinski(size/2,times-1,total_angle)

else:

turtle.fd(size/2)

#定义主函数

def main():

#窗口大小设置

turtle.setup(800,800)

#提笔

turtle.penup()

#去到这个坐标

turtle.goto(-300, -300)

#落笔

turtle.pendown()

#笔头大小

turtle.pensize(2)

#转角,画外围三角形,先60°,再120°

for angle in [60,-120]:

turtle.left(angle)

turtle.fd(size)

#再转角120°

turtle.right(120)

total_angle=0

Sierpinski(size,times,total_angle)

#隐藏画笔

turtle.hideturtle()

turtle.done()

size = 600

#层数,推荐5

#times = 5

times=int(input('请你输入层数0-5,推荐≤5:'))

#主函数走起

main()

2.3 效果图2

谢尔宾斯基三角形:python-turtle可视化实现

2.4 代码2

"""

功能:绘制谢尔宾斯基三角形

环境:python3.7

日期:2019/1/14 21:49

作者:指尖魔法师

版本:1.0

#https://blog.csdn.net/veray/article/details/86531715

"""

import turtle as t

def sanjiaoxing(san):

"""

传入三个点坐标,绘制三角形

"""

t.penup()

t.goto(san[0])

t.pendown()

t.goto(san[1])

t.goto(san[2])

t.goto(san[0])

def get_mid(a, b):

"""

计算返回2个点的中间点坐标

"""

x = (a[0] + b[0]) / 2

y = (a[1] + b[1]) / 2

return [x, y]

def draw_san(size, i):

"""

绘制谢尔宾斯基三角形函数

:param size: 三个点坐标列表

:param i: 递归次数

"""

# 绘制三角形

sanjiaoxing(size)

if i > 0:

# 绘制左边小三角形

size2 = [size[0], get_mid(size[0], size[1]), get_mid(size[0], size[2])]

draw_san(size2, i - 1)

# 绘制上边的小三角形

size3 = [get_mid(size[0], size[2]), get_mid(size[1], size[2]), size[2]]

draw_san(size3, i - 1)

# 绘制右边的小三角形

size4 = [get_mid(size[0], size[1]), size[1], get_mid(size[1], size[2])]

draw_san(size4, i - 1)

def main():

"""

主函数

"""

# 打印图形标题

t.penup()

t.left(90)

t.forward(350)

t.pendown()

t.write("谢尔宾斯基三角形", False, align="center", font=("宋体", 20, "normal"))

t.speed(5)

# 初始三角形坐标

points = [[-200, 0], [200, 0], [0, 300]]

# 递归5次

count = 5

# 调用绘制谢尔宾斯基三角形函数

draw_san(points, count)

t.ht() #add

t.exitonclick()

if __name__ == '__main__':

main()

3 python3.8-turtle彩色版

===================

3.1 字典法效果图3

谢尔宾斯基三角形:python-turtle可视化实现

3.2 代码3

#代码来源

#https://blog.csdn.net/qq_42907161/article/details/108228487?utm_medium=distribute.pc_relevant.none-task-blog-baidulandingword-6&spm=1001.2101.3001.4242

#字典法

import turtle

t = turtle.Turtle()

points = {'left':(-200, -100),

'top':(0, 200),

'right':(200, -100)}

#画三角形和填充颜色函数

def drawTriangle(points, 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 getMid(p1, p2):

return ((p1[0] + p2[0]) / 2, (p1[1] + p2[1]) / 2)

#画谢尔宾斯基三角形函数

def sierpinski(degree, points):

colormap = ['blue', 'red', 'green', 'yellow', 'orange', 'gray']

if degree > 0:

# 先画(挖掉)三角形

drawTriangle(

{'left':getMid(points['left'], points['top']),

'right':getMid(points['right'], points['top']),

'top':getMid(points['right'], points['left'])

},colormap[degree]

)

# 再分别递归新生成的三个三角形

sierpinski(degree - 1,

{'left':getMid(points['left'], points['top']),

'top':points['top'],

'right':getMid(points['top'], points['right'])})

sierpinski(degree - 1,

{'left':points['left'],

'top':getMid(points['left'], points['top']),

'right':getMid(points['left'], points['right'])})

sierpinski(degree - 1,

{'left':getMid(points['left'], points['right']),

'top':getMid(points['top'], points['right']),

'right':points['right']})

drawTriangle(points, 'white')

#层数5个

sierpinski(5, points)

t.ht() # 最后将海龟隐藏起来

turtle.done()

3.3 效果图4

谢尔宾斯基三角形:python-turtle可视化实现

3.4 代码4

# 谢尔宾斯基三角形

# By BigShuang

# https://github.com/BigShuang/recursion-with-turtle

import math

import turtle

# 颜色

LineColor="black"

FillColors=[

'#CAE1FF',

'#FFEFDB',

'#8470FF',

'#FF6347',

'#FFDEAD',

'#C1FFC1'

]

# 最小绘制长度-三角形最小边长

Base=10

# 三角形边长

TriSize=250

# 绘制速度

MPS=10

# 初始化Turtle对象

t = turtle.Turtle()

t.speed(MPS)

t.hideturtle()

# 递归函数-画下一级别的三角形-内部更小的

def draw_nextone(*triangle,**kwargs):

# 如果三角形边长大于最小绘制长度,退出递归

if get_edge(triangle)

return

# 否则

# 1-根据三边中点绘制内部三角形

a, b, c = triangle[0:3]

a_b, a_c, b_c=get3mid(a, b, c)

# 绘制三角形并填色

depth=kwargs.get("depth",0)

if len(triangle)==4:

depth=triangle[3]

# 取对应深度的颜色

_colorIdx=depth%len(FillColors)

color = FillColors[_colorIdx]

draw_tri(a_b, a_c, b_c, color=color)

# 2-得到三个更小的三角形,对这三个更小的三角形再次调用本函数

draw_nextone(a,a_b,a_c,depth=depth+1)

draw_nextone(b, a_b, b_c,depth=depth+1)

draw_nextone(c, a_c, b_c,depth=depth+1)

# 得到三角行三边边长

def get_edge(triangle):

# triangle:[(),(),()]-三点坐标组成的列表

a,b,c=triangle[0:3]

ax,ay=a

bx,by=b

ab2=(ax-bx)**2+(ay-by)**2

return math.sqrt(ab2)

# 得到三边中点

def get3mid(*triangle):

# triangle:[(),(),()]-三点坐标组成的列表

a, b, c = triangle

ax, ay = a

bx, by = b

cx, cy=c

# 得到三边中点的坐标

a_b=((ax+bx)/2,(ay+by)/2)

a_c = ((ax + cx) / 2, (ay + cy) / 2)

b_c = ((cx + bx) / 2, (cy + by) / 2)

return a_b,a_c,b_c

# 根据顶点坐标绘制三角形,可选颜色

def draw_tri(*args,**kwargs):

# 三点坐标

a, b, c =args

# 填充颜色

color=kwargs.get('color',None)

t.penup()

t.setpos(a)

if color:

t.color(LineColor,color)

t.begin_fill()

t.pendown()

t.goto(b)

t.goto(c)

t.goto(a)

t.penup()

if color:

t.end_fill()

if __name__ == '__main__':

_edge=TriSize*math.sqrt(3)

tri=[(-TriSize,-TriSize),(TriSize,-TriSize),(0,_edge-TriSize)]

a,b,c=tri

draw_tri(a,b,c)

draw_nextone(a,b,c)

turtle.done()

4 一道中考题

==========

4.1 图:截图来自网络,仅供学习,如果侵权请联系,定删!

谢尔宾斯基三角形:python-turtle可视化实现

4.2 解题:

图1:0层===面积是1

图2: 1层===面积是3/4=1×3/4

图3:2层===面积是9/16=3/4×3/4

图4: 3层===面积是27/64=9/16×3/4

图5: 4层===面积是81/256=27/64×3/4

自己整理出来,仅供学习。

免责声明:

一、71爱课网旨在免费为用户传递信息,不代表本站的观点和立场;

二、71爱课网仅提供信息发布平台,对于本文版权归属问题本站无法判断和调查;

三、本文整理于会员新闻,如果侵犯您的版权,请联系管理员删除或增加版权信息(QQ:981561103)。

推荐课程

免费预约试听

只要一个电话
我们免费为您回电