科赫曲线或科赫雪花
什么是科赫曲线?
科赫雪花(也称为科赫曲线、科赫星或科赫岛)是一种数学曲线,也是最早被描述的分形曲线之一。它基于 Koch 曲线,该曲线出现在 1904 年瑞典数学家 Helge von Koch 题为“在没有切线的连续曲线上,可从初等几何构造”的论文中。
雪花面积的级数收敛到原始三角形面积的 8/5 倍,而雪花周长的级数发散到无穷大。因此,雪花具有由无限长的线界定的有限区域。
建造
第1步:
画一个等边三角形。你可以用指南针或量角器画它,或者如果你不想花太多时间画雪花,你可以直接用眼睛画。
第2步:
将每一边分成三个相等的部分。这就是为什么边可以被三整除的原因。
第三步:
在每个中间部分画一个等边三角形。测量中间三分之一的长度以了解这些新三角形的边长。
第4步:
将每个外侧分成三份。你可以看到第二代三角形覆盖了第一代。这三个线段不应一分为三。
第五步:
在每个中间部分画一个等边三角形。
表示为 Lindenmayer 系统
Koch 曲线可以用以下重写系统(Lindenmayer 系统)表示:
字母:F
常数:+,?
公理:F
制作规则:F? F+F–F+F
这里,F 表示“向前拉”,- 表示“右转 60°”,+ 表示“左转 60°”。
要创建科赫雪花,可以使用 F++F++F(等边三角形)作为公理。
创建科赫曲线:
# Python program to print partial Koch Curve.
# importing the libraries : turtle standard
# graphics library for 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)
# main function
if __name__ == "__main__":
# defining the speed of the turtle
speed(0)
length = 300.0
# Pull the pen up – no drawing when moving.
penup()
# Move the turtle backward by distance,
# opposite to the direction the turtle
# is headed.
# Do not change the turtle’s heading.
backward(length/2.0)
# Pull the pen down – drawing when moving.
pendown()
snowflake(length, 4)
# To control the closing windows of the turtle
mainloop()
输出:
要创建具有科赫曲线的完整雪花,我们需要重复相同的图案 3 次。所以让我们尝试一下。
# Python program to print complete Koch Curve.
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)
# main function
if __name__ == "__main__":
# defining the speed of the turtle
speed(0)
length = 300.0
# Pull the pen up – no drawing when moving.
# Move the turtle backward by distance, opposite
# to the direction the turtle is headed.
# Do not change the turtle’s heading.
penup()
backward(length/2.0)
# Pull the pen down – drawing when moving.
pendown()
for i in range(3):
snowflake(length, 4)
right(120)
# To control the closing windows of the turtle
mainloop()
输出:
https://media.geeksforgeeks.org/wp-content/uploads/output_2.mp4