python - 蟒蛇龟螺旋
问题描述
我写了一个程序来画一个分形,然后画一个螺旋。螺旋应该遵循斐波那契模式,并且本质上应该是递归的
这是代码 -
from turtle import Turtle, Screen
import math
t = Turtle()
s = Screen()
t.speed(0)
def square(x, y, side):
t.setpos(x,y)
for i in range(4):
t.forward(side)
t.right(90)
def tiltsquare(x, y, side):
t.left(45)
square(x, y, side)
def squareinsquare(x, y, side):
square(x, y, side)
half = side / 2
b = math.sqrt(half**2 + half**2)
tiltsquare(x, y - side/2, b)
#x,y are start coordinates, stLength is the length of first move and k is the number of moves
spiral(225, -120, 35, 5)
s.exitonclick()
解决方案
您似乎缺少a
and的初始化b
:
a = 0
b = 1
这是带有此修复程序的代码的简化版本:
from turtle import Turtle, Screen
from math import pi
def square(x, y, side):
turtle.setpos(x, y)
for _ in range(4):
turtle.forward(side)
turtle.right(90)
def fractal(x, y, startSide, k):
turtle.setpos(x, y)
for _ in range(k):
square(*turtle.position(), startSide)
turtle.forward(startSide / 2)
turtle.right(45)
startSide /= 2**0.5
screen = Screen()
turtle = Turtle()
turtle.speed('fastest')
fractal(0, 0, 200, 15)
# x, y are start coordinates and k is the number of moves
def spiral(x, y, k):
turtle.penup()
turtle.setposition(x, y)
turtle.setheading(45)
turtle.pendown()
a = 0
b = 1
for _ in range(k):
distance = (pi * b * x / 2) / 90
for _ in range(90):
turtle.forward(distance)
turtle.left(1)
a, b = b, a + b
spiral(225, -120, 5)
screen.exitonclick()
推荐阅读
- javascript - 用于过滤转换的 Javascript for 循环
- tensorflow - model.evaluate() 为同一度量返回不同的值,具体取决于它是作为损失返回还是作为度量返回
- sql - 第二个查询中的 UNION 表基于 Oracle sql 中第一个查询的结果
- spring-boot - 从响应中读取自定义标头值
- reactjs - 如何在 React 中正确创建弹出表单?
- flutter - 更新 CustomPaint 绘图
- javascript - 数组如何同时具有长度 0 和 30?
- html - 用作图像的 SVG 在 iPhone 上模糊不清
- c# - 如何在计时器中以“x”秒开始
- ios - 在 Cocoapods 中使用 UIView .xib