我的代码在某个时刻之前一直有效,然后在某个地方螺旋式上升。尝试调试它,但没有帮助。
电流输出: 在此输入图片描述 预期输出:类似这样的东西而不是破折号...我使用的是点 在此输入图片描述
from turtle import Turtle, done
from math import pi, copysign
chinky = Turtle()
colours = ["DeepPink2", "DarkTurquoise", "chartreuse3", "CornflowerBlue"]
j = 0
def draw_spirograph(size_of_gap, radius):
global j
for i in range(int(360 / size_of_gap)):
chinky.color(colours[j])
if j < 3:
j += 1
else:
j = 0
draw_dotted_circle(radius, 5)
chinky.setheading(chinky.heading() + size_of_gap)
def draw_dotted_circle(radius, dot_size):
chinky.penup()
chinky.sety(radius)
diameter = 2 * radius
circumference = pi * diameter
dot_extent = 360 * dot_size / circumference # diameter to angle
times_y_crossed = 0
x_sign = 1
while times_y_crossed < 2:
chinky.dot(dot_size) # draw the dot
chinky.right(dot_extent)
chinky.forward(dot_size)
chinky.right(dot_extent) # draw the gap
chinky.forward(dot_size)
x_sign_new = copysign(1, chinky.xcor())
if x_sign_new != x_sign:
times_y_crossed += 1
x_sign = x_sign_new
chinky.pendown()
chinky.speed("fastest")
draw_spirograph(5, 100)
done()
您可以通过创建自定义圆形函数来使用分段来完成此操作,该函数将绘制具有交替颜色的分段圆。 以一定角度移动乌龟可以让您绘制线段,而无需进行任何三角学。
import turtle as tg
def segCircle(x,y,radius,step):
colors = ["DeepPink2", "DarkTurquoise", "chartreuse3", "CornflowerBlue"]
c = 0 # color index
prev = None # start of segment
for a in range(0,360,step): # run through segment points
tg.penup()
tg.goto(x,y) # center of circle
tg.setheading(a) # segment point angle
tg.forward(radius) # move to perimeter
if prev:
tg.pendown() # draw line from previous segment point
tg.color(colors[0])
colors.append(colors.pop(0)) # rotate colors
tg.goto(*prev)
prev = None
else:
prev = tg.pos() # skip every other point
绘制呼吸描记器:
wn = tg.Screen() # setup for "instantaneous drawing"
wn.tracer(0)
angle = 10
radius = 100
for a in range(0,360,angle): # offset circles around center
tg.penup()
tg.goto(0,0) # move to origin
tg.setheading(a) # set offsetted angle
tg.forward(radius) # go to center of circle
segCircle(*tg.pos(),radius,angle//2) # draw it
wn.update() # render drawing in one paint
wn.mainloop()
这里。 我使用了维基百科文章中的螺图数学。 我每 0.08 度画一个点。
from turtle import Turtle, done
from math import pi, copysign,cos,sin,lcm,degrees
chinky = Turtle()
colours = ["Violet","CornflowerBlue","DarkTurquoise","chartreuse3","DeepPink2","Orange","Red" ]
j = 0
def formulaX(R, r, p, t):
return (R-r)*cos(t) + p*cos((R-r)/r*t)
def formulaY(R, r, p, t):
return (R-r)*sin(t) - p*sin((R-r)/r*t)
def howManySteps(R,r,t):
rots = (lcm(r,R)//R)*360 # total degrees to rotate through
return int(rots//degrees(t)) # by angle change per step
def draw_spirograph(gap, R, r, p):
t = 0 # theta
dot_size = 5
b = gap # angle change per step
chinky.up() # avoid line from center to start
chinky.goto(formulaX(R, r, p, t), formulaY(R, r, p, t)) # start point theta = 0
steps = howManySteps(R,r,b)
for _ in range(0,steps+1):
t = t+b # angle of next segment
chinky.up
chinky.goto(formulaX(R, r, p, t), formulaY(R, r, p, t))
chinky.color(colours[int(10*t)%len(colours)])
chinky.dot(dot_size)
chinky.up()
return
chinky.speed("fastest")
draw_spirograph(.08, 96,42,88)
done()