|
1 | 1 | """ |
2 | 2 | Description |
3 | | -The Gosper curve (also known as the flowsnake) is a fractal curve discovered |
4 | | -by Bill Gosper. It is generated recursively by replacing each line segment |
5 | | -with a specific pattern of smaller segments rotated by multiples of |
6 | | -60 degrees. |
| 3 | + The Gosper curve (also known as the flowsnake) is a fractal curve discovered |
| 4 | + by Bill Gosper. It is generated recursively by replacing each line segment |
| 5 | + with a specific pattern of smaller segments rotated by multiples of |
| 6 | + 60 degrees. |
7 | 7 |
|
8 | | -``` |
9 | | -With each iteration, the curve becomes more complex and gradually fills |
10 | | -a hexagonal region. |
| 8 | + With each iteration, the curve becomes more complex and gradually fills |
| 9 | + a hexagonal region. |
11 | 10 |
|
12 | | -(description adapted from https://en.wikipedia.org/wiki/Gosper_curve) |
13 | | -``` |
| 11 | + (description adapted from https://en.wikipedia.org/wiki/Gosper_curve) |
14 | 12 |
|
15 | 13 | Requirements (pip): |
16 | | -- turtle (standard library) |
| 14 | + - turtle (standard library) |
17 | 15 | """ |
18 | 16 |
|
19 | 17 | import math |
20 | 18 | import turtle |
21 | 19 |
|
| 20 | + |
22 | 21 | def draw_gosper_curve( |
23 | | -side_length: float, depth: int, direction: int = -1, angle: float = 60.0 |
| 22 | + side_length: float, depth: int, direction: int = -1, angle: float = 60.0 |
24 | 23 | ) -> None: |
25 | | -""" |
26 | | -Recursively draw a Gosper curve using turtle graphics. |
| 24 | + """ |
| 25 | + Recursively draw a Gosper curve using turtle graphics. |
27 | 26 |
|
28 | | -``` |
29 | | -Args: |
30 | | - side_length: Length of the current segment. |
31 | | - depth: Recursive depth of the fractal. |
32 | | - direction: Direction of the curve (1 or -1). |
33 | | - angle: Turn angle in degrees. |
| 27 | + Args: |
| 28 | + side_length: Length of the current segment. |
| 29 | + depth: Recursive depth of the fractal. |
| 30 | + direction: Direction of the curve (1 or -1). |
| 31 | + angle: Turn angle in degrees. |
34 | 32 |
|
35 | | ->>> import turtle |
36 | | ->>> draw_gosper_curve(100.0, 1) |
37 | | -""" |
38 | | -if depth == 0: |
39 | | - turtle.forward(side_length) |
40 | | - return |
| 33 | + Example: |
| 34 | + >>> import turtle |
| 35 | + >>> draw_gosper_curve(100.0, 1) |
| 36 | + """ |
| 37 | + if depth == 0: |
| 38 | + turtle.forward(side_length) |
| 39 | + return |
41 | 40 |
|
42 | | -side_length /= math.sqrt(7) |
43 | | -depth -= 1 |
| 41 | + side_length /= math.sqrt(7) |
| 42 | + depth -= 1 |
44 | 43 |
|
45 | | -if direction == -1: |
46 | | - draw_gosper_curve(side_length, depth, -1, angle) |
47 | | - turtle.left(angle) |
48 | | - draw_gosper_curve(side_length, depth, 1, angle) |
49 | | - turtle.left(2 * angle) |
50 | | - draw_gosper_curve(side_length, depth, 1, angle) |
51 | | - turtle.right(angle) |
52 | | - draw_gosper_curve(side_length, depth, -1, angle) |
53 | | - turtle.right(2 * angle) |
54 | | - draw_gosper_curve(side_length, depth, -1, angle) |
55 | | - draw_gosper_curve(side_length, depth, -1, angle) |
56 | | - turtle.right(angle) |
57 | | - draw_gosper_curve(side_length, depth, 1, angle) |
58 | | - turtle.left(angle) |
59 | | -else: |
60 | | - turtle.right(angle) |
61 | | - draw_gosper_curve(side_length, depth, -1, angle) |
62 | | - turtle.left(angle) |
63 | | - draw_gosper_curve(side_length, depth, 1, angle) |
64 | | - draw_gosper_curve(side_length, depth, 1, angle) |
65 | | - turtle.left(2 * angle) |
66 | | - draw_gosper_curve(side_length, depth, 1, angle) |
67 | | - turtle.left(angle) |
68 | | - draw_gosper_curve(side_length, depth, -1, angle) |
69 | | - turtle.right(2 * angle) |
70 | | - draw_gosper_curve(side_length, depth, -1, angle) |
71 | | - turtle.right(angle) |
72 | | - draw_gosper_curve(side_length, depth, 1, angle) |
73 | | -``` |
| 44 | + if direction == -1: |
| 45 | + draw_gosper_curve(side_length, depth, -1, angle) |
| 46 | + turtle.left(angle) |
| 47 | + draw_gosper_curve(side_length, depth, 1, angle) |
| 48 | + turtle.left(2 * angle) |
| 49 | + draw_gosper_curve(side_length, depth, 1, angle) |
| 50 | + turtle.right(angle) |
| 51 | + draw_gosper_curve(side_length, depth, -1, angle) |
| 52 | + turtle.right(2 * angle) |
| 53 | + draw_gosper_curve(side_length, depth, -1, angle) |
| 54 | + draw_gosper_curve(side_length, depth, -1, angle) |
| 55 | + turtle.right(angle) |
| 56 | + draw_gosper_curve(side_length, depth, 1, angle) |
| 57 | + turtle.left(angle) |
| 58 | + else: |
| 59 | + turtle.right(angle) |
| 60 | + draw_gosper_curve(side_length, depth, -1, angle) |
| 61 | + turtle.left(angle) |
| 62 | + draw_gosper_curve(side_length, depth, 1, angle) |
| 63 | + draw_gosper_curve(side_length, depth, 1, angle) |
| 64 | + turtle.left(2 * angle) |
| 65 | + draw_gosper_curve(side_length, depth, 1, angle) |
| 66 | + turtle.left(angle) |
| 67 | + draw_gosper_curve(side_length, depth, -1, angle) |
| 68 | + turtle.right(2 * angle) |
| 69 | + draw_gosper_curve(side_length, depth, -1, angle) |
| 70 | + turtle.right(angle) |
| 71 | + draw_gosper_curve(side_length, depth, 1, angle) |
74 | 72 |
|
75 | | -if **name** == "**main**": |
76 | | -turtle.title("Gosper Curve") |
77 | | -turtle.speed(0) |
78 | 73 |
|
79 | | -``` |
80 | | -turtle.penup() |
81 | | -turtle.goto(0, -200) |
82 | | -turtle.pendown() |
| 74 | +if __name__ == "__main__": |
| 75 | + turtle.title("Gosper Curve") |
| 76 | + turtle.speed(0) |
83 | 77 |
|
84 | | -draw_gosper_curve(200.0, 4) |
| 78 | + turtle.penup() |
| 79 | + turtle.goto(0, -200) |
| 80 | + turtle.pendown() |
85 | 81 |
|
86 | | -turtle.exitonclick() |
87 | | -``` |
| 82 | + draw_gosper_curve(200.0, 4) |
88 | 83 |
|
89 | | -""" |
| 84 | + turtle.exitonclick() |
0 commit comments