【问题标题】:How to draw a flower using Python turtle如何使用 Python 乌龟画一朵花
【发布时间】:2018-09-15 09:43:43
【问题描述】:

我正在练习我的 Python 技能。我很好奇如何使用海龟和函数绘制这朵花,而不使用turtle.circle(radius)

https://i.stack.imgur.com/ZYUsz.png

此外,我做了一个这样的多边形螺旋:

import turtle
import math


def draw_polygons():
    """"Make t draws a polygon of side sd and length l"""
    sd = 20
    area = 50000
    while sd >= 3:
        side_length = math.sqrt(area / sd * 4 * math.atan(math.pi / sd))
        for i in range(sd):
            for a_color in ["red", "yellow", "blue", "brown", "pink", "green", "black", "orange", "purple"]:
                rest.fillcolor(a_color)
            rest.begin_fill()
            rest.forward(side_length)
            rest.left(360/sd)
            print("side length =", side_length)
        rest.penup()
        rest.forward(side_length / 2)
        rest.pendown()
        rest.right(30)
        sd -= 1

rest = turtle.Turtle()
wn = turtle.Screen()


draw_polygons()

wn.exitonclick()

我想用不同的颜色填充每个多边形,我做错了什么步骤?或者我接下来应该做什么?

示例多边形螺旋如下所示:

https://i.stack.imgur.com/4U9uD.png

【问题讨论】:

    标签: python pycharm turtle-graphics


    【解决方案1】:

    您询问两个不同的程序,让我们先解决第二个。除了您的颜色问题之外,您的循环逻辑在 begin_fill() 内部而不是内部循环之外是不正确的。因此,让我们重新编写该程序:

    from turtle import Turtle, Screen
    import math
    
    COLORS = ["red", "yellow", "blue", "brown", "pink", "green", "black", "orange", "purple"]
    
    def draw_polygons(sides, area):
        """ Draws a polygon with 'sides' sides and area 'area' """
    
        for i, sd in enumerate(range(sides, 2, -1)):
            side_length = math.sqrt(area / sd * 4 * math.atan(math.pi / sd))
            # print("side length =", side_length)
    
            a_color = COLORS[i % len(COLORS)]
            rest.fillcolor(a_color)
    
            rest.pendown()
            rest.begin_fill()
    
            for _ in range(sd):
                rest.forward(side_length)
                rest.left(360 / sd)
    
            rest.end_fill()
            rest.penup()
    
            rest.forward(side_length / 2)
            rest.right(30)
    
    wn = Screen()
    
    rest = Turtle()
    rest.speed('fastest')
    
    draw_polygons(20, 40_000)
    
    rest.hideturtle()
    
    wn.exitonclick()
    

    要回到你原来的问题,一种方法是在矩形的下一种颜色之前放下矩形的每种颜色。这是您的代码的返工,仅绘制图像的花瓣部分,因为我认为这就是您要问的。我只是观察了下面的一些距离和角度,您需要进行数学运算才能使它们正确:

    from turtle import Turtle, Screen
    import math
    
    COLORS = ["green", "orange", "red", "yellow"]
    
    def draw_polygons(area):
        """ Draws a circle using rectangles with area 'area' """
    
        side_length = math.sqrt(area * math.atan(math.pi / 4))
    
        for a_color in COLORS:
    
            for _ in range(12):
    
                rest.fillcolor(a_color)
    
                rest.forward(3 * side_length / 10)
                rest.right(15)
    
                rest.left(112)  # I eyeballed this angle, need to do math
                rest.pendown()
                rest.begin_fill()
    
                for _ in range(2):
                    rest.forward(side_length * 2)
                    rest.left(90)
                    rest.forward(side_length / 2)
                    rest.left(90)
                rest.end_fill()
                rest.penup()
                rest.right(112)  # undo rotation
    
                rest.forward(3 * side_length / 10)
                rest.right(15)
    
            # I eyeballed these opposing parameters -- need to do the math
            rest.forward(2 * side_length / 13)
            rest.right(7.5)
    
    wn = Screen()
    
    rest = Turtle()
    rest.speed('fastest')
    rest.penup()
    rest.sety(120)
    
    draw_polygons(20_000)
    
    rest.hideturtle()
    
    wn.exitonclick()
    

    【讨论】:

    • 天哪,你帮了我这么多,伙计。万分感谢。我已经设法弄清楚螺旋多边形颜色问题并已经解决了,这与您的解决方案不同,但是当您尝试时我会很感激。但我还在为花朵的身体部位和龟的内部形状而苦苦挣扎,龟也有不同的颜色。希望尽快收到您的来信。
    【解决方案2】:

    乍一看我会说你的缩进是错误的。

     for a_color in ["red", "yellow", "blue", "brown", "pink", "green", "black", "orange", "purple"]:
         rest.fillcolor(a_color)
      rest.begin_fill()
    

    在这里循环所有颜色,然后填充形状。 颜色将始终为紫色,因为这是您在 rest.fillcolor 中设置的最后一种颜色

    作为解决问题的一种方法,您可以创建一个颜色列表并通过调用rest.fillcolor(colors[(i % len(colors))) 来获取您需要的颜色。

    【讨论】:

    • 但是,如何使用海龟图形和函数绘制与图片相同的花朵?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-28
    • 2022-01-20
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    相关资源
    最近更新 更多