如何使用龟图形创建色轮?

时间:2014-05-02 01:23:13

标签: python python-3.x turtle-graphics

我正在尝试使用Python中的turtle模块创建一些色轮。假设我有一个颜色列表:

colors = ["#880000","#884400","#888800","#008800","#008888","#000088",
          "#440088","#880088"]

我的目标是围绕一个半径为250px的圆圈绘制颜色:

def drawColors():
    for color in colors:
        turtle.color(dark)
        for i in range(len(colors)):
            turtle.begin_fill
            turtle.circle(150)
            turtle.end_fill()
        turtle.done()

2 个答案:

答案 0 :(得分:3)

您可以通过将圆圈分成多个circular sectors(也称为饼图片)并以不同颜色绘制每个圆圈来实现。使用乌龟图形进行操作的棘手部分是将乌龟的初始位置和方向(或方向)设置为每个圆弧的起点。此外,与具有完整圆的情况不同,您需要在填充之前手动关闭图形,方法是将最后一个线段从弧的末端绘制回圆的中心。

虽然这个可以以数学方式计算,但是在下面的代码中通过记住,除了第一个扇区之外的所有部分,前一个扇区停止并使用它作为起始位置和航向时,可以避免这样做为了下一个。幸运的是,对于初始值,这些值计算相对简单:位置设置为(circle_center x值+ radius,circle_center y值),正北方向为90°。

import turtle

colors = ['#880000','#884400','#888800','#008800',
          '#008888','#000088','#440088','#880088']

def draw_color_wheel(colors, radius, center=(0, 0)):
    slice_angle = 360 / len(colors)
    heading, position = 90, (center[0] + radius, center[1])
    for color in colors:
        turtle.color(color, color)
        turtle.penup()
        turtle.goto(position)
        turtle.setheading(heading)
        turtle.pendown()
        turtle.begin_fill()
        turtle.circle(radius, extent=slice_angle)
        heading, position = turtle.heading(), turtle.position()
        turtle.penup()
        turtle.goto(center)
        turtle.end_fill()

draw_color_wheel(colors, 150, center=(25, 50))
turtle.hideturtle()
print('done - press any key to exit')
turtle.onkeypress(exit)
turtle.listen()
turtle.done()

结果

enter image description here

答案 1 :(得分:0)

由于这个问题再次变为活跃,让我们使用标记而不是绘图来解决它:

from turtle import Turtle, Screen

colors = ['#880000', '#884400', '#888800', '#008800',
          '#008888', '#000088', '#440088', '#880088']

def draw_color_wheel(colors, radius, center=(0, 0)):
    slice_angle = 360 / len(colors)

    yertle = Turtle(visible=False)
    yertle.penup()

    yertle.begin_poly()
    yertle.sety(radius)
    yertle.circle(-radius, extent=slice_angle)
    yertle.home()
    yertle.end_poly()

    screen.register_shape('slice', yertle.get_poly())
    yertle.shape('slice')
    yertle.setposition(center)

    for color in colors:
        yertle.color(color)
        yertle.stamp()
        yertle.left(slice_angle)

screen = Screen()

draw_color_wheel(colors, 250, center=(25, 50))

screen.exitonclick()

<强>输出

enter image description here

这种方法占用的代码略少,产生的输出速度明显提高。