使用Python Turtle绘制多米尼克旗(不是多米尼加)

时间:2014-10-04 22:13:46

标签: python python-3.x turtle-graphics

我试图用蟒蛇龟绘制多米尼克旗(不要与多米尼加旗帜混淆)。我目前在代码中有一切除了鸟(我不知道怎么做)。我似乎也无法弄清楚如何让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()

1 个答案:

答案 0 :(得分:0)

这是家庭作业,还是你为自己的自学而做的事情?无论哪种方式,绘制那只鹦鹉变得容易!两个连接的SVG使用了40多个扭曲的椭圆和大约30个线性路径;我猜它是在矢量绘图程序(例如Inkscape)中创建的。

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

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

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

海龟模块了解该格式的颜色。

...

现在,了解你当前的问题。

我没有使用龟图形很多年,但是你启发我安装tkinter以便我可以修补你的代码。我注意到的第一个问题是alex.left(35) makeStars(),应该是36,因为360°/ 10 = 36°。

我尝试了各种各样的东西让星星圈正确居中,星星正确对齐,但经过一个小时的挫折后,我放弃了简单的绘图命令。对于海龟专家来说,我确信这是一件轻而易举的事,但我决定采用稍微更加三角测量的方法。

由于龟模块填充的方式,没有简单的方法来绘制填充的星星。一些矢量绘图系统具有替代填充模式来解决该问题,但是龟似乎没有这样做。所以你要么必须用五边形填充恒星的中心,要么将恒星绘制为10边多边形。

我已经编写了一些代码,可以将填充的恒星正确地对齐并对齐。我的代码中的大小与完全与SVG中的大小完全相同,但它们非常接近。如果这是你自己的自学练习,我很高兴在这里发布我的代码。 OTOH,如果这是作业,我可能不应该发布整个事情......

PS。如果首先定义所有函数,然后在程序底部调用它们(最好在main()函数内),它可以更容易地读取代码。将函数调用与函数定义分散开来有点混乱。