lyk.. 2022-12-19 14:38 采纳率: 100%
浏览 167
已结题

绘制随机分布的圆Python

任务描述:
在图形界面内,每个圆的圆心和半径随机生成,而且不能重叠,需要把每个圆的数据放入列表,新生成的圆要与已有的圆进行比对,即两个圆的圆心的举例必须大于两个圆的半径之和,而又不能超过图形边界。请编写程序,实现随机分布的圆的绘制。

输出:

20个随机分布,半径为2~20的圆。

分析:

利用turtle库中的图形绘制函数来完成圆的绘制。并且利用random库和math库中的函数,实现圆的圆心和半径的随机生成。每次新生成的圆的圆心坐标和半径都放入列表中

首先设定图形窗口为800*600,位于屏幕中心,如stup(800,600)。
假定生成20个圆
定义函数Addc(c),控制新生成的圆不与原有圆发生重叠,且不超出图形边界。

通过循环,在图形边界内,随机生成20个圆的圆心坐标,产生20个半径为2~20的随机圆,放置在列表c

最后通过turtle库中的up(), down(), goto(), crcl()函 数实现圆的绘制。

重要知识点:
(1) turtle 绘图基本操作相关函数的用法: up), down(), goto(), forward(), pencolor(), pensze), hideturtl(),done()等。
(2) 随机函数的用法。
(3) 循环结构在绘图中的运用。

  • 写回答

4条回答 默认 最新

  • ShowMeAI 2022-12-19 14:52
    关注

    望采纳

    下面的示例代码实现了随机生成 20 个圆的圆心和半径,并使用 turtle 库绘制这些圆。

    import turtle
    import random
    import math
    
    # 设定图形窗口大小为 800x600,位于屏幕中心
    turtle.setup(800, 600)
    
    # 定义函数 Addc,用于生成新的圆,并检查它是否与已有圆重叠或超出图形边界
    def Addc(circles):
        # 随机生成圆的圆心坐标和半径
        x = random.uniform(-300, 300)
        y = random.uniform(-200, 200)
        r = random.uniform(2, 20)
    
        # 检查新圆是否与已有圆重叠
        for circle in circles:
            # 计算两圆圆心之间的距离
            distance = math.sqrt((x - circle[0])**2 + (y - circle[1])**2)
            # 如果两圆圆心距离小于等于两圆半径之和,则两圆重叠
            if distance <= r + circle[2]:
                return False
    
        # 检查新圆是否超出图形边界
        if x + r > 300 or x - r < -300 or y + r > 200 or y - r < -200:
            return False
    
        # 将新圆加入列表
        circles.append((x, y, r))
        return True
    
    # 用于存储圆的列表
    circles = []
    
    # 生成 20 个圆
    for i in range(20):
        # 循环直到生成一个合法的圆为止
        while not Addc(circles):
            pass
    
    # 使用 turtle 绘制圆
    turtle.up()
    
    for circle in circles:
        turtle.goto(circle[0], circle[1])
        turtle.down()
        turtle.circle(circle[2])
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 12月27日
  • 已采纳回答 12月19日
  • 创建了问题 12月19日

悬赏问题

  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
  • ¥20 pcf8563时钟芯片不启振
  • ¥20 pip2.40更新pip2.43时报错
  • ¥15 换yum源但仍然用不了httpd
  • ¥50 C# 使用DEVMOD设置打印机首选项
  • ¥15 麒麟V10 arm安装gdal
  • ¥20 OPENVPN连接问题