python类斯洛克图形
目前我只会打印到一行上,怎么分行来打印呢?import turtle
turtle.color("blue")
turtle.pensize(5)
turtle.penup()
turtle.fd(-100)
turtle.pendown()
turtle.speed(40)
def fun(n):
for j in range(n):
turtle.circle(20)
turtle.penup()
turtle.fd(40)
turtle.pendown()
n = 1
while n<=5:
fun(n)
n += 1
turtle.done() 逻辑是:定义一个画一行的函数,画完一行之后再确定下一行的起始点,然后从新的起始点再次调用函数,往复直到画完就ok了。
图片是确定起始点的位置,用勾股定理,默认第一行从中心点开始,第二行横坐标就是圆的半径r,纵坐标是根号下斜边(2r)平方减去横坐标(r)平方,
https://s1.ax1x.com/2020/10/30/BtMRz9.png
代码中设置了变量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()
页:
[1]