2013-07-18 110 views
2

我正在编写一个递归函数来使用turtle围绕中心点绘制嵌套正方形。到目前为止,我所画的是嵌套广场,但围绕角点而不是广场中心。Python绘制嵌套正方形

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 in乌龟,但你应该明白这一点)。

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