You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python turtle绘制圆周点全连接图案的连线实现问题

问题描述

需要实现圆周上指定数量点位的两两全连接,生成对称几何图案:圆周上共n个点时,每个点都和其余所有点连线。目前已实现点位绘制、底部固定点到其余所有点的连线,但无法完成剩余点位的全连接逻辑,曾尝试抓取已绘制点的坐标实现连线未成功,需要更简便的实现方案。

现有问题代码
import turtle

tur = turtle.Turtle()
bob = turtle.Turtle()
screen = turtle.Screen()

screen.setup(800,800)

stippen = int(screen.numinput("How many?" , "How many dots do you want to draw? " , minval = 1 , maxval = 25)) #用户可输入1-25之间的点数量

formula = 360/stippen #计算点位间隔角度,保证点位均匀分布

r = 300 #圆半径

def roos():
    tur.ht()
    bob.ht()
    bob.speed(0)
    tur.speed(0)
    bob.up()
    tur.up()
    tur.goto(0,-300) #固定底部点位
    bob.goto(0,-300)
    
    for i in range(stippen): #绘制圆周和点位
        tur.down()
        bob.down()
        tur.circle(r,formula,150) #绘制一段圆弧
        tur.dot() #绘制点位
        bob.goto(tur.pos()) #bob移动到当前点位画线
        bob.up()
        bob.goto(0,-300) #回到最底部点位准备画下一条线
        tur.up()

roos()

turtle.done()
实现思路

不需要在绘制过程中实时抓取turtle的位置,直接通过三角函数预计算所有圆周均匀点位的坐标存入列表,再遍历所有点对连线即可,逻辑更简单也不容易出错:

  • 导入math模块做角度、坐标计算
  • 从底部点位开始,按固定角度间隔计算每个点的(x,y)坐标,存入点位列表:圆周上角度为θ的点坐标为(r*cosθ, r*sinθ),注意三角函数需要传入弧度值
  • 遍历点位列表完成所有点的绘制
  • 用双层循环遍历所有不重复的点对,依次连线即可:外层循环取起点索引i,内层循环取索引大于i的终点j,避免重复绘制两点之间的同一条线
修改后完整代码
import turtle
import math

tur = turtle.Turtle()
line_pen = turtle.Turtle()
screen = turtle.Screen()

screen.setup(800, 800)

stippen = int(screen.numinput("How many?", "How many dots do you want to draw? ", minval=1, maxval=25))
angle_step = 360 / stippen
r = 300

def roos():
    # 初始化画笔
    tur.ht()
    line_pen.ht()
    tur.speed(0)
    line_pen.speed(0)
    tur.up()
    line_pen.up()

    # 预计算所有点位坐标,从底部(0,-r)位置开始
    points = []
    for i in range(stippen):
        # 初始角度为-90度(对应底部点位),逐次加角度间隔
        deg = -90 + i * angle_step
        rad = math.radians(deg)
        x = r * math.cos(rad)
        y = r * math.sin(rad)
        points.append((x, y))

    # 绘制所有点位
    for (x, y) in points:
        tur.goto(x, y)
        tur.dot()

    # 两两连线
    for i in range(len(points)):
        x1, y1 = points[i]
        for j in range(i + 1, len(points)):
            x2, y2 = points[j]
            line_pen.goto(x1, y1)
            line_pen.down()
            line_pen.goto(x2, y2)
            line_pen.up()

roos()
turtle.done()

代码运行后输入对应点数,即可生成完整的全连接圆周几何图案,点数在25以内时绘制速度很快,不会出现重复画线的问题。

内容的提问来源于stack exchange,提问作者beginnercoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 05:49:18