鱼C论坛

 找回密码
 立即注册
查看: 1981|回复: 1

[已解决]python类斯洛克图形

[复制链接]
发表于 2020-10-30 12:25:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
目前我只会打印到一行上,怎么分行来打印呢?
  1. import turtle
  2. turtle.color("blue")
  3. turtle.pensize(5)
  4. turtle.penup()
  5. turtle.fd(-100)
  6. turtle.pendown()
  7. turtle.speed(40)

  8. def fun(n):
  9.     for j in range(n):
  10.         turtle.circle(20)
  11.         turtle.penup()
  12.         turtle.fd(40)
  13.         turtle.pendown()

  14. n = 1
  15. while n<=5:
  16.     fun(n)
  17.     n += 1

  18. turtle.done()
复制代码
最佳答案
2020-10-30 15:08:49
逻辑是:定义一个画一行的函数,画完一行之后再确定下一行的起始点,然后从新的起始点再次调用函数,往复直到画完就ok了。
图片是确定起始点的位置,用勾股定理,默认第一行从中心点开始,第二行横坐标就是圆的半径r,纵坐标是根号下斜边(2r)平方减去横坐标(r)平方,

代码中设置了变量i来确定层数,第二层起始点横坐标就是1*r,斜边是1*2r,第三层横坐标是2*r,斜边是2*2r,以此类推
为了更方便,设置了用户输入半径和层数
代码如下:
  1. import turtle
  2. import math


  3. num = int(input('请输入类斯洛克图形层数:'))
  4. r = int(input('请输入圆的半径:'))
  5. turtle.color("blue")
  6. turtle.pensize(5)
  7. turtle.penup()
  8. turtle.pendown()
  9. turtle.speed(10)


  10. def fun(num):
  11.     for j in range(num):
  12.         turtle.circle(r)
  13.         turtle.penup()
  14.         turtle.fd(2*r)
  15.         turtle.pendown()


  16. i = 0
  17. while num > 0:
  18.     fun(num)
  19.     # 移动到下一层起始点
  20.     i += 1
  21.     turtle.penup()
  22.     point = r*i
  23.     # 确定下一层第一个圆的圆心位置
  24.     turtle.goto(point,-(math.sqrt((2*point)**2-point**2)))
  25.     turtle.pendown()
  26.     num -= 1


  27. turtle.done()
复制代码

捕获.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-30 15:08:49 | 显示全部楼层    本楼为最佳答案   
逻辑是:定义一个画一行的函数,画完一行之后再确定下一行的起始点,然后从新的起始点再次调用函数,往复直到画完就ok了。
图片是确定起始点的位置,用勾股定理,默认第一行从中心点开始,第二行横坐标就是圆的半径r,纵坐标是根号下斜边(2r)平方减去横坐标(r)平方,

代码中设置了变量i来确定层数,第二层起始点横坐标就是1*r,斜边是1*2r,第三层横坐标是2*r,斜边是2*2r,以此类推
为了更方便,设置了用户输入半径和层数
代码如下:
  1. import turtle
  2. import math


  3. num = int(input('请输入类斯洛克图形层数:'))
  4. r = int(input('请输入圆的半径:'))
  5. turtle.color("blue")
  6. turtle.pensize(5)
  7. turtle.penup()
  8. turtle.pendown()
  9. turtle.speed(10)


  10. def fun(num):
  11.     for j in range(num):
  12.         turtle.circle(r)
  13.         turtle.penup()
  14.         turtle.fd(2*r)
  15.         turtle.pendown()


  16. i = 0
  17. while num > 0:
  18.     fun(num)
  19.     # 移动到下一层起始点
  20.     i += 1
  21.     turtle.penup()
  22.     point = r*i
  23.     # 确定下一层第一个圆的圆心位置
  24.     turtle.goto(point,-(math.sqrt((2*point)**2-point**2)))
  25.     turtle.pendown()
  26.     num -= 1


  27. turtle.done()
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +2 收起 理由
巴巴鲁 + 5 + 5 + 2 感谢这么详细的解答

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-12 20:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表