逻辑是:定义一个画一行的函数,画完一行之后再确定下一行的起始点,然后从新的起始点再次调用函数,往复直到画完就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()
复制代码