如何用Python图画花

2021-04-11 23:42:38 发布

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

我正在练习我的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

2条回答
网友
1楼 ·

我一眼就知道你的缩进错了。在

 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)))获得所需的颜色。在

网友
2楼 ·

你问的是两个不同的节目,让我们先谈谈第二个节目。除了颜色问题外,循环逻辑在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()

enter image description here

要回到原来的问题,一种方法是在做下一种颜色的矩形之前,先放下矩形的每种颜色。这里有一个重新编写的代码,只画出图像的花瓣部分,因为我想这就是你要问的问题。我只是观察了一下下面的一些距离和角度,你需要做些数学运算才能使它们正确:

^{pr2}$

enter image description here

相关问题