123456789101112131415161718192021222324252627282930 |
- """Koch snowflake fractal"""
- from vedo import sqrt, Line, show
- levels = 7
- def koch(level):
- # Compute Koch fractal contour points
- k = sqrt(3)/2
- if level:
- points = koch(level-1) + [(0, 0)] # recursion!
- kpts = []
- for i in range(len(points)-1):
- p1, p2 = points[i], points[i+1]
- dx, dy = (p2[0]-p1[0])/3, (p2[1]-p1[1])/3
- pa = (p1[0] + dx , p1[1] + dy )
- pb = (p1[0] + dx*2, p1[1] + dy*2)
- z = complex(pb[0]-pa[0], pb[1]-pa[1]) * (0.5-k*1j)
- p3 = (pa[0]+z.real, pa[1]+z.imag)
- kpts += [p1, pa, p3, pb]
- return kpts
- return [(0, 0), (1, 0), (0.5, k)]
- kochs = []
- for i in range(levels):
- # Create a Line from the points and mesh the inside with minimum resolution
- kmsh = Line(koch(i)).generate_mesh(mesh_resolution=1).z(-i/1000)
- kmsh.lw(0).color(-i)
- kochs.append(kmsh)
- show(kochs, __doc__+ f"\nlevels: {levels}\npoints: {kmsh.npoints}", bg2='lb').close()
|