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

如何使用Python的turtle库绘制带线条的重叠圆形图案

turtle绘制相交韦恩图方案

完整可运行代码

from turtle import Turtle
from time import sleep

class OperationsOnSets():
    def __init__(self):
        self.font_style = ("Times New Roman", 40, "bold")
        # 定义区域填充颜色
        self.left_color = "#a6c1ee"
        self.right_color = "#fbc2eb"
        self.intersection_color = "#d4a5e7"

    def move_turtle_pos(self, x, y, turtle):
        turtle.up()
        turtle.setpos(x, y)
        turtle.down()

    def draw_venn(self):
        turtle = Turtle()
        turtle.pensize(2)
        turtle.speed(2)
        # 隐藏海龟指针
        turtle.hideturtle()

        # 先绘制两个圆的轮廓
        self.move_turtle_pos(-100, -50, turtle)
        turtle.circle(200)
        self.move_turtle_pos(100, -50, turtle)
        turtle.circle(200)

        # 填充左侧独有区域
        turtle.color(self.left_color)
        turtle.begin_fill()
        self.move_turtle_pos(-100, -50, turtle)
        # 画左圆的左半部分
        turtle.circle(200, 180)
        # 画完半圆走到右圆的对应点画弧线闭合
        turtle.circle(-200, 180)
        turtle.end_fill()

        # 填充右侧独有区域
        turtle.color(self.right_color)
        turtle.begin_fill()
        self.move_turtle_pos(100, -50, turtle)
        # 画右圆的右半部分
        turtle.circle(200, 180)
        turtle.circle(-200, 180)
        turtle.end_fill()

        # 填充交集区域
        turtle.color(self.intersection_color)
        turtle.begin_fill()
        self.move_turtle_pos(0, 150, turtle)
        turtle.circle(200, 60)
        turtle.circle(-200, 120)
        turtle.circle(200, 60)
        turtle.circle(-200, 120)
        turtle.end_fill()

        # 重画一遍外轮廓保证线条清晰
        turtle.pencolor("black")
        self.move_turtle_pos(-100, -50, turtle)
        turtle.circle(200)
        self.move_turtle_pos(100, -50, turtle)
        turtle.circle(200)

        # 添加集合标注
        self.move_turtle_pos(-200, 100, turtle)
        turtle.write("A", font=self.font_style)
        self.move_turtle_pos(170, 100, turtle)
        turtle.write("B", font=self.font_style)
        self.move_turtle_pos(-15, 100, turtle)
        turtle.write("A∩B", font=self.font_style)

        sleep(5)
        turtle.screen.mainloop()

example = OperationsOnSets()
example.draw_venn()

改动说明

  • 修复了原代码类方法缩进错误、缺失模块导入的语法问题
  • 新增分区域填充逻辑,三种不同颜色区分集合独有区域和交集区域
  • 补充了集合文本标注,复用了你定义的font_style参数
  • 最后重绘外轮廓,避免填充覆盖掉边框线条

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:27:02