【发布时间】:2009-05-31 15:24:10
【问题描述】:
我正在查看 Koch Snowflake (here) 的 wikipedia 页面,并且对所有示例都采用徽标/海龟样式感到困扰。所以我开始制作我自己的返回列表或坐标的。
我的实现是在 python 中,我基本上撕掉了 python turtle 的实现,但是用基本的 trig 替换了海龟特定的东西。它导致了一些丑陋的代码。我对你的挑战是要么改进我的代码,要么自己想出一个更优雅的解决方案。它可以是 python,也可以是你喜欢的语言。
我的代码:
from math import sin, cos, radians
def grow(steps, length = 200, startPos = (0,0)):
angle = 0
try:
jump = float(length) / (3 ** steps)
except:
jump = length
set="F"
for i in xrange(steps): set=set.replace("F", "FLFRFLF")
coords = [startPos]
for move in set:
if move is "F":
coords.append(
(coords[-1][0] + jump * cos(angle),
coords[-1][1] + jump * sin(angle)))
if move is "L":
angle += radians(60)
if move is "R":
angle -= radians(120)
return coords
编辑:由于懒惰复制,我忘记了导入
【问题讨论】:
-
"set" 是 Python 中的内置类型
-
实际上,当我想到更好的实现时,我最终会重写一个类似 Turtle 的类。也没有必要每次都计算 jump * cos(angle) & jump * sin(angle),知道只有 6 个可能的角度......