Turtle make triangle different color

旧城冷巷雨未停 提交于 2019-12-12 06:56:36

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!