鱼C论坛

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

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

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

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

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

x
目前我只会打印到一行上,怎么分行来打印呢?
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()
最佳答案
2020-10-30 15:08:49
逻辑是:定义一个画一行的函数,画完一行之后再确定下一行的起始点,然后从新的起始点再次调用函数,往复直到画完就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()
捕获.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-30 15:08:49 | 显示全部楼层    本楼为最佳答案   
逻辑是:定义一个画一行的函数,画完一行之后再确定下一行的起始点,然后从新的起始点再次调用函数,往复直到画完就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()

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-18 04:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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