首页 > 编程知识 正文

谢尔宾斯基三角形公式,勒洛三角形原理

时间:2023-05-03 05:40:41 阅读:22483 作者:1631

首先,回顾递归的概念:

因为某个函数不断调用其自身,所以可以认为这个函数使用了递归。

首先,我们来看看花痴自行车三角形的例子:

因此,首先,需要一种给我画三角形的方法。 要在这里画三角形,必须引入Turtle模块。 画三角形需要三个点的坐标。 我不怎么记述。 注; 设左下顶点为p[0],上顶点和右顶点分别为p[1]p[2]

fromturtleimport * defdrawtriangle (points,color, myturtle (: my turtle.fill color (color ) myTurtle.up ) myturtle.goto ) points [0] (my turtle.down ) (my turtle ) ) myturtle.goto ) points [0] (my turtle.end _ fill ) )其次,要绘制花痴自行车的三角形,必须从大三角形开始,然后找到每一边的中点

在连接中点之前,我们必须找到中点。 找到中点的方法大家都在高中学过。

这里,p1、p2是坐标,在此以元组的形式表现。

defgetmid(P1,p2 ) : return (P1[1] p2 [1] )/2,() P1 [1] )/2 )然后,开始绘制花痴自行车的三角形。 想想那个具体的画法吧。 如果单纯地分为1层,如下所示

层数为0表示是三角形。

要画一楼,最重要的是找到那三个中间点,画上图所示的三角形。

层数为2时,需要分别对周围的3个三角形再进行一次以上的处理。 也就是说,找到三个蓝色三角形的中点,将这三个中点连接到线上,忽略中间的三角形。 把上面的图当成一个单位吧。 而且,他发现高层花痴的自行车三角形由很多这个单位构成,例如degree==2:

所以,考虑到不断地画同一个三角形,这里当然用递归的方法处理。

首先,画一个外部轮廓的大三角形。 代码如下。

defSierpinski(points,degree,myTurtle ) : colormap=['blue '、' red '、' green '、' white '、' yellow '、' VIO colormap[degree],myTurtle,colormap是颜色列表,根据层次使用不同的颜色,points接收由元组组成的列表,是整个外部轮廓的大三角形坐标,调用绘制上面三角形的函数

如上所述,层数为0时,为三角形。 此时,当然不需要画。 因此,需要进行递归部分的判断语句。

if degree0:然后进入了花痴自行车三角形的绘制区。 首先让Python画左下角的三角形。 让我们先画左下角的三角形,直到degree==0,以便分形树走到右边的树。 完成向左下角三角的递归,要绘制左下角的三角形,需要大三角形的左顶点坐标和两个中点坐标。 这里是getMid (

Sierpinski([points[0],getmid[0],points[1],getmid[0],points[2] ),degree - 1,

然后,要绘制p[1]处的三角,需要与p[0]p[2]的中点

Sierpinski([points[1],getmid[0],points[1],getmid[1],points[2] ),degree - 1,

最后:

Sierpinski([points[2],getmid[2],points[1],getmid[0],points[2] ),degree - 1,

fromturtleimport * defdrawtriangle (points,color, myturtle (: my turtle.fill color (color ) myTurtle.up ) myturtle.goto ) points [0] (my turtle.down ) (my turtle ) ) myturtle.goto ) points[0] ) myTurtle.end_fill ) defgetmid ) P1,p2 ) 3360return (P1(1) p2 )1)/2 ) defsierier Orange']drawtriangle(points,colormap[degree],myTurtle ) ifdegree03360SierPinski ) points[1],get mid (points ) points [2]、degree - 1,myturtle]Sierpinski([points[1]、getmid(points[0]、points[1] )、getmid ) ) getmid ) points[2]、points[1]、getmid ) points[0]、points[2]、磁盘my turtle (my turtle=turtle ) ) mywin=my -100 )、)0] myTurtle ) myWin.exitonclick ) )整体代码如下所示。 递归中只留下一行代码,可以看到小乌龟的行动轨迹。 例如,为什么单独执行第一个递归时,代码会继续绘制左下角的三角形,而剩下的两个则不行呢? (考虑绘制三角形的函数的定义)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。