用pythontu绘制多米尼加国旗(不是多米尼加)

2024-04-20 10:59:29 发布

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

我试着用Python龟画多米尼加国旗(不要和多米尼加国旗混淆)。我目前在代码中除了鸟(我也不知道如何做)之外的所有东西。我似乎也不知道如何让10颗星星正确地出现在红色圆圈内,而星星内部没有线条。如果我能得到一些关于如何在圆圈内排列恒星的技巧,以及如何在中间画鸟的话,那就太棒了。谢谢!在

下面是它的图像:

enter image description here

以下是我目前掌握的代码:

import turtle

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


def drawRect():
    alex.speed(0)
    alex.up()
    alex.fillcolor("green")
    alex.begin_fill()
    alex.setpos(-250, -100)
    alex.down()
    for i in range(2):
        alex.forward(500)
        alex.left(90)
        alex.forward(300)
        alex.left(90)
    alex.end_fill()
drawRect()

def drawLines():
    alex.speed(0)
    alex.fillcolor("yellow")
    alex.begin_fill()
    alex.penup()
    alex.setpos(-250, 70)
    alex.pendown()
    for i in range(2):
        alex.forward(500)
        alex.left(90)
        alex.forward(30)
        alex.left(90)
    alex.end_fill()

    alex.fillcolor("black")
    alex.begin_fill()
    alex.penup()
    alex.setpos(-250, 40)
    alex.pendown()
    for i in range(2):
        alex.forward(500)
        alex.left(90)
        alex.forward(30)
        alex.left(90)
    alex.end_fill()

    alex.pencolor("white")
    alex.fillcolor("white")
    alex.begin_fill()
    alex.penup()
    alex.setpos(-250, 10)
    alex.pendown()
    for i in range(2):
        alex.forward(500)
        alex.left(90)
        alex.forward(30)
        alex.left(90)
    alex.end_fill()

    alex.speed(0)
    alex.fillcolor("yellow")
    alex.begin_fill()
    alex.penup()
    alex.setpos(-40, -100)
    alex.pendown()
    for i in range(2):
        alex.forward(30)
        alex.left(90)
        alex.forward(300)
        alex.left(90)
    alex.end_fill()

    alex.speed(0)
    alex.fillcolor("black")
    alex.begin_fill()
    alex.penup()
    alex.setpos(-10, -100)
    alex.pendown()
    for i in range(2):
        alex.forward(30)
        alex.left(90)
        alex.forward(300)
        alex.left(90)
    alex.end_fill()

    alex.speed(0)
    alex.pencolor("white")
    alex.fillcolor("white")
    alex.begin_fill()
    alex.penup()
    alex.setpos(20, -100)
    alex.pendown()
    for i in range(2):
        alex.forward(30)
        alex.left(90)
        alex.forward(300)
        alex.left(90)
    alex.end_fill()

drawLines()

def drawCircle():
    alex.speed(0)
    alex.up()
    alex.setpos(10, -50)
    alex.down()
    alex.fillcolor("red")
    alex.begin_fill()
    alex.circle(100)
    alex.end_fill()
drawCircle()

def drawStars():
    alex.speed(0)
    alex.pencolor("green")
    alex.fillcolor("green")
    alex.begin_fill()

    for i in range(5):
        alex.forward(20)
        alex.right(144)

def makeStars():
    alex.penup()
    alex.setpos(25, -10)
    alex.pendown()
    for i in range(11):
        drawStars()
        alex.left(35)
        alex.penup()
        alex.forward(45)
        alex.pendown()

makeStars()

Tags: infordefrangeleftfillendforward
1条回答
网友
1楼 · 发布于 2024-04-20 10:59:29

这是家庭作业,还是你自己自学的?不管怎样,画那只鹦鹉都不容易!TwoTwo-Two链接的SVG使用了40多个扭曲的椭圆和大约30条线性路径;我猜它是在一个矢量绘图程序(如Inkscape)中创建的。在

即使您不熟悉SVG,该文件可能仍然对您有用。因为它来自维基百科,我认为它很好地代表了多米尼加当前的官方旗帜,所以元素的大小、位置和颜色应该相当准确。在

以下是该文件中的一些颜色:

yellow: "#fcd116"
green: "#006b3f"
red: "#d41c30" 

海龟模块理解这种格式的颜色。在

。。。在

现在,谈谈你目前的问题。在

我已经很多年没有使用turtle图形了,但是你启发我安装了tkinter,这样我就可以修改你的代码了。我注意到的第一个问题是alex.left(35),应该是36,因为360°/10=36°。在

我尝试了各种各样的方法来使星圈正确地居中,星星也正确地排列在一起,但是在一个小时左右的挫折之后,我放弃了简单的绘图命令。我相信这对海龟专家来说是件轻而易举的事,但我决定采用一种略为三角法的方法。在

由于海龟模块的填充方式,没有简单的方法来绘制填充的星星。一些矢量绘图系统有其他填充模式来解决这个问题,但turtle似乎没有这样做。所以你要么用五角大楼来填充恒星的中心,要么把它画成一个10边的多边形。在

我已经写了一些代码来绘制填充的星星正确的居中和对齐。我的代码中的大小与SVG中的大小不完全相同,但它们非常接近。如果这是为了你自己的自学练习,我很乐意在这里发布我的代码。奥托,如果这是做作业的话,我不应该把整件事都发出去。。。在

如果您先定义所有函数,然后在程序的底部调用它们(最好是在main()函数中),那么阅读代码会更容易。将函数调用与函数定义分散在一起有点混乱。在

相关问题 更多 >