1

我需要使用海龟模块在给定中心点的情况下绘制一个正方形。

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

定义主():

import turtle        
mad=turtle.Turtle()
wn=mad.getscreen()
print(drawCentSq(mad,(0,0),50))
main()

我很难让我的乌龟找到正确的起点。

4

2 回答 2

1

你需要:

xPt-=int(side/2.0)
yPt+=int(side/2.0)

因为你只是 += 和 -= 1。

于 2013-07-18T15:09:22.477 回答
1

我需要使用海龟模块在给定中心点的情况下绘制一个正方形。

正如@seth 所指出的,您可以通过在代码中修复中心计算来做到这一点:

from turtle import Turtle, Screen

def drawCentSq(turtle, center, side):

    """ A square is a series of perpendicular sides """

    xPt, yPt = center

    xPt -= side / 2
    yPt += side / 2

    turtle.up()
    turtle.goto(xPt, yPt)
    turtle.down()

    for _ in range(4):
        turtle.forward(side)
        turtle.right(90)

yertle = Turtle()

drawCentSq(yertle, (0, 0), 50)

screen = Screen()
screen.exitonclick()

但是让我们退后一步,考虑一下我们如何在给定大小的给定点绘制一个正方形。这是一个完全不同的解决方案:

def drawCentSq(turtle, center, side):

    """ A square is a circle drawn at a rough approximation """

    xPt, yPt = center

    xPt -= side / 2
    yPt -= side / 2

    turtle.up()
    turtle.goto(xPt, yPt)
    turtle.right(45)
    turtle.down()

    turtle.circle(2**0.5 * side / 2, steps=4)

    turtle.left(45)  # return cursor to original orientation

还有一个:

STAMP_UNIT = 20

def drawCentSq(turtle, center, side):

    """ A square can be stamped directly from a square cursor """

    mock = turtle.clone()  # clone turtle to avoid cleaning up changes
    mock.hideturtle()
    mock.shape("square")
    mock.fillcolor("white")
    mock.shapesize(side / STAMP_UNIT)

    mock.up()
    mock.goto(center)

    return mock.stamp()

请注意,此解决方案返回一个标记 ID,您可以将其传递给yertle'sclearstamp()方法,以便在您希望时从屏幕上删除正方形。

于 2017-03-28T21:43:44.983 回答