在Python中复制此设计

时间:2013-11-29 05:56:38

标签: python

我一直在尝试使用Python复制这个设计。

我正在使用Graphics模块obtained here。我目前无法使用任何其他图形模块。

这里的代码允许我在循环重复的一行中画出5个圆圈。

def fdShape():
    win = GraphWin(199,199)
    centre = Point(20,100)
    for y in range(5):
        for x in range(5):
            centre = Point(x * 40 + 20, y * 40 + 60)
            circle = Circle(centre, 20)
            circle.setOutline("red")
            circle.draw(win)

我在这段代码中发现的一个问题是它在窗口顶部留下一个空白行,并将最后一个圆圈线放在窗口边框之外的底部。这是第一个问题。

第二种是使用代码显示红色显示的半圆。正如您在本页顶部的图片中看到的那样。我不确定如何使用Python复制这张图片。

谢谢!

2 个答案:

答案 0 :(得分:0)

我看到两个问题。

GraphWin应该初始化为200x200,而不是199x199。

这一行:

centre = Point(x * 40 + 20, y * 40 + 60)

最有可能是:

centre = Point(x * 40 + 20, y * 40 + 20)

答案 1 :(得分:0)

这看起来非常接近:

screenshot of program's output

from graphic import *

def main():
    repeat = 5
    diameter = 40
    radius = diameter // 2
    offset = radius // 2

    win = GraphWin("Graphic Design", diameter*repeat + offset, diameter*repeat)
    win.setBackground('white')

    for i in range(repeat):
        for j in range(repeat):
            draw_symbol(win, i % 2,
                        Point(i*diameter + offset, j*diameter), radius, 'red')

    win.getMouse()
    win.close()

def draw_symbol(win, kind, lower_left, radius, colour):
    centre = Point(lower_left.x+radius, lower_left.y+radius)
    circle = Circle(centre, radius)
    circle.setOutline('')
    circle.setFill(colour)
    circle.draw(win)

    if kind == 0:
        rectangle = Rectangle(lower_left,
                             Point(lower_left.x+radius, lower_left.y+radius*2))
    else:
        rectangle = Rectangle(lower_left,
                             Point(lower_left.x+radius*2, lower_left.y+radius))
    rectangle.setOutline('white')
    rectangle.setFill('white')
    rectangle.draw(win)

    circle = Circle(centre, radius)
    circle.setWidth(1)
    circle.setOutline(colour)
    circle.setFill('')
    circle.draw(win)

main()