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

基于Turtle库补全图形绘制代码并定位图形中心点

解决方案:补全图形并定位中心点

问题分析

你当前的代码仅绘制了一组内部结构,而目标图形需要围绕正八边形重复8组该结构;同时由于初始绘制从顶点开始,导致中心点坐标不明确。

1. 补全目标图形

核心思路是将内部结构的绘制逻辑重复8次,每次对应正八边形的一个边方向。以下是修改后的代码:

from turtle import *

# 绘制外围正八边形
for i in range(8):
    forward(100)
    left(45)

# 回到初始顶点位置
penup()
home()
pendown()

f = 50
turns = [(40,40),(90, 40), (80, 40), (90, 40), (90, 50), (90, 40), (80, 40), (90, 40)]

# 重复8次绘制内部结构,对应八边形的8条边
for _ in range(8):
    forward(f)
    for l_angle, r_angle in turns:
        left(l_angle)
        forward(f)
        right(r_angle)
        forward(f)
    # 回到初始位置并旋转45度,准备下一组绘制
    penup()
    home()
    left(45 * (_ + 1))
    pendown()

done()

2. 定位图形中心点

有两种方式可以准确定位中心:

方式一:通过几何计算从顶点移动到中心

正八边形边长为100时,顶点到中心的距离(外接圆半径)可通过公式计算:R = 边长/(2*sin(π/8))。在代码中添加以下片段即可标记中心:

import math

a = 100
R = a / (2 * math.sin(math.pi / 8))  # 计算得到约130.66

penup()
setheading(180 + 22.5)  # 指向中心的方向
forward(R)
pendown()
circle(5)  # 绘制小圆圈标记中心

方式二:从中心开始绘制(更直观)

直接将坐标原点设为图形中心,从中心出发绘制八边形和内部结构,这样中心位置明确无需额外计算:

from turtle import *
import math

a = 100
R = a / (2 * math.sin(math.pi / 8))

penup()
home()  # 中心位置(0,0)
pendown()

# 从中心移动到第一个顶点
penup()
setheading(0)
forward(R)
pendown()

# 绘制外围八边形
for _ in range(8):
    forward(a)
    left(45)

# 回到中心绘制内部结构
penup()
home()
pendown()

f = 50
turns = [(40,40),(90, 40), (80, 40), (90, 40), (90, 50), (90, 40), (80, 40), (90, 40)]

for _ in range(8):
    setheading(45 * _)
    forward(f)
    for l_angle, r_angle in turns:
        left(l_angle)
        forward(f)
        right(r_angle)
        forward(f)
    penup()
    home()
    pendown()

# 标记中心
circle(5)

done()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 21:30:24