Python Turtle绘制居中的正方形



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

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)

def-main():

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

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

您需要:

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

事实上,你只是+=和-=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()

请注意,此解决方案返回一个stamp ID,您可以将该ID传递给yertleclearstamp()方法,以便在需要时从屏幕中删除正方形。

最新更新