Spaces:
Runtime error
Runtime error
Update myturtle.py
Browse files- myturtle.py +30 -38
myturtle.py
CHANGED
|
@@ -1,49 +1,28 @@
|
|
| 1 |
-
import re
|
| 2 |
-
from PIL import Image
|
| 3 |
-
from matplotlib import pyplot as plt
|
| 4 |
-
import matplotlib as mpl
|
| 5 |
-
import matplotlib.style as mplstyle
|
| 6 |
import numpy as np
|
| 7 |
-
|
| 8 |
-
mpl.use('Agg')
|
| 9 |
-
mpl.rcParams["path.simplify_threshold"] = 0.0
|
| 10 |
-
mpl.rcParams['agg.path.chunksize'] = 10000
|
| 11 |
-
mplstyle.use('fast')
|
| 12 |
|
| 13 |
HALF_INF = 63
|
| 14 |
INF = 126
|
| 15 |
EPS_DIST = 1/20
|
| 16 |
EPS_ANGLE = 2.86
|
|
|
|
| 17 |
|
| 18 |
class Turtle:
|
| 19 |
-
def __init__(self,
|
| 20 |
-
self.x = 0
|
| 21 |
-
self.y =
|
| 22 |
self.heading = 0
|
| 23 |
-
|
| 24 |
-
self.fig, self.ax = plt.subplots(1, 1, figsize=(20, 20))
|
| 25 |
-
else:
|
| 26 |
-
self.ax = ax
|
| 27 |
-
self.ax.set_xlim(-50, 50)
|
| 28 |
-
self.ax.set_ylim(-50, 50)
|
| 29 |
-
self.ax.set_xticklabels([])
|
| 30 |
-
self.ax.set_yticklabels([])
|
| 31 |
-
self.ax.set_xticks([])
|
| 32 |
-
self.ax.set_yticks([])
|
| 33 |
-
self.ax.spines['top'].set_visible(False)
|
| 34 |
-
self.ax.spines['bottom'].set_visible(False)
|
| 35 |
-
self.ax.spines['left'].set_visible(False)
|
| 36 |
-
self.ax.spines['right'].set_visible(False)
|
| 37 |
self.is_down = True
|
| 38 |
|
| 39 |
def forward(self, dist):
|
|
|
|
| 40 |
x0, y0 = self.x, self.y
|
| 41 |
-
x1 = x0 + dist * np.cos(self.heading)
|
| 42 |
-
y1 = y0
|
| 43 |
if self.is_down:
|
| 44 |
-
self.
|
| 45 |
-
self.x = x1
|
| 46 |
-
self.y = y1
|
| 47 |
|
| 48 |
def left(self, angle):
|
| 49 |
self.heading += angle * np.pi / 180
|
|
@@ -58,11 +37,9 @@ class Turtle:
|
|
| 58 |
self.is_down = True
|
| 59 |
|
| 60 |
def save(self, path):
|
| 61 |
-
self.fig.canvas.draw()
|
| 62 |
-
pil_img = Image.frombytes('RGB', self.fig.canvas.get_width_height(), self.fig.canvas.tostring_rgb())
|
| 63 |
if path:
|
| 64 |
-
|
| 65 |
-
return
|
| 66 |
|
| 67 |
class _TurtleState:
|
| 68 |
def __init__(self, turtle):
|
|
@@ -135,5 +112,20 @@ if __name__ == "__main__":
|
|
| 135 |
|
| 136 |
right(90)
|
| 137 |
forward(50)
|
| 138 |
-
save("
|
| 139 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
import numpy as np
|
| 2 |
+
import cv2
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3 |
|
| 4 |
HALF_INF = 63
|
| 5 |
INF = 126
|
| 6 |
EPS_DIST = 1/20
|
| 7 |
EPS_ANGLE = 2.86
|
| 8 |
+
SCALE = 15.5
|
| 9 |
|
| 10 |
class Turtle:
|
| 11 |
+
def __init__(self, canvas_size=(2000, 2000)):
|
| 12 |
+
self.x = canvas_size[0] // 2
|
| 13 |
+
self.y = canvas_size[1] // 2
|
| 14 |
self.heading = 0
|
| 15 |
+
self.canvas = np.ones((canvas_size[1], canvas_size[0], 3), dtype=np.uint8) * 255
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 16 |
self.is_down = True
|
| 17 |
|
| 18 |
def forward(self, dist):
|
| 19 |
+
dist = dist * SCALE
|
| 20 |
x0, y0 = self.x, self.y
|
| 21 |
+
x1 = int(x0 + dist * np.cos(self.heading))
|
| 22 |
+
y1 = int(y0 - dist * np.sin(self.heading))
|
| 23 |
if self.is_down:
|
| 24 |
+
cv2.line(self.canvas, (x0, y0), (x1, y1), (0, 0, 0), 3)
|
| 25 |
+
self.x, self.y = x1, y1
|
|
|
|
| 26 |
|
| 27 |
def left(self, angle):
|
| 28 |
self.heading += angle * np.pi / 180
|
|
|
|
| 37 |
self.is_down = True
|
| 38 |
|
| 39 |
def save(self, path):
|
|
|
|
|
|
|
| 40 |
if path:
|
| 41 |
+
cv2.imwrite(path, self.canvas)
|
| 42 |
+
return self.canvas
|
| 43 |
|
| 44 |
class _TurtleState:
|
| 45 |
def __init__(self, turtle):
|
|
|
|
| 112 |
|
| 113 |
right(90)
|
| 114 |
forward(50)
|
| 115 |
+
save("test2.png")
|
| 116 |
+
|
| 117 |
+
def plot2():
|
| 118 |
+
for j in range(2):
|
| 119 |
+
forward(2)
|
| 120 |
+
left(0.0)
|
| 121 |
+
for i in range(4):
|
| 122 |
+
forward(2)
|
| 123 |
+
left(90)
|
| 124 |
+
forward(0)
|
| 125 |
+
left(180.0)
|
| 126 |
+
forward(2)
|
| 127 |
+
left(180.0)
|
| 128 |
+
FINAL_IMAGE = turtle.save("")
|
| 129 |
+
|
| 130 |
+
example_plot()
|
| 131 |
+
# plot2()
|