From 6cc9fe6aad51a354e053a921795ae13c7ef1b90e Mon Sep 17 00:00:00 2001 From: TheDevKiller Date: Mon, 25 Feb 2019 20:29:22 +0100 Subject: [PATCH 1/6] Using jpg instead of bmp --- source/betterTurtle.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/betterTurtle.py b/source/betterTurtle.py index d6b40ab..d3f0b43 100644 --- a/source/betterTurtle.py +++ b/source/betterTurtle.py @@ -309,4 +309,4 @@ if __name__ == "__main__": t = Turtle() t.set_position((0, 0)) t.fractal.outline(6, 2, 5) - t.save("test.bmp") + t.save("test.jpg") From cc2ee68436f87a034b1eed1ffb429916f3e84d35 Mon Sep 17 00:00:00 2001 From: TheDevKiller Date: Mon, 25 Feb 2019 20:29:46 +0100 Subject: [PATCH 2/6] Deleted a useless file --- fractal.png | Bin 9174 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 fractal.png diff --git a/fractal.png b/fractal.png deleted file mode 100644 index 3c26791c393e3f9f5ddc9b84e1d8949f32e6ad1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9174 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 Date: Mon, 25 Feb 2019 20:30:10 +0100 Subject: [PATCH 3/6] Deleted another useless file --- main.py | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 main.py diff --git a/main.py b/main.py deleted file mode 100644 index a4b7308..0000000 --- a/main.py +++ /dev/null @@ -1,5 +0,0 @@ -from PIL import Image - -# Display the generated fractal -img = Image.open("fractal.png") -img.show() \ No newline at end of file From f59497e9454b061d1afc5b2498850f0929f2efe3 Mon Sep 17 00:00:00 2001 From: TheDevKiller Date: Mon, 25 Feb 2019 20:31:47 +0100 Subject: [PATCH 4/6] Using jpg on both files --- betterTurtle.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/betterTurtle.py b/betterTurtle.py index c2297d3..78a9f65 100644 --- a/betterTurtle.py +++ b/betterTurtle.py @@ -314,4 +314,4 @@ if __name__ == "__main__": t = Turtle() t.set_position((0, 0)) t.fractal.outline(6, 2, 5) - t.save("test.bmp") + t.save("test.jpg") From 910f85d3f09d9e1e194bf483a0bf67cc36d2125a Mon Sep 17 00:00:00 2001 From: TheDevKiller Date: Mon, 25 Feb 2019 20:35:25 +0100 Subject: [PATCH 5/6] Remove the betterTurtle.py not in source/ --- betterTurtle.py | 317 ------------------------------------------------ 1 file changed, 317 deletions(-) delete mode 100644 betterTurtle.py diff --git a/betterTurtle.py b/betterTurtle.py deleted file mode 100644 index 78a9f65..0000000 --- a/betterTurtle.py +++ /dev/null @@ -1,317 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -A new turtle which is faster. - ->>> t = Turtle() ->>> t.init() ->>> t.set_position((0, 0)) ->>> t.fractal.outline(6, 2, 5) - -.. autoclass:: Figures - :members: - :undoc-members: - - -.. autoclass:: Turtle - :members: - :undoc-members: -""" - -import math -import time - -from PIL import Image, ImageDraw - - -class Figures: - """A lot of function to create some well-know shapes - - :param master: turtle2 to use for draw - :type master: Turtle - - :returns: Nothing - :rtype: None""" - - def __init__(self, master): - self.canvas = master - - def _outline_trace(self, number_of_iterations, length, number_of_sides): - """Internal function to draw outline of a recursive shape - - :param number_of_iterations: Number of iteration used to draw - :param length: Size of a single side - :param number_of_sides: Number of sides of the initial shape - :type number_of_iterations: int - :type length: int - :type number_of_sides: int - - :returns: Nothing - :rtype: None""" - - # Stop the recursion if the number of iteration is equal to zero - if number_of_iterations == 0: - self.canvas.forward(length) - else: - self._outline_trace(number_of_iterations - 1, length, number_of_sides) - self.canvas.right(360. / number_of_sides) - self._outline_trace(number_of_iterations - 1, length, number_of_sides) - self.canvas.right(-360. / number_of_sides) - self._outline_trace(number_of_iterations - 1, length, number_of_sides) - self.canvas.right(-360. / number_of_sides) - self._outline_trace(number_of_iterations - 1, length, number_of_sides) - self.canvas.right(360. / number_of_sides) - self._outline_trace(number_of_iterations - 1, length, number_of_sides) - - def regular_polygon(self, number_of_sides, length): - """Draw a regular polygon - - :param number_of_sides: Number of sides of the polygon - :param length: Length of a side - :type number_of_sides: int - :type length: int - - :returns: Nothing - :rtype: None""" - angle = 360. / number_of_sides - for i in range(number_of_sides): - self.canvas.forward(length) - self.canvas.right(angle) - - def poly_repeat(self, length, number_of_side, density): - """Draw a repetition of a regular polygon - - :param length: Length of a side - :param number_of_side: Regular polygon's side number - :param density: quantity of polygon - :type length: int - :type number_of_side: int - :type density: int - - :returns: Nothing - :rtype: None""" - angle = 360. / density - for i in range(density): - self.regular_polygon(number_of_side, length) - self.canvas.right(angle) - - def outline(self, number_of_iteration, length, number_of_sides): - """Draw outline of a recursive shape - - :param number_of_iteration: Number of iteration used to draw - :param length: Length of a single side - :param number_of_sides: Number of sides of the initial shape - :type number_of_iteration: int - :type length: int - :type number_of_sides: int - - :returns: Nothing - :rtype: None""" - for i in range(number_of_sides): - self._outline_trace(number_of_iteration, length, number_of_sides) - self.canvas.right(360. / number_of_sides) - - def tree(self, length, angles, factor=1.5, min_size=5): - """Draw a tree recursively - - :param length: Length of the root of the tree - :param angles: List of angles for branch - :param factor: Reduce factor for next branch - :param min_size: Minimal length of a branch - :type length: int - :type angles: list - :type factor: float - :type min_size: float - - :returns: Nothing - :rtype: None""" - if length < min_size: - return "" - else: - self.canvas._state["color"] = (int(length), int(length), int(length)) - for angle in angles: - pos = self.canvas.get_position() - base_angle = self.canvas.get_angle() - self.canvas.right(angle) - self.canvas.forward(length) - self._tree(length / factor, angles, factor=factor, min_size=min_size) - self.canvas.set_position(pos) - self.canvas.set_angle(base_angle) - - def dragon(self, length, number_of_iteration, angle=1): - """Draw the dragon curve - - :param angle: Start angle - :param length: Length of a side - :param number_of_iteration: Number of iteration for the curve - :type length: int - :type number_of_iteration: int - - :returns: Nothing - :rtype: None""" - if number_of_iteration == 0: - self.canvas.forward(length) - else: - self.dragon(length, number_of_iteration - 1, 1) - self.canvas.left(angle * 90) - self.dragon(length, number_of_iteration - 1, -1) - - def power(self, length, power, base=1.5): - k = base - list_powers = [] - for i in range(power): - k = 10 * (k * 0.15 - int(k * 0.15)) - n = int((k - int(k)) * 10) - list_powers.append(n) - for i in list_powers: - angle = 36 * i - self.canvas.right(angle) - self.canvas.forward(length) - - def turning_tree(self, length, angles): - while True: - self.tree(length, angles) - time.sleep(0.1) - i = 0 - for _ in angles: - angles[i] += 1 - i += 1 - - def _koch_curve(self, length): - self.canvas.forward(length) - self.canvas.left(60) - self.canvas.forward(length) - self.canvas.right(120) - self.canvas.forward(length) - self.canvas.left(60) - self.canvas.forward(length) - - def koch_curve(self, length, number_of_iteration): - if number_of_iteration > 0: - self.koch_curve(length / 3., number_of_iteration - 1) - self.canvas.left(60) - self.koch_curve(length / 3., number_of_iteration - 1) - self.canvas.right(120) - self.koch_curve(length / 3., number_of_iteration - 1) - self.canvas.left(60) - self.koch_curve(length / 3., number_of_iteration - 1) - else: - self._koch_curve(length) - - -class Turtle: - - @staticmethod - def _calc_center(size): - return size[0] / 2, size[1] / 2 - - def _forward(self, distance): - AB = (distance * math.cos(math.radians(self._state.get("angle")))) + self._state.get("coordinate_x") - AC = (distance * math.sin(math.radians(self._state.get("angle")))) + self._state.get("coordinate_y") - self._forward_image(distance) - self._set_coordinates((AB, AC)) - - def _forward_image(self, distance): - AB = (distance * math.cos(math.radians(self._state.get("angle")))) + self._state.get("coordinate_x") - AC = (distance * math.sin(math.radians(self._state.get("angle")))) + self._state.get("coordinate_y") - self.draw.line((self.get_position('x') * self.resolution, self.get_position('y') * self.resolution, - AB * self.resolution, AC * self.resolution), fill=self._state.get("colour")) - - def _turn(self, angle): - self._set_angle(self._state.get("angle") + angle) - - def _set_angle(self, angle): - self._state["angle"] = angle - while self._state.get("angle") >= 360: - self._state["angle"] = self._state.get("angle") - 360 - - def _clear(self): - pass - - ### Fonction publiques ### - - def _clear_img(self): - self.image = Image.new( - '1', (self._config.get("size")), (255, 255, 255)) - self.draw = ImageDraw.Draw(self.image) - - def __init__(self, titre="Turtle", size=( - 400, 400), resolution=10): - self._config = {"titre": titre, - "size": size, - "size_IMG": (size[0] * resolution, size[1] * resolution), - "center": self._calc_center(size), - } - self._state = {"angle": 0, - "coordinate_x": self._config.get("center")[0], - "coordinate_y": self._config.get("center")[1], - "colour": (0, 0, 0), - } - self.fractal = Figures(self) - self.image = Image.new( - 'RGB', - (self._config.get("size_IMG")), - (255, - 255, - 255)) - self.draw = ImageDraw.Draw(self.image) - self.resolution = resolution - - def forward(self, distance): - self._forward(distance) - - def backward(self, distance): - self._forward(-distance) - if self.sauvegarde: - self._forward_image(-distance) - - def right(self, angle): - self._turn(angle) - - def left(self, angle): - self._turn(-angle) - - def goto(self, coordinates): - self._set_coordinates(coordinates) - self.draw.line(coordinates) - - def _set_coordinates(self, coordinates): - self._state["coordinate_x"] = coordinates[0] - self._state["coordinate_y"] = coordinates[1] - - def clear(self): - self._clear() - - # ## Accès aux variables ## - - def set_position(self, coordinates): - self._set_coordinates(coordinates) - - def get_position(self, type_coord=''): - if type_coord == 'x': - return self._state.get("coordinate_x") - elif type_coord == "y": - return self._state.get("coordinate_y") - return self._state.get("coordinate_x"), self._state.get("coordinate_y") - - def set_angle(self, angle): - self._set_angle(angle) - - def get_angle(self): - return self._state.get("angle") - - def get_state(self): - text = "" - for i in self._state.items(): - text = text + "\n" + str(i[0]) + ":" + str(i[1]) - return text - - def save(self, path, type_img=None): - self.image.save(path, type_img) - - -if __name__ == "__main__": - t = Turtle() - t.set_position((0, 0)) - t.fractal.outline(6, 2, 5) - t.save("test.jpg") From 0a4357920d84cd76e5f1ba8bcd7b4c46a7893ff8 Mon Sep 17 00:00:00 2001 From: TheDevKiller Date: Mon, 25 Feb 2019 20:37:26 +0100 Subject: [PATCH 6/6] Added test.jpg in .gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 67ffdb6..faac7cf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ .idea/ Pipfile.lock +test.jpg +source/test.jpg \ No newline at end of file