制作颜色混合游戏:如果你点击红色和黄色,我可以用什么命令使颜色变成橙色?

2024-05-17 12:13:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用python和turtle,绘制了3个绘制管:红色、黄色和蓝色。每根管子都有一个按钮,你可以点击,下面的碗会改变颜色,就像你在“混合”颜色一样。我已经点击红色使碗变成红色(以及其他颜色),但是现在我需要一些命令或语句,这样如果你点击红色的管,然后点击黄色的管,碗就会变成橙色。我不知道该怎么办,3根管子都有自己的海龟

我有使碗变成红色、黄色和红色的功能。 我也有一个功能,使碗橙色。 但如果真的有一个命令,我不知道你可以在哪里混合颜色或“如果点击”命令,我会使用它

请帮忙!截止日期:4月25日

我的一个函数的示例:

def redColor(x, y):
  red.hideturtle()
  red.tracer(0,0)
  red.seth(0)
  red.goto(-140,-80)
  red.pd()
  red.fillcolor('red')

  red.begin_fill()
  red.pensize(1)
  red.fd(280)
  red.rt(135)
  red.fd(66)
  red.rt(45)
  red.fd(190)
  red.rt(45)
  red.fd(66)
  red.end_fill()
  red.update()

屏幕上单击命令的示例:

red.onclick(redColor)
ylw.onclick(ylwColor)
blue.onclick(blueColor) 

Tags: 命令功能示例颜色绘制redfill橙色
1条回答
网友
1楼 · 发布于 2024-05-17 12:13:42

在内部,Python使用RGB color model表示颜色:对于每种颜色,它存储其Red、Green和Blue组件的强度。它允许每个组件有256个可能的值(从0到255),因此有256个红色、256个绿色和256个蓝色。这允许组合256*256*256=~1600万种颜色

您可以尝试此online RGB mixer(从维基百科网站获取的链接)来感受此颜色模型

例如,(255,0,0)将是最大红色强度,没有绿色和蓝色,因此这将为您提供全红色。而(255255,0)是最大的红色和绿色强度,没有蓝色,这导致黄色

要混合两种这样的RGB颜色,只需取每个分量的平均值。因此,当混合全红色(255,0,0)和黄色(255255,0)时,红色成分的平均值为(255+255)/2=255,绿色成分的平均值为(0+255)/2=128,蓝色成分的平均值为(0+0)/2=0

还有一种替代表示法,其中每个组件的强度表示为0.0到1.0之间的值,而不是0到255之间的值。所以在这个表示法中,全红色是(1.0,0.0,0.0),黄色是(1.0,1.0,0.0)。橙色将再次成为每个成分的平均值,即(1.0,0.5,0.0)。使用哪一个并不重要,但在我们的例子中,0.0-1.0表示更容易,因为我们在取平均值时不必担心四舍五入

要在海龟身上使用此功能,您必须采取两个步骤:

  • 切换屏幕以使用0.0-1.0颜色表示法和screen.colormode(1.0)reference
  • fillcolor((1.0,0.0,0.0))而不是fillcolor('red')设置海龟的颜色。当您对海龟调用fillcolor()时,它将为您提供RGB表示(reference

总而言之:

import turtle

# Use the 0.0-1.0 color model instead of the 0-255 one
screen = turtle.Screen()
screen.colormode(1.0)

red_turtle = turtle.Turtle()
red_turtle.fillcolor((1.0, 0.0, 0.0))

yellow_turtle = turtle.Turtle()
yellow_turtle.fillcolor((1.0, 1.0, 0.0))

# Get the RGB values of the red and yellow turtle
r1,g1,b1 = red_turtle.fillcolor()
r2,g2,b2 = yellow_turtle.fillcolor()

# Take the average of each component, resulting in orange
r3 = (r1 + r2) / 2.0
g3 = (g1 + g2) / 2.0
b3 = (b1 + b2) / 2.0

orange_turtle = turtle.Turtle()
orange_turtle.fillcolor((r3, g3, b3))

turtle.done()

相关问题 更多 >