2014-10-04 108 views
1

我想用蟒蛇绘制多米尼加国旗(不要与多米尼加国旗混淆)。我目前在代码中除鸟之外(我不知道该怎么做)。我似乎也无法弄清楚如何让10颗星在红色圆圈内适当地出现,星星内部没有任何线条。如果我能够得到一些关于如何将星体置于圆内的技巧以及如何去处理中间的鸟,这将是非常棒的。谢谢!使用Python乌龟绘制多米尼加国旗(不是多米尼加)

这里是它的图像:

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() 
+0

你可以直接显示它:'image = tkinter.PhotoImage(file ='/ path/to/dominica-flag.png')' – jfs 2014-10-04 23:12:04

+0

只是为了显示标志,看起来像SVG(http ://upload.wikimedia.org/wikipedia/commons/c/c4/Flag_of_Dominica.svg获得宽松许可)。如果这是一种乌龟学习练习,你甚至可以将它的路径转换成乌龟命令,尽管这并不是微不足道的(首先你要查看SVG路径语法,然后在坐标尺度和形状描述方式之间进行转换。 ..)。 – twotwotwo 2014-10-05 08:15:46

+0

这是一个海龟学习练习。所以我不能只是得到一张照片并显示它。我需要从头开始尽可能详细地描述它。 – Nate 2014-10-05 19:35:06

回答

0

这是家庭作业,或者说你做了你自己-学习?无论哪种方式,绘制鹦鹉是而不是会很容易!两个连接的SVG使用超过40个扭曲的椭圆和大约30个线性路径;我想它是在矢量绘图程序(例如Inkscape)中创建的。

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

这里有一些从该文件的颜色:

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

乌龟模块了解到色彩使用该格式。

...

现在,到您目前的问题。

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

我尝试了各种东西来获得明星圈正确居中,和正确对齐的明星,但一个小时后还是这样的挫折我放弃了简单的绘画命令。我相信这对乌龟专家来说是一件轻而易举的事情,但我决定采用稍微更多的三角函数法。

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

我写了一些代码,绘制了正确居中和对齐的星星。我的代码中的大小不是,正好是与SVG中的大小相同,但它们非常接近。如果这是为了您自己的自学习练习,我很高兴在这里发布我的代码。 OTOH,如果这是我的功课也许不应该张贴整个事情...

PS。如果您先定义所有函数,然后在程序底部调用它们(最好在main()函数中),则它更易于阅读代码。将函数调用与函数定义分开有点麻烦。