【问题标题】:Python Turtle draw centered squarePython Turtle 绘制居中的正方形
【发布时间】:2013-07-18 15:01:49
【问题描述】:

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

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

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

【问题讨论】:

    标签: python python-3.x turtle-graphics


    【解决方案1】:

    你需要:

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

    原来你只是 += 和 -= 1。

    【讨论】:

      【解决方案2】:

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

      正如@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,您可以将其传递给 yertleclearstamp() 方法,以便在需要时从屏幕上删除正方形。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-08
        • 2021-04-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多