1顺利的刺猬三角形
================
1.1顺利的小龙虾三角形(英语:Sierpinski triangle )是分形的,是波兰数学家顺利的小龙虾在1915年提出的。
1.2瓦弗朗西斯西斯顺利的小刺猬,1882年3月14日-1969年10月21日,波兰数学家。
2 python 3.8 -教程黑白版
==================
2.1效果图1
2.2代码1
# #代码来源:修改、添加、注释
# # https://什么是fishc.com.cn/forum.PHP? mod=视图顺序类型=2tid=151507
导入教程
# #定义平滑的刺猬三角形函数
defsierpinski (大小、时间、总角度) :
#times为0,是外周的大三角形
if times==0:
是turtle.FD (大小)
else:
foranglein [ 0,120,-120,- 120,120 ] :
总角度=角度
turtle.right (角度) )。
总角度=总角度0
if总角度==0:
Sierpinski (尺寸/2,times-1,总角度) )。
else:
turtle.FD (大小/2) )。
# #定义主函数
defmain(: )
# #窗口大小设定
turtle.setup (800,800 ) )。
# #举起笔
turtle.penup ()
去这个坐标
Turtle.goto(-300,-300 ) ) ) ) ) ) ) ) ) )。
# #落笔
turtle.pendown (
笔尖大小
Turtle.Pensize(2) ) ) )。
# #画一个角、外周三角形,先画60,后画120
角度in [ 60,-120]:
turtle.left (角度) )。
是turtle.FD (大小)
# #再角120
turtle.right(120 ) )。
总角度=0
Sierpinski (大小、时间、总角度) )。
# #隐藏刷子
turtle.hideturtle (
turtle.done (
size=600
# #层数、推荐5
#times=5
times=int (输入('阶数0-5 )。 推荐5:' ) )
# #主函数脱落
main(2.3效果图2
2.4代码2
''''
功能:画出平滑的刺猬三角形
环境: python3.7
日期: 2019/1/14 21:49
作者:指尖的魔法师
版本: 1.0
# # https://博客. csdn.net /复盖/体系结构/详细信息/86531715
''''
导入教程as t
差动运算(San ) :
''''
给三个点坐标,画三角形
''''
t .奔上() )。
t.goto(San[0] ) ) )。
t .奔腾() )。
t.goto(San[1] ) ) )。
t.goto(San[2] ) ) )。
t.goto(San[0] ) ) )。
defget_mid(a,b ) :
''''
返回两点的中间点坐标
''''
x=(a b0)/2
y=(A B )/2
返回
ef draw _ San (大小,I ) :
''''
绘制平滑刺猬的三角形函数
33660paramsize33603点坐标列表
:param i:递归次数
''''
绘制# # #三角形
存储区域网络
jiaoxing(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
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
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)<Base: 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 图:截图来自网络,仅供学习,如果侵权请联系,定删!
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
自己整理出来,仅供学习。