逻辑是:定义一个画一行的函数,画完一行之后再确定下一行的起始点,然后从新的起始点再次调用函数,往复直到画完就ok了。
图片是确定起始点的位置,用勾股定理,默认第一行从中心点开始,第二行横坐标就是圆的半径r,纵坐标是根号下斜边(2r)平方减去横坐标(r)平方,
代码中设置了变量i来确定层数,第二层起始点横坐标就是1*r,斜边是1*2r,第三层横坐标是2*r,斜边是2*2r,以此类推
为了更方便,设置了用户输入半径和层数
代码如下:
- import turtle
 
- import math
 
 
 
- num = int(input('请输入类斯洛克图形层数:'))
 
- r = int(input('请输入圆的半径:'))
 
- turtle.color("blue")
 
- turtle.pensize(5)
 
- turtle.penup()
 
- turtle.pendown()
 
- turtle.speed(10)
 
 
 
- def fun(num): 
 
-     for j in range(num):
 
-         turtle.circle(r)
 
-         turtle.penup()
 
-         turtle.fd(2*r)
 
-         turtle.pendown()
 
 
 
- i = 0
 
- while num > 0:
 
-     fun(num)
 
-     # 移动到下一层起始点
 
-     i += 1
 
-     turtle.penup()
 
-     point = r*i
 
-     # 确定下一层第一个圆的圆心位置
 
-     turtle.goto(point,-(math.sqrt((2*point)**2-point**2)))
 
-     turtle.pendown()
 
-     num -= 1
 
 
 
- turtle.done()