lqsqf520 2024-04-12 23:11 采纳率: 0%
浏览 3

用海龟库画一个星空如图

img


这个图像画出来坐标总是不对



import turtle
import random
turtle.setup(1000, 1000)  # 设置窗口大小
random.seed(1)
t = turtle.Turtle(visible=False)  
turtle.tracer(False)  

r, o = map(float,input().split())
t.up()
t.goto(200, 100)
t.down()
t.dot(2*r)
t.up()

t.right(72)
t.down()
random.seed(1)

for i in range(20):

    x = random.uniform(-500, 500)
    y = random.uniform(-500, 500)

    print(x,y)



    t.up()
    t.goto(x,y)
    
    t.down()
    t.begin_fill()
    for j in range(5):
        t.forward(o)
        t.right(144)
    t.end_fill()
  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-12 23:11
    关注

    引自免费微信小程序:皆我百晓生

    为了实现这个星空的绘制,我们需要对给定的代码进行一些调整。以下是详细的步骤和完整的代码。

    首先,我们需要导入所需的模块并设置窗口大小。在代码中已经包含了turtlerandom模块,但是我们还需要导入cmath模块来计算正弦和余弦,这将有助于我们在二维空间中更平滑地分布星星。

    接下来,我们将设置窗口大小为1000x1000像素,并且设置背景颜色为白色。然后,我们可以定义月亮的半径(r)和星星的边长(o),以及月亮的位置。这里我们从用户那里获取这些值。

    接着,我们创建一个Turtle对象并将其可见性设置为False,这样就不会显示画笔。同时禁用tracer,以提高绘制效率。

    我们先绘制月亮,然后使用循环来绘制星星。在每次循环中,我们生成随机的x和y坐标,确保它们在-500到500的范围内。之后,我们将画笔移动到新位置并开始填充一个小五角星。

    下面是完整的代码:

    import turtle
    import random
    import cmath
    
    # 设置窗口大小为1000x1000像素,背景颜色为白色
    turtle.setup(1000, 1000)
    turtle.bgcolor("white")
    
    # 获取用户输入:月亮半径、星星边长和月亮位置
    r, o, moon_x, moon_y = map(float, input("请输入月亮半径、星星边长和月亮位置(x y): ").split())
    
    # 创建一个不可见的Turtle对象,并禁用tracer以提高性能
    t = turtle.Turtle(visible=False)
    turtle.tracer(False)
    
    # 绘制月亮
    t.penup()
    t.goto(moon_x, moon_y)
    t.pendown()
    t.dot(2 * r)
    
    # 绘制星星
    random.seed(1)
    for _ in range(20):
        # 随机生成x和y坐标
        x = random.uniform(-500, 500)
        y = random.uniform(-500, 500)
    
        # 将随机坐标转换为极坐标,以便于平滑分布
        radius = cmath.sqrt(x**2 + y**2)
        angle = cmath.phase(complex(x, y))
    
        # 转换回笛卡尔坐标系
        x = radius * cmath.cos(angle)
        y = radius * cmath.sin(angle)
    
        # 移动画笔到新的位置并绘制五角星
        t.penup()
        t.goto(x, y)
        t.pendown()
        t.begin_fill()
        for _ in range(5):
            t.forward(o)
            t.right(144)
        t.end_fill()
    
    # 启用tracer并更新屏幕
    turtle.tracer(True)
    turtle.done()
    

    这段代码将会根据用户的输入绘制一个带有月亮和20颗随机分布星星的星空。请注意,由于我们使用了随机数生成器,所以每次运行程序时,星星的位置都会有所不同。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月12日