Skip to content

Commit 4c488fb

Browse files
authored
Update gosper_curve.py
1 parent 70add35 commit 4c488fb

File tree

1 file changed

+62
-67
lines changed

1 file changed

+62
-67
lines changed

fractals/gosper_curve.py

Lines changed: 62 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,89 +1,84 @@
11
"""
22
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.
77
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.
1110
12-
(description adapted from https://en.wikipedia.org/wiki/Gosper_curve)
13-
```
11+
(description adapted from https://en.wikipedia.org/wiki/Gosper_curve)
1412
1513
Requirements (pip):
16-
- turtle (standard library)
14+
- turtle (standard library)
1715
"""
1816

1917
import math
2018
import turtle
2119

20+
2221
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
2423
) -> None:
25-
"""
26-
Recursively draw a Gosper curve using turtle graphics.
24+
"""
25+
Recursively draw a Gosper curve using turtle graphics.
2726
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.
3432
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
4140

42-
side_length /= math.sqrt(7)
43-
depth -= 1
41+
side_length /= math.sqrt(7)
42+
depth -= 1
4443

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)
7472

75-
if **name** == "**main**":
76-
turtle.title("Gosper Curve")
77-
turtle.speed(0)
7873

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)
8377

84-
draw_gosper_curve(200.0, 4)
78+
turtle.penup()
79+
turtle.goto(0, -200)
80+
turtle.pendown()
8581

86-
turtle.exitonclick()
87-
```
82+
draw_gosper_curve(200.0, 4)
8883

89-
"""
84+
turtle.exitonclick()

0 commit comments

Comments
 (0)