在菱形拼凑中将菱形放入矩形内的问题

时间:2020-01-09 12:29:28

标签: python

我需要一些有关拼布内部菱形的帮助。 主要问题: -代码质量-我在绘制三角形时不认为我的drawRhombuses是正确的,因为我无法真正为所有点编写代码。 -在菱形的外面,我真的有一个奇怪的三角形,如您在这里看到的:https://ibb.co/9w60DKx 最终结果应如下所示:https://ibb.co/N3HpNhC 如果有人有答案,如果您能向我解释代码,我将不胜感激。 这是我的拼凑而成:


VALID_COLOURS = ['red', 'blue', 'green', 'cyan', 'orange']

colours = ['', '', '']

def main():
    size = getSize()
    selectColours()
    win = GraphWin("Patchwork", size*100, size*100)
    drawPatches(win, size)

    win.getMouse()
    win.close()

def getSize():
    while True:
        size = ""

        while not size.isdecimal():
            size = input("Please enter a valid size between 2 - 9 for your patchwork: ")

            if not size.isdecimal():
                print("Only digits are allowed.")

        size = int(size)

        if 2 <= size <= 9:
            break

        print("The valid numbers are 2 - 9.")

    return size

def selectColours():
    for index in range(len(colours)):
        colours[index] = validateColour(index + 1)

def validateColour(colourNumber):
    colour = None

    while True:
        colour = input("Please pick 3 colours {0}: ".format(colourNumber))

        if colour in VALID_COLOURS:
            if not repetitiveColour(colour):
                break

            print("Cannot enter the same colour more than once.")
        else:
            print("The possible colours are:", ", ".join(VALID_COLOURS))

    return colour

def repetitiveColour(colour):
    return colour in colours

def drawLine(win, p1, p2, colour):
    line = Line(p1, p2)
    line.setOutline(colour)
    line.draw(win)

def drawRectangle(win, p1, p2, colour):
    square = Rectangle(p1, p2)
    square.setFill(colour)
    square.draw(win)
def drawRhombus(win,p1,p2,p3,colour):
    rhombus= Polygon(p1,p2,p3,)
    rhombus.setFill(colour)
    rhombus.draw(win)




def drawPatchOne(win, position, colour):
    x = position.getX()
    y = position.getY()

    for i in range(5):
        drawLine(win, Point(x+50,y+50), Point(x + 100, y + 100 - i*20), colour)
        drawLine(win, Point(x+50,y+50), Point(x + 100 - i*20, y + 100), colour)
        drawLine(win, Point(x+50,y+50), Point(x, y + 100 - i*20), colour)
        drawLine(win, Point(x+50,y+50), Point(x +i*20, y), colour)
        drawLine(win, Point(x+50,y+50), Point(x + 100-i*20, y+i*20 ), colour)

def drawPatchTwo(win, position, colour):
    x = position.getX()
    y = position.getY()

    drawRectangle(win, Point(x + 0, y + 0), Point(x + 100, y + 100), colour)

    for i in range(5):
        drawRectangle(win, Point(x + 20 + i*5, y + 0), Point(x + 20 , y +20), 'white')                                                            
        drawRectangle(win, Point(x + 60 + i*5, y + 0), Point(x + 60 , y +20), 'white')
        drawRectangle(win, Point(x + 20 + i*5, y + 40), Point(x + 20 , y +60), 'white')
        drawRectangle(win, Point(x + 60 + i*5, y + 40), Point(x + 60 , y +60), 'white')
        drawRectangle(win, Point(x + 20 + i*5, y + 80), Point(x + 20 , y +100), 'white')
        drawRectangle(win, Point(x + 60 + i*5, y + 80), Point(x + 60 , y +100), 'white')
        drawRhombus(win,Point(x+10+i*5, y+0), Point(x+40, y+10),Point(x+20, y+10),colour)
        drawRhombus(win,Point(x+10+i*5, y+20), Point(x+40, y+10),Point(x+20, y+10),colour)
        drawRhombus(win,Point(x+10+i*5, y+40), Point(x+40, y+50),Point(x+20, y+50),colour)
        drawRhombus(win,Point(x+10+i*5, y+60), Point(x+40, y+50),Point(x+20, y+50),colour)
        drawRhombus(win,Point(x+10+i*5, y+80), Point(x+40, y+90),Point(x+20, y+90),colour)
        drawRhombus(win,Point(x+10+i*5, y+100), Point(x+40, y+90),Point(x+20, y+90),colour)
        drawRhombus(win,Point(x+50+i*5, y+0), Point(x+80, y+10),Point(x+60, y+10),colour)
        drawRhombus(win,Point(x+50+i*5, y+20), Point(x+80, y+10),Point(x+60, y+10),colour)
        drawRhombus(win,Point(x+50+i*5, y+40), Point(x+80, y+50),Point(x+60, y+50),colour)
        drawRhombus(win,Point(x+50+i*5, y+60), Point(x+80, y+50),Point(x+60, y+50),colour)
        drawRhombus(win,Point(x+50+i*5, y+80), Point(x+80, y+90),Point(x+60, y+90),colour)
        drawRhombus(win,Point(x+50+i*5, y+100), Point(x+80, y+90),Point(x+60, y+90),colour)


 #        



    for i in range(5):
        for j in range(5):

            circle= Circle( Point(x +10+ j*20, y + 10 + i*20),5)
            circle.draw(win)
            circle.setFill("White")

def drawPatches(win, size):
    for row in range(size):
        for column in range(size):
            if 0 < row < size - 1 and 0 < column < size - 1:
                colour = colours[2]
            elif row % 2 != column % 2:
                colour = colours[1]
            else:
                colour = colours[0]

            if row == column:
                drawPatchOne(win, Point(row*100, column*100), colour)
            else:
                drawPatchTwo(win, Point(row*100, column*100), colour)

main()


0 个答案:

没有答案