2013-07-18 2 views
2

Я работаю над написанием рекурсивной функции для рисования вложенных квадратов вокруг центральной точки с использованием turtle. То, что я до сих пор рисует вложенные квадраты, но вокруг угловой точки не центр квадрата.Python Draw a Nested Square

def drawCentSq(t, center,side): 

    xPt=center[0] 
    yPt=center[1] 
    t.up() 
    t.goto(xPt,yPt) 
    xPt-=20 
    yPt+=20 
    t.up() 
    t.goto(xPt,yPt) 
    t.down() 
    for i in range(4): 
     t.forward(side) 
     t.right(90) 


def drawNestSqCent(t, center, side): 
    if side<1: 
     return 
    else: 
     drawCentSq(t,center,side) 
     drawNestSqCent(t,center,side-10) 

def main(): 
    import turtle 
    import random 
    mad=turtle.Turtle() 
    wn=mad.getscreen() 
    print(drawNestSqCent(mad,(0,0),100)) 
main() 

Любые предложения или исправления?

ответ

3

Вы должны сначала вычислить верхний левый угол (начальную точку) из центральной точки и размера квадрата (и я не уверен, в каком направлении есть + x, -x, + y, и -y в Черепаха, но вы должны это понять).

import turtle 
import random 

def drawCentSq(t, center,side): 
    ## calculate top left corner 
    xPt=center[0]-side/2 
    yPt=center[1]+side/2 
    t.up() 
    t.goto(xPt, yPt) 
    t.down() 
    for i in range(4): 
     t.forward(side) 
     t.right(90) 

def drawNestSqCent(t, center, side): 
    if side<1: 
     return 
    ## else: not necessary as long as the return comes first 
    drawCentSq(t,center,side) 
    drawNestSqCent(t,center,side-10) 

mad=turtle.Turtle() 
wn=mad.getscreen() 
drawNestSqCent(mad,[0,0],100) 
+0

Какое уравнение или формула вы рекомендуете использовать, чтобы каждый раз находить эту точку? – user2553807

+0

Нет смысла публиковать, если вы его не читаете. – user2133443

0

Настоящий эффективный скрипт.

def drawSquare(cx,cy,turtle,side): 
    for i in range(4): 
     turtle.forward(side) 
     turtle.right(90) 
    turtle.forward(5) 
    turtle.right(90) 
    turtle.up() 
    turtle.forward(5) 
    turtle.down() 
    turtle.left(90) 

def drawNestedSquare(cx,cy,turtle,side): 
    if side >= 1: 
     drawSquare(cx,cy,turtle,side) 
     drawNestedSquare(cx,cy,turtle,side-10) 

def drawsTheSquares(cx,cy,turtle,side): 
    turtle.up() 
    turtle.goto(cx,cy) 
    turtle.forward(side/2) 
    turtle.right(90) 
    turtle.forward(side/2) 
    turtle.right(90) 
    turtle.down() 
    drawNestedSquare(cx,cy,turtle,side) 

def main(): 
    import turtle 
    artem = turtle.Turtle() 
    drawsTheSquares(150,10,artem,75) 

main()