Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 不对齐的正方形-多边形和圆_Python_Turtle Graphics_Python Turtle - Fatal编程技术网

Python 不对齐的正方形-多边形和圆

Python 不对齐的正方形-多边形和圆,python,turtle-graphics,python-turtle,Python,Turtle Graphics,Python Turtle,我在写代码,沿着圆周画正方形。我试图让正方形正确对齐,而不是随意旋转。然而,似乎什么都不起作用。如何修复此代码?我尝试过多种方法,但这是我能想到的。我还尝试了一种没有定义中心的替代方法;换句话说,我们从圆周开始画圆(那里的对齐很好)。然而,对于问题的下一部分,我们必须画同心圆,没有中心会遇到麻烦 t.speed(0) t.width(3) turtle.bgcolor("grey") def drawSquare(t, size,color): for i in r

我在写代码,沿着圆周画正方形。我试图让正方形正确对齐,而不是随意旋转。然而,似乎什么都不起作用。如何修复此代码?我尝试过多种方法,但这是我能想到的。我还尝试了一种没有定义中心的替代方法;换句话说,我们从圆周开始画圆(那里的对齐很好)。然而,对于问题的下一部分,我们必须画同心圆,没有中心会遇到麻烦

t.speed(0)
t.width(3)
turtle.bgcolor("grey")

def drawSquare(t, size,color):
    for i in range (0,4):
        t.forward(size)
        t.right(90)


def drawCircle(t,size, n):
    t.penup()
    t.setpos(0,0)
    t.dot(4)
    t.right(90)
    t.goto(t.pos()+(0,10))
    t.penup()
    angle=360/n

    for i in range(n):
        current=i
        t.penup()
        t.setpos(0,0)
        t.penup()
        t.forward(50)
        t.left(angle)
        t.pendown()
        parity= (current) % 2 
        print (parity)
    
        if parity == 0 : 
            color=t.color("white")
            size=30
            drawSquare(t, size,color)
            t.penup()
            t.forward(30)
            t.pendown()
        else:
            color=t.color("black")
            size=30
            drawSquare(t, size,color)
            t.penup()
            t.forward(30)
            t.pendown()
            
size=30
n=10
drawCircle(t,size,n)
turtle.done()
main()

虽然我不是100%确定正方形应该如何排列(在下面的代码中,您可以取消注释45度旋转以在两种方法之间切换),但有一种通用模式似乎可以让您大致了解。这样做的目的是在圆的圆周上定位每个
n
点,如下所示:

for i in range(n):
    angle = 360 / n * i
    x = cos(radians(angle)) * r
    y = sin(radians(angle)) * r
    t.setpos(x, y)
对于每个点,从以下内容开始:

现在我们已经准备好运行一个点的正方形绘制例程,但是在此之前,应该放置海龟,以便它围绕当前位置绘制长方体,而不是使用当前位置作为角。这可以通过从中心向后移动平方边距离的一半来实现,然后向左移动相同的距离并再次指向原点

t.backward(size / 2)
t.left(90)
t.forward(size / 2)
t.right(90)
除了框大小之外,我还添加了半径作为参数,以实现可调整性。中心x/y也不是一个坏的补充,但对于手头的任务来说似乎还为时过早

以下是完整的代码:

import turtle
from math import cos, radians, sin

def draw_square(t, size):
    for _ in range(4):
        t.forward(size)
        t.right(90)

def draw_squares_in_circle(t, r, size, n, colors=["black", "white"]):
    for i in range(n):
        t.color(colors[i%len(colors)])
        angle = 360 / n * i
        x = cos(radians(angle)) * r
        y = sin(radians(angle)) * r
        t.setpos(x, y)
        t.setheading(t.towards(0, 0))
        t.dot(5)
        #t.left(45) # optionally rotate the square 45 degrees
        t.backward(size / 2)
        t.left(90)
        t.forward(size / 2)
        t.right(90)
        t.pendown()
        draw_square(t, size)
        t.penup()

if __name__ == "__main__":
    turtle.bgcolor("grey")
    t = turtle.Turtle()
    t.screen.setup(500, 500)
    t.speed(1)
    t.width(3)
    t.dot(4)
    t.penup()
    draw_squares_in_circle(t, 88, 40, 10)
    turtle.exitonclick()

虽然我不是100%确定正方形应该如何排列(在下面的代码中,您可以取消注释45度旋转以在两种方法之间切换),但有一种通用模式似乎可以让您大致了解。这样做的目的是在圆的圆周上定位每个
n
点,如下所示:

