我正在尝试使用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()
答案 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()
结果
答案 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()
<强>输出强>
这种方法占用的代码略少,产生的输出速度明显提高。