1

我正在尝试产生从暗逐渐变为亮的颜色效果,或者为分配改变色调,但我无法弄清楚如何将循环代码放入运行 100 种不同颜色的 RGB 颜色中。

谁能给我一些关于如何循环通过许多不同颜色的指示?

这是我到目前为止的代码:

import turtle
turtle.setup(width=600, height=500)
turtle.bgcolor("blue")
turtle.reset()
turtle.hideturtle()
turtle.speed(0)
for i in range(1000):
    turtle.forward(i)
    turtle.right(98)

turtle.exitonclick()

PS. I suppose if I can get some help figuring out how to do the colors, I should probably take out the BGCOLOR.

4

2 回答 2

4

首先,创建一个包含一百种不同颜色的列表。每种颜色都应该是一个 RGB 元组,范围从零到一。有很多方法可以做到这一点,但我只是手动输入了我最喜欢的颜色。

colors = [
#reddish colors
(1.00, 0.00, 0.00),(1.00, 0.03, 0.00),(1.00, 0.05, 0.00),(1.00, 0.07, 0.00),(1.00, 0.10, 0.00),(1.00, 0.12, 0.00),(1.00, 0.15, 0.00),(1.00, 0.17, 0.00),(1.00, 0.20, 0.00),(1.00, 0.23, 0.00),(1.00, 0.25, 0.00),(1.00, 0.28, 0.00),(1.00, 0.30, 0.00),(1.00, 0.33, 0.00),(1.00, 0.35, 0.00),(1.00, 0.38, 0.00),(1.00, 0.40, 0.00),(1.00, 0.42, 0.00),(1.00, 0.45, 0.00),(1.00, 0.47, 0.00),
#orangey colors
(1.00, 0.50, 0.00),(1.00, 0.53, 0.00),(1.00, 0.55, 0.00),(1.00, 0.57, 0.00),(1.00, 0.60, 0.00),(1.00, 0.62, 0.00),(1.00, 0.65, 0.00),(1.00, 0.68, 0.00),(1.00, 0.70, 0.00),(1.00, 0.72, 0.00),(1.00, 0.75, 0.00),(1.00, 0.78, 0.00),(1.00, 0.80, 0.00),(1.00, 0.82, 0.00),(1.00, 0.85, 0.00),(1.00, 0.88, 0.00),(1.00, 0.90, 0.00),(1.00, 0.93, 0.00),(1.00, 0.95, 0.00),(1.00, 0.97, 0.00),
#yellowy colors
(1.00, 1.00, 0.00),(0.95, 1.00, 0.00),(0.90, 1.00, 0.00),(0.85, 1.00, 0.00),(0.80, 1.00, 0.00),(0.75, 1.00, 0.00),(0.70, 1.00, 0.00),(0.65, 1.00, 0.00),(0.60, 1.00, 0.00),(0.55, 1.00, 0.00),(0.50, 1.00, 0.00),(0.45, 1.00, 0.00),(0.40, 1.00, 0.00),(0.35, 1.00, 0.00),(0.30, 1.00, 0.00),(0.25, 1.00, 0.00),(0.20, 1.00, 0.00),(0.15, 1.00, 0.00),(0.10, 1.00, 0.00),(0.05, 1.00, 0.00),
#greenish colors
(0.00, 1.00, 0.00),(0.00, 0.95, 0.05),(0.00, 0.90, 0.10),(0.00, 0.85, 0.15),(0.00, 0.80, 0.20),(0.00, 0.75, 0.25),(0.00, 0.70, 0.30),(0.00, 0.65, 0.35),(0.00, 0.60, 0.40),(0.00, 0.55, 0.45),(0.00, 0.50, 0.50),(0.00, 0.45, 0.55),(0.00, 0.40, 0.60),(0.00, 0.35, 0.65),(0.00, 0.30, 0.70),(0.00, 0.25, 0.75),(0.00, 0.20, 0.80),(0.00, 0.15, 0.85),(0.00, 0.10, 0.90),(0.00, 0.05, 0.95),
#blueish colors
(0.00, 0.00, 1.00),(0.05, 0.00, 1.00),(0.10, 0.00, 1.00),(0.15, 0.00, 1.00),(0.20, 0.00, 1.00),(0.25, 0.00, 1.00),(0.30, 0.00, 1.00),(0.35, 0.00, 1.00),(0.40, 0.00, 1.00),(0.45, 0.00, 1.00),(0.50, 0.00, 1.00),(0.55, 0.00, 1.00),(0.60, 0.00, 1.00),(0.65, 0.00, 1.00),(0.70, 0.00, 1.00),(0.75, 0.00, 1.00),(0.80, 0.00, 1.00),(0.85, 0.00, 1.00),(0.90, 0.00, 1.00),(0.95, 0.00, 1.00)
]

然后,在您的循环中,从列表中选择一种颜色。您需要将 i(从 0 到 999)转换为从 0 到列表大小的索引。这最容易通过除以十并转换为整数来完成。然后,您可以使用 设置海龟的颜色turtle.color

for i in range(1000):
    idx = int(i/10)
    color = colors[idx]
    turtle.color(color)
    turtle.forward(i)
    turtle.right(98)

结果是一个壮观的彩虹螺旋:-)

在此处输入图像描述

如果您不想输入三百个数字,您可以通过在HSV 圆柱体的上边缘移动来获得很多鲜艳的颜色。本质上,您保持值和饱和度不变,并在循环的每次迭代中改变色调。Python 的colorsys模块将帮助您将 HSV 值转换为 RGB。

像以前一样,您需要将 i(从 0 到 999 变化)更改为从 0 到 1 变化的色调值。这一次,除以 1000,但不要转换为整数。

import colorsys
#turtle setup stuff goes here
for i in range(1000):
    color = colorsys.hsv_to_rgb(i/1000, 1.0, 1.0)
    #compatibility quirk: on 2.7 and below, use i/1000.0
    turtle.color(color)
    turtle.forward(i)
    turtle.right(98)
于 2013-09-04T19:41:25.370 回答
1

我用不同的方法尝试了这个,但它并不是真正的 100 种颜色。您可能可以稍微更改代码以获得 100。目前,这将是一个彩虹。首先,我从红色变为黄色,再到绿色,再到青色,再到蓝色,再到洋红色,再回到红色。

r = 1
g = 0
b = 0
for _ in range(10):
    color(r, g, b)
    #do whatever you have for the moving
    g += 0.1
for _ in range(10):
    color(r, g, b)
    #do the same thing as before
    r -= 1
...

使用的技术是:选择开始的颜色,在 rgb 色轮上顺时针添加颜色,减去开始的颜色,添加第二种颜色,重复。希望我不会太晚 ;) 编辑:刚刚看了日期。哎呀!至少有些人可能会发现这个答案很有用。

于 2018-11-26T17:30:33.443 回答