【发布时间】:2012-02-14 04:21:19
【问题描述】:
我在 Wikipedia 页面上查看了此内容,想知道是否有人对此有有效的实现。
我正在尝试学习 Haskell,发现它有点困难,我正在研究 Koch Snowflake 和 Sierpinski Triangle。
欢迎任何代码或建议。
谢谢
【问题讨论】:
标签: haskell
我在 Wikipedia 页面上查看了此内容,想知道是否有人对此有有效的实现。
我正在尝试学习 Haskell,发现它有点困难,我正在研究 Koch Snowflake 和 Sierpinski Triangle。
欢迎任何代码或建议。
谢谢
【问题讨论】:
标签: haskell
对于这类结构丰富且与比例无关的图片,我会推荐图表包(http://projects.haskell.org/diagrams/),它确实是一段非常棒的代码,请参阅以下代码生成 Koch 雪花在几分钟内真正成为你的:
snowflake :: Int -> Trail R2
snowflake n = k <> k # rotateBy (-1/3) <> k # rotateBy (1/3)
where k = koch n
koch :: Int -> Trail R2
koch 0 = P (-1,0) ~~ P (1,0)
koch n = k <> k # rotateBy (1/6) <> k # rotateBy (-1/6) <> k
where k = koch (n-1) # scale (1/3)
这几乎是不言自明的,大部分魔法都在 Trail 的 Monoid 实例中,它将首尾相连地“连接”轨迹。
注意:() 是 mappend 的运算符,过去在图表中定义了它,但现在这是 GHC 7.4 中基础的一部分,并且可能会包含在 Haskell 报告的未来版本中,(#) 只是应用程序颠倒了,因为图表作者发现定义图表然后应用其属性而不是将其写入另一个方向更令人愉快(所以 k # rotateBy (1/6) 只是 rotateBy (1/6) k)。
【讨论】:
这应该给你一个(列表)三角形的列表。现在在屏幕上将这些三角形绘制到您认为合理的深度。
【讨论】: