📜  科赫曲线或科赫雪花 Python

📅  最后修改于: 2020-05-11 09:40:28             🧑  作者: Mango

什么是科赫曲线?
科赫雪花(也称为科赫曲线,科赫星或科赫岛)是一种数学曲线,是最早描述的分形曲线之一。 它基于Koch曲线,该曲线出现在1904年由瑞典数学家Helge von Koch题为“在无切线的连续曲线上,可以从基本几何构造而成”。
雪花面积的变化收敛到原始三角形面积的8/5倍,而雪花周长变化到无穷大。 因此,雪花具有由无限长的线限制的有限区域
实现

步骤1:
画一个等边三角形。 您可以使用指南针或量角器来绘制它,或者,如果您不想花费太多时间绘制雪花,也可以只看一下它。

  • 由于分形的性质,最好将边的长度除以3。 在接下来的几个步骤中这将变得很清楚。


第2步:
将每一边分成三个相等的部分。 这就是为什么将边整整为三很方便的原因。



第三步:
在每个中间部分绘制一个等边三角形。 测量中间三分之一的长度,以了解这些新三角形的边的长度。



步骤4:
将每个外侧分成三份。 您可以看到第二代三角形涵盖了第一个三角形。 这三个线段不应分为三个部分。



第五步:
在每个中间部分绘制一个等边三角形。

  • 请注意,如何绘制桅杆的三分之一的下一代零件。


表示为Lindenmayer系统


科赫曲线可以通过以下重写系统 ( Lindenmayer系统 )表示:
字母 :F
常数 :+ 、?
公理 :F
生产规则 :F? F + F–F + F
在此,F表示“向前拉”,–表示“向右转60°”,+表示“向左转60°”。
要创建科赫雪花,可以使用F ++ F ++ F(等边三角形)作为公理。

创建科赫曲线:

# Python程序打印部分科赫曲线.
 # 导入库 : turtle standard
 # Python图形库
  from turtle import *
 #function to create koch snowflake or koch curve
  def snowflake(lengthSide, levels):
      if levels = = 0 :
         forward(lengthSide)
         return
      lengthSide / = 3.0
      snowflake(lengthSide, levels 1 )
      left( 60 )
      snowflake(lengthSide, levels 1 )
      right( 120 )
      snowflake(lengthSide, levels 1 )
      left( 60 )
      snowflake(lengthSide, levels 1 )
 # 主函数
  if __name__ = = "__main__" :
     # 定义乌龟的速度
      speed( 0 )
      length = 300.0
     # 向上拉笔–移动时不绘画.
     penup()
     # 向后移动乌龟一定距离,与乌龟前进的方向相反.
     # 不要改变乌龟的方向.
      backward(length / 2.0 )
     # 向下拉笔–移动时绘图.
     pendown()
      snowflake(length, 4 )
     # 控制乌龟的关闭窗口
     mainloop()

要创建带有Koch曲线的完整雪花,我们需要重复相同的图案3次。 因此,让我们尝试一下。

# Python程序可打印完整的科赫曲线.
  from turtle import *
 # 创建科赫雪花或科赫曲线的功能
  def snowflake(lengthSide, levels):
      if levels = = 0 :
         forward(lengthSide)
         return
      lengthSide / = 3.0
      snowflake(lengthSide, levels 1 )
      left( 60 )
      snowflake(lengthSide, levels 1 )
      right( 120 )
      snowflake(lengthSide, levels 1 )
      left( 60 )
      snowflake(lengthSide, levels 1 )
 # 主函数
  if __name__ = = "__main__" :
     # 定义乌龟的速度
      speed( 0 )
      length = 300.0
     # 向上拉笔–移动时不绘画.
     # Move the turtle backward by distance, opposite
     # to the direction the turtle is headed.
     # 不要改变乌龟的方向.
     penup()
      backward(length / 2.0 )
     # 向下拉笔–移动时绘图.
     pendown()
      for range ( 3 ): i ):
          snowflake(length, 4 )
          right( 120 )
      # 控制乌龟的关闭窗口
     mainloop()