for i in range(n):
    angle = 360 / n * i
    x = cos(radians(angle)) * r
    y = sin(radians(angle)) * r
    t.setpos(x, y)
对于每个点,从以下内容开始:

现在我们已经准备好运行一个点的正方形绘制例程,但是在此之前,应该放置海龟,以便它围绕当前位置绘制长方体,而不是使用当前位置作为角。这可以通过从中心向后移动平方边距离的一半来实现,然后向左移动相同的距离并再次指向原点

t.backward(size / 2)
t.left(90)
t.forward(size / 2)
t.right(90)
除了框大小之外,我还添加了半径作为参数,以实现可调整性。中心x/y也不是一个坏的补充,但对于手头的任务来说似乎还为时过早

以下是完整的代码:

import turtle
from math import cos, radians, sin

def draw_square(t, size):
    for _ in range(4):
        t.forward(size)
        t.right(90)

def draw_squares_in_circle(t, r, size, n, colors=["black", "white"]):
    for i in range(n):
        t.color(colors[i%len(colors)])
        angle = 360 / n * i
        x = cos(radians(angle)) * r
        y = sin(radians(angle)) * r
        t.setpos(x, y)
        t.setheading(t.towards(0, 0))
        t.dot(5)
        #t.left(45) # optionally rotate the square 45 degrees
        t.backward(size / 2)
        t.left(90)
        t.forward(size / 2)
        t.right(90)
        t.pendown()
        draw_square(t, size)
        t.penup()

if __name__ == "__main__":
    turtle.bgcolor("grey")
    t = turtle.Turtle()
    t.screen.setup(500, 500)
    t.speed(1)
    t.width(3)
    t.dot(4)
    t.penup()
    draw_squares_in_circle(t, 88, 40, 10)
    turtle.exitonclick()

我认为,与您的解决方案或@ggorlen使用turtle的
circle()
方法相比,我们可以更轻松地完成此任务,而不是绘制一个圆,而是沿着一条圆形路径移动。我们使用它的
范围
侧面
参数来控制它:

from turtle import Screen, Turtle
from math import pi, sin

COLORS = ['black', 'white']

def drawSquare(t, size, color):
    t.color(color)

    t.pendown()

    for _ in range(4):
        t.right(pi / 2)
        t.forward(size)

    t.penup()

def drawCircle(t, size, sides):
    angle = pi / sides
    radius = size / (2 * sin(angle))

    t.penup()
    t.dot()

    t.right(pi / 2)  # center circle() on current location
    t.forward(radius)
    t.left(pi / 2)

    for side in range(sides):
        t.circle(radius, extent=angle * 2, steps=1)

        color = COLORS[side % 2]

        t.right(angle)
        drawSquare(t, size, color)
        t.left(angle)

screen = Screen()
screen.bgcolor('grey')

turtle = Turtle()
turtle.speed('fastest')
turtle.radians()
turtle.width(3)

drawCircle(turtle, 30, 10)

turtle.hideturtle()
screen.exitonclick()

我认为,与您的解决方案或@ggorlen使用turtle的
circle()
方法相比,我们可以用更少的精力来完成这项工作,而不是绘制一个圆,而是沿着一条圆形路径移动。我们使用它的
范围
侧面
参数来控制它:

from turtle import Screen, Turtle
from math import pi, sin

COLORS = ['black', 'white']

def drawSquare(t, size, color):
    t.color(color)

    t.pendown()

    for _ in range(4):
        t.right(pi / 2)
        t.forward(size)

    t.penup()

def drawCircle(t, size, sides):
    angle = pi / sides
    radius = size / (2 * sin(angle))

    t.penup()
    t.dot()

    t.right(pi / 2)  # center circle() on current location
    t.forward(radius)
    t.left(pi / 2)

    for side in range(sides):
        t.circle(radius, extent=angle * 2, steps=1)

        color = COLORS[side % 2]

        t.right(angle)
        drawSquare(t, size, color)
        t.left(angle)

screen = Screen()
screen.bgcolor('grey')

turtle = Turtle()
turtle.speed('fastest')
turtle.radians()
turtle.width(3)

drawCircle(turtle, 30, 10)

turtle.hideturtle()
screen.exitonclick()

您是希望正方形的角沿圆完美排列,还是希望正方形在圆中完全不旋转地排列?我假设是第一个,但只是检查一下。是的,他们需要完全对齐。你想让正方形的角沿着圆圈完全对齐,还是所有正方形都应该在一个圆圈中不旋转地排列?我想是第一个,但只是检查一下。是的,他们需要排好队。