问题
Hi guys I'm trying to replicate this image:
It's almost done I just have one issue, where the triangle is supposed to be yellow it isn't seeming to work.
Mine:
Code:
fill(True)
fillcolor('green')
width(3)
forward(200)
left(120)
forward(200)
left(120)
forward(200)
fill(False)
right(180)
forward(100)
right(60)
forward(100)
left(120)
fill(True)
fillcolor('red')
forward(200)
left(120)
forward(200)
left(120)
forward(200)
fill(False)
Any help would be appreciated. (I can't add yellow to the second part of the code)
回答1:
To the best of my knowledge, turtle
does not support transparency. The green triangle will overlay the red triangle and the area where they overlap will not "add" to yellow. You have to explicitly draw the yellow triangle. Try adding this to your code:
fill(True)
fillcolor('yellow')
left(120)
forward(100)
left(120)
forward(100)
left(120)
forward(100)
fill(False)
Also, it might be a good idea to define a function def triangle(size, color)
to reduce the amount of repetition in your code, e.g. like this:
def triangle(size, color):
fill(True)
fillcolor(color)
for _ in range(3):
forward(size)
left(120)
fill(False)
Then you just have to position the turtle and call that function to draw a triangle.
回答2:
Although turtle does not support transparency, we can still do some color mixing in Python rather than hardcode "yellow":
from operator import add
RED = (1.0, 0.0, 0.0)
GREEN = (0.0, 1.0, 0.0)
SUM = map(add, RED, GREEN)
This gives us the option of trying some other primary colors and seeing what their mix comes out to be. For example:
import turtle
from operator import add
PRIMARY_1 = (1.0, 0.0, 0.0) # red
PRIMARY_2 = (0.0, 0.0, 1.0) # blue
SECONDARY_SUM = map(add, PRIMARY_1, PRIMARY_2)
TRIANGLE_SIZE = 200
BORDER_SIZE = 5
STAMP_UNIT = 20
SQRT_3 = 3 ** 0.5
turtle.shape("triangle")
turtle.hideturtle()
turtle.penup()
turtle.right(30) # realign triangle
turtle.fillcolor(PRIMARY_1)
turtle.shapesize(TRIANGLE_SIZE / STAMP_UNIT, TRIANGLE_SIZE / STAMP_UNIT, BORDER_SIZE)
turtle.stamp()
turtle.fillcolor(PRIMARY_2)
y_offset = TRIANGLE_SIZE * SQRT_3 / 4
turtle.goto(TRIANGLE_SIZE / 4, -y_offset)
turtle.stamp()
turtle.shapesize(TRIANGLE_SIZE / STAMP_UNIT / 2, TRIANGLE_SIZE / STAMP_UNIT / 2, BORDER_SIZE)
turtle.fillcolor(SECONDARY_SUM)
turtle.sety(turtle.ycor() + 2 * y_offset / 3)
turtle.stamp()
turtle.exitonclick()
Clearly, this approach is overly simplistic and for true mixing the code will need to be more sophisticated. But we don't have to give up completely by hardcoding colors due to lack of transparency.
OUTPUT
来源:https://stackoverflow.com/questions/29005371/turtle-make-triangle-different-color