Python 海龟()不旋转多个球加上属性错误
我想创建一个不同半径的圆,类似于太阳系。在我的尝试中,算法应该创建球-将它们初始化为半径位置,然后同时开始旋转,在我的尝试中,球不会同时开始旋转,我怀疑这与for循环有关Python 海龟()不旋转多个球加上属性错误,python,numpy,turtle-graphics,python-turtle,Python,Numpy,Turtle Graphics,Python Turtle,我想创建一个不同半径的圆,类似于太阳系。在我的尝试中,算法应该创建球-将它们初始化为半径位置,然后同时开始旋转,在我的尝试中,球不会同时开始旋转,我怀疑这与for循环有关 值得指出的是,有时我会遇到一个错误,说海龟没有属性“dy”,但有时它没有显示错误。尽管如此,我的主要目标是在不同半径处初始化球,并且球同时启动。您错误地将代码描述为正在工作,但有bug-您的代码根本没有运行,修复遇到的前几个bug是不够的: 在这方面: ball.goto(raduis,y[i]) 代码中此时没有定义i变量。
值得指出的是,有时我会遇到一个错误,说海龟没有属性“dy”,但有时它没有显示错误。尽管如此,我的主要目标是在不同半径处初始化球,并且球同时启动。您错误地将代码描述为正在工作,但有bug-您的代码根本没有运行,修复遇到的前几个bug是不够的: 在这方面:
ball.goto(raduis,y[i])
代码中此时没有定义i变量。这个半径范围对于海龟来说太窄了,每个海龟大约占20个像素:
raduis = np.random.randint(0,8)
行星会重叠到难以区分的程度。现在还不清楚这是怎么回事:
ball.speed(np.random.randint(15))
乌龟的速度法只能在0-10范围内使用,不能在15范围内使用。它不会对你的动画产生任何真正的影响。这是最奇怪的:
raduis*np.sin(a)[i]
在循环中一遍又一遍,你让numpy将整个角度数组转换成正弦,然后只使用其中一个-你可以从中选择一个,然后取其正弦。您的代码通常显示出对numpy的数组操作缺乏理解,可能是在没有它的情况下编写的。最后,这种运动计算是假的:
ball.sety(ball.ycor()+raduis*np.sin(a)[i] +ball.dy)
我们在一个基于半径和角度的圆中移动,所以ball.ycor和ball.dy在这里没有任何关系
下面是我对代码的修改,以使三个对象围绕中心运行
from turtle import Screen, Turtle
from random import choice
from numpy import linspace, pi, cos, sin
angles = linspace(0, pi*2, 100)
sines, cosines = sin(angles), cos(angles)
ball_colours = ['orange', 'blue', 'brown', 'black', 'red', 'pink', 'yellow']
ball_shapes = ['circle', 'square', 'triangle']
screen = Screen()
balls = []
for radius in range(40, 160, 40):
x = radius * cosines[0]
y = radius * sines[0]
ball = Turtle()
ball.shape(choice(ball_shapes))
ball.color(choice(ball_colours))
ball.penup()
ball.goto(x, y)
ball.pendown()
ball.radius = radius
balls.append(ball)
for i in range(1, len(angles)):
for ball in balls:
ball.goto(ball.radius * cosines[i], ball.radius * sines[i])
screen.mainloop()
缺少的是让物体以不同的速度移动-我将此作为练习留给您:
您还可以使用turtle的内置方法绘制圆:
from turtle import Screen, Turtle
from random import choice
ball_colours = ['orange', 'blue', 'brown', 'black', 'red', 'pink', 'yellow']
ball_shapes = ['circle', 'square', 'triangle']
balls = []
for radius in range(40, 160, 40):
ball = Turtle()
ball.shape(choice(ball_shapes))
ball.color(choice(ball_colours))
ball.radius = radius
ball.speed(0)
ball.penup()
ball.goto(0,-radius)
ball.pendown()
balls.append(ball)
for a in range(360):
for ball in balls:
ball.circle(ball.radius,1)
screen.mainloop()
输出:
有时我会遇到一个错误,说海龟没有属性“dy”,但有时它没有显示错误
在调用它之前,您需要确保定义了Turtle.dy
from turtle import Screen, Turtle
from random import choice
ball_colours = ['orange', 'blue', 'brown', 'black', 'red', 'pink', 'yellow']
ball_shapes = ['circle', 'square', 'triangle']
balls = []
for radius in range(40, 160, 40):
ball = Turtle()
ball.shape(choice(ball_shapes))
ball.color(choice(ball_colours))
ball.radius = radius
ball.speed(0)
ball.penup()
ball.goto(0,-radius)
ball.pendown()
balls.append(ball)
for a in range(360):
for ball in balls:
ball.circle(ball.radius,1)
screen.mainloop()