From d087c022158087423e3957fd67bdb77a9c69d009 Mon Sep 17 00:00:00 2001
From: Teo Blaise Kaplanski <teobk@macbook-air-de-teo.home>
Date: Fri, 20 Nov 2020 14:06:08 +0100
Subject: [PATCH] turtle

---
 tp6/.classpath                       |  11 +++
 tp6/.gitignore                       |   6 ++
 tp6/.project                         |  17 +++++
 tp6/Main.java                        | 103 +++++++++++++++++++++++++++
 tp6/Point.java                       |  77 ++++++++++++++++++++
 tp6/Rectangle.java                   |  82 +++++++++++++++++++++
 tp6/Shape.java                       |  15 ++++
 tp6/Triangle.java                    |  73 +++++++++++++++++++
 tp6/Turtle.java                      |  67 +++++++++++++++++
 tp6/tp2.jar                          | Bin 0 -> 5142 bytes
 tp6/tp2/META-INF/MANIFEST.MF         |   2 +
 tp6/tp2/tp2/lib/Line.class           | Bin 0 -> 827 bytes
 tp6/tp2/tp2/lib/Painter$1.class      | Bin 0 -> 936 bytes
 tp6/tp2/tp2/lib/Painter$Canvas.class | Bin 0 -> 1671 bytes
 tp6/tp2/tp2/lib/Painter.class        | Bin 0 -> 2099 bytes
 tp6/tp2/tp2/lib/PainterElement.class | Bin 0 -> 159 bytes
 tp6/tp2/tp2/lib/Point.class          | Bin 0 -> 744 bytes
 tp6/tp2/tp2/lib/Tools.class          | Bin 0 -> 551 bytes
 18 files changed, 453 insertions(+)
 create mode 100644 tp6/.classpath
 create mode 100644 tp6/.gitignore
 create mode 100644 tp6/.project
 create mode 100755 tp6/Main.java
 create mode 100755 tp6/Point.java
 create mode 100755 tp6/Rectangle.java
 create mode 100755 tp6/Shape.java
 create mode 100755 tp6/Triangle.java
 create mode 100644 tp6/Turtle.java
 create mode 100755 tp6/tp2.jar
 create mode 100755 tp6/tp2/META-INF/MANIFEST.MF
 create mode 100755 tp6/tp2/tp2/lib/Line.class
 create mode 100755 tp6/tp2/tp2/lib/Painter$1.class
 create mode 100755 tp6/tp2/tp2/lib/Painter$Canvas.class
 create mode 100755 tp6/tp2/tp2/lib/Painter.class
 create mode 100755 tp6/tp2/tp2/lib/PainterElement.class
 create mode 100755 tp6/tp2/tp2/lib/Point.class
 create mode 100755 tp6/tp2/tp2/lib/Tools.class

diff --git a/tp6/.classpath b/tp6/.classpath
new file mode 100644
index 0000000..4a0e6a5
--- /dev/null
+++ b/tp6/.classpath
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path=""/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
+		<attributes>
+			<attribute name="module" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="lib" path="/Users/teobk/programmation2/tp6/tp2.jar"/>
+	<classpathentry kind="output" path=""/>
+</classpath>
diff --git a/tp6/.gitignore b/tp6/.gitignore
new file mode 100644
index 0000000..1612b0f
--- /dev/null
+++ b/tp6/.gitignore
@@ -0,0 +1,6 @@
+/Main.class
+/Point.class
+/Rectangle.class
+/Shape.class
+/Triangle.class
+/Turtle.class
diff --git a/tp6/.project b/tp6/.project
new file mode 100644
index 0000000..9b0e9f6
--- /dev/null
+++ b/tp6/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>tp6</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/tp6/Main.java b/tp6/Main.java
new file mode 100755
index 0000000..b0cc438
--- /dev/null
+++ b/tp6/Main.java
@@ -0,0 +1,103 @@
+/**
+ * Created by Arnaud Labourel on 20/09/2018.
+ */
+
+import tp2.lib.Painter;
+
+import java.awt.Color;
+import java.util.Random;
+
+import static tp2.lib.Tools.sleep;
+
+public class Main {
+    static final int WIDTH = 800;
+    static final int HEIGHT = 600;
+
+
+    public static void main(String[] args){
+        Random random= new Random();
+        Painter painter = new Painter(WIDTH, HEIGHT);
+        
+
+        // Point.test1_Point(painter);
+        // Point.test2_Point(painter);
+        
+        //Rectangle.test_rectangle(painter);
+        // dessin_Roue();
+        // drawFractale();
+        test_turtle();
+        
+    }
+    
+    public static void dessin_Roue() {
+    	int numberOfPoint = 10;
+
+        Painter painter = new Painter(WIDTH,HEIGHT);
+        Point center = new Point(WIDTH/2,HEIGHT/2 );
+        Point point = new Point(100,0);
+        for (int i = 0; i < numberOfPoint; i++) {
+        	Point p1 = point.rotate((360/numberOfPoint)*i);
+            Point nextPoint = point.rotate((360/numberOfPoint)*(i+1));
+            
+            p1 = p1.translate(center.x,center.y);
+            nextPoint = nextPoint.translate(center.x,center.y);
+
+            nextPoint.draw(painter,Color.red);
+
+            center.drawLine(p1,painter,Color.blue);
+            p1.drawLine(nextPoint,painter,Color.black);
+
+
+        }
+
+    }
+    
+    public static void drawSquare(Turtle turtle, int size) {
+    	for (int i = 0; i < 4; i++) {
+    	turtle.moveForward(size);
+    	turtle.turnLeft(90);
+    	}
+    }
+    
+    
+    	public static void test_turtle() {
+    	Turtle turtle = new Turtle(800,600);
+    	turtle.setColor(Color.black);
+    	turtle.setPenDown();
+    	int n = 20;
+    	for (int i = 0; i < n; i++) {
+    	turtle.turnRight(360.0/n);
+    	drawSquare(turtle, 10);
+    	}
+    	
+    	
+    }
+
+/*
+    private static void drawFractale(){
+        int width = 590, height = 580, nbIterations = 4;
+        Turtle turtle = new Turtle(width, height);
+
+        // Déplacement de la tortue en bas à gauche.
+        turtle.setPenUp();
+        turtle.turnLeft(90); turtle.moveForward(width/2-10);
+        turtle.turnLeft(90); turtle.moveForward(height/2-10);
+        turtle.turnLeft(180);
+        turtle.setPenDown();
+
+        // Définition des règles
+        Rule[] rules = { new Rule('X', "XAYAX+A+YAXAY-A-XAYAX"),
+                new Rule('Y', "YAXAY-A-XAYAX+A+YAXAY") };
+        SetOfRules setOfRules = new SetOfRules(rules);
+
+        // Application des règles nbIterations fois
+        String sequence = "X";
+        for (int i = 0; i < nbIterations; i++)
+            sequence = setOfRules.apply(sequence);
+
+        // Dessin de la séquence par la tortue
+        turtle.drawString(sequence, 7, 90);
+    }
+*/
+
+}
diff --git a/tp6/Point.java b/tp6/Point.java
new file mode 100755
index 0000000..9b902ea
--- /dev/null
+++ b/tp6/Point.java
@@ -0,0 +1,77 @@
+/**
+ * Created by Arnaud Labourel on 20/09/2018.
+ */
+import tp2.lib.Painter;
+
+import java.awt.*;
+
+public class Point {
+    public final double x;
+    public final double y;
+
+    public Point(double x, double y) {
+    	this.y = y;
+    	this.x = x;
+	// Add code here
+    }
+
+    void draw(Painter painter, Color color){
+        // Add code here
+    	painter.addPoint(this.x, this.y, color);
+    }
+
+    void drawLine(Point p, Painter painter, Color color){
+    	painter.addLine(this.x, this.y, p.x, p.y, color);
+        // Add code here
+    }
+    
+    Point translate(double dx, double dy) {
+    	return new Point(this.x+dx, this.y+dy);
+    }
+    
+    Point rotate(double angle) {
+    	double a = (Math.PI * angle)/180;
+    	
+    	double xr = (this.x*Math.cos(a)) - (this.y*Math.sin(a));
+        double yr = (this.x*Math.sin(a)) + (this.y*Math.cos(a));
+        
+
+    	return new Point(xr,yr);
+    }
+    
+    public double distance (Point point){
+        return (Math.sqrt( Math.pow(this.x-point.x, 2) + Math.pow((this.y-point.y), 2) ));
+    }
+
+
+public static void test1_Point(Painter painter){
+        Point p1 = new Point(100,100);
+        Point p2 = new Point(300,100);
+        Point p3 = new Point(300,300);
+        Point p4 = new Point(100,300);
+        p1.drawLine(p2, painter, Color.black);
+        p2.drawLine(p3, painter, Color.black);
+        p3.drawLine(p4, painter, Color.black);
+        p4.drawLine(p1, painter, Color.black);
+        p1.draw(painter, Color.red);
+        p2.draw(painter, Color.red);
+        p3.draw(painter, Color.red);
+        p4.draw(painter, Color.red);
+}
+
+public static void test2_Point(Painter painter){
+    Point p1 = new Point(100,100);
+    Point p2 = p1.translate(200, 0);
+    Point p3 = p2.translate(0, 200);
+    Point p4 = p3.translate(-200,0);
+    p1.drawLine(p2, painter, Color.black);
+    p2.drawLine(p3, painter, Color.black);
+    p3.drawLine(p4, painter, Color.black);
+    p4.drawLine(p1, painter, Color.black);
+    p1.draw(painter, Color.red);
+    p2.draw(painter, Color.red);
+    p3.draw(painter, Color.red);
+    p4.draw(painter, Color.red);
+}
+
+}
diff --git a/tp6/Rectangle.java b/tp6/Rectangle.java
new file mode 100755
index 0000000..82552ad
--- /dev/null
+++ b/tp6/Rectangle.java
@@ -0,0 +1,82 @@
+import tp2.lib.Painter;
+
+
+import java.awt.*;
+import java.util.Random;
+import static tp2.lib.Tools.sleep;
+
+/**
+ * Created by Arnaud Labourel on 17/10/2018.
+ */
+
+public class Rectangle implements Shape{
+
+    Point p1, p2;
+
+    public Rectangle(Point p1, Point p2){
+        // Add code here
+    	this.p1 = p1;
+        this.p2 = p2;
+
+    }
+
+    private double height(){
+        return Math.abs(p2.y-p1.y);
+    }
+
+    private double width(){
+        return Math.abs(p2.x-p1.x);
+    }
+
+
+
+
+    public static void test_rectangle(Painter painter){
+        Point p1 = new Point(100,100);
+        Point p2 = new Point(200,100);
+        Point p3 = new Point(200,300);
+	Random random= new Random();
+        
+	Shape r = new Rectangle(p1, p3);
+        r.draw(painter, Color.black);
+
+        for(int i =30; i<400; i+=30) {
+            Shape t2 = r.translate(i, i);
+            sleep(100);
+            t2.draw(painter, new Color(random.nextFloat(),
+                    random.nextFloat(), random.nextFloat()));
+        }
+    }
+
+
+    @Override
+    public double getPerimeter() {
+        return height()*2 + width()*2;
+    }
+
+    @Override
+    public void draw(Painter painter, Color color) {
+        Point upRight = p1.translate(width(),0);
+        Point downLeft = p1.translate(0,height());
+        p1.drawLine(upRight,painter,color);
+        p1.drawLine(downLeft,painter,color);
+        p2.drawLine(upRight,painter,color);
+        p2.drawLine(downLeft,painter,color);
+    }
+
+    @Override
+    public Shape translate(int dx, int dy) {
+        return new Rectangle(
+                p1.translate(dx,dy),
+                p2.translate(dx,dy)
+        );
+    }
+
+    @Override
+    public double getArea() {
+        return height()*width();
+    }
+
+
+
+}
diff --git a/tp6/Shape.java b/tp6/Shape.java
new file mode 100755
index 0000000..2890dd5
--- /dev/null
+++ b/tp6/Shape.java
@@ -0,0 +1,15 @@
+import tp2.lib.Painter;
+
+import java.awt.*;
+
+/**
+ * Created by Arnaud Labourel on 15/10/2018.
+ */
+
+public interface Shape {
+
+    double getPerimeter();
+    void draw(Painter painter, Color color);
+    Shape translate(int dx, int dy);
+    double getArea();
+}
diff --git a/tp6/Triangle.java b/tp6/Triangle.java
new file mode 100755
index 0000000..709f89a
--- /dev/null
+++ b/tp6/Triangle.java
@@ -0,0 +1,73 @@
+import tp2.lib.Painter;
+import static tp2.lib.Tools.sleep;
+import java.awt.*;
+import java.util.Random;
+
+/**
+ * Created by Arnaud Labourel on 15/10/2018.
+ */
+public class Triangle implements Shape {
+    private final Point[] vertices;
+
+    public Triangle(Point p1, Point p2, Point p3) {
+        vertices = new Point[]{p1, p2, p3};
+    }
+
+    private Triangle(Point[] vertices){
+        this.vertices = vertices;
+    }
+    
+    
+    public static void test_triangle(Painter painter){
+        Point p1 = new Point(100,100);
+        Point p2 = new Point(200,100);
+        Point p3 = new Point(200,200);
+
+        Point point[] = {p1,p2,p3};
+
+        Random random= new Random();
+        Shape r = new Triangle(point);
+        System.out.println(r.getArea());
+        for(int i =30; i<400; i+=30) {
+            Shape t2 = r.translate(i, i);
+            sleep(100);
+            t2.draw(painter, new Color(random.nextFloat(),
+                    random.nextFloat(), random.nextFloat()));
+        }
+    }
+
+
+    @Override
+    public double getPerimeter() {
+        return (vertices[0].distance(vertices[1]) +
+               vertices[1].distance(vertices[2]) +
+                vertices[2].distance(vertices[0]));
+    }
+
+    @Override
+    public void draw(Painter painter, Color color) {
+        for (int i = 0; i < 3; i++) {
+            vertices[i].drawLine(vertices[ (i+1) % 3],painter,color);
+        }
+    }
+
+    @Override
+    public Shape translate(int dx, int dy) {
+        return new Triangle(
+                vertices[0].translate(dx,dy),
+                vertices[1].translate(dx,dy),
+                vertices[2].translate(dx,dy)
+                );
+    }
+
+    @Override
+    public double getArea() {
+        double p = getPerimeter()/2;
+        double a = vertices[0].distance(vertices[1]);
+        double b = vertices[1].distance(vertices[2]);
+        double c = vertices[2].distance(vertices[0]);
+        return Math.sqrt( p * (p-a) * (p-b) * (p-c) );
+    }
+
+
+}
diff --git a/tp6/Turtle.java b/tp6/Turtle.java
new file mode 100644
index 0000000..9c2e79c
--- /dev/null
+++ b/tp6/Turtle.java
@@ -0,0 +1,67 @@
+import java.awt.Color;
+import static tp2.lib.Tools.sleep;
+import tp2.lib.Painter;
+
+public class Turtle {
+Color penColor;
+double angleDirection;
+Point position;
+boolean penIsDown;
+Painter painter;
+
+public Turtle(int width, int height) {
+	penColor = null;
+	angleDirection = 270;
+	painter = new Painter(width, height);
+	penIsDown = false;
+	position = new Point(width/2, height/2);
+	
+}
+
+public void moveForward(double distance) {
+	sleep(500);
+	double move = -(Math.sqrt(distance)-position.x);
+	Point newPosition = position.translate(position.x + move, position.y );
+	newPosition = newPosition.rotate(angleDirection);
+	
+	if (penIsDown){
+		position.drawLine(newPosition, painter, penColor);
+	}
+	
+	
+	position = newPosition;
+}
+
+public void setColor(Color color) {
+	penColor = color;
+}
+
+public void turnLeft(double angle) {
+	 angleDirection = angleDirection - angle;
+	 while (angleDirection < 0) {
+		 angleDirection = 360 - angleDirection;
+		 
+	 }
+}
+
+public void turnRight(double angle) {
+	angleDirection = angleDirection + angle;
+	 while (angleDirection > 360) {
+		 angleDirection = angleDirection - 360;
+	 }
+}
+
+public void setPenDown() {
+	penIsDown = true;
+
+}
+
+public void setPenUp() {
+	penIsDown = false;
+
+}
+
+
+
+
+}
diff --git a/tp6/tp2.jar b/tp6/tp2.jar
new file mode 100755
index 0000000000000000000000000000000000000000..dbf171ecd818c65bf2aa67aeefd910370bfbab4c
GIT binary patch
literal 5142
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

literal 0
HcmV?d00001

diff --git a/tp6/tp2/META-INF/MANIFEST.MF b/tp6/tp2/META-INF/MANIFEST.MF
new file mode 100755
index 0000000..58630c0
--- /dev/null
+++ b/tp6/tp2/META-INF/MANIFEST.MF
@@ -0,0 +1,2 @@
+Manifest-Version: 1.0
+
diff --git a/tp6/tp2/tp2/lib/Line.class b/tp6/tp2/tp2/lib/Line.class
new file mode 100755
index 0000000000000000000000000000000000000000..be9729a696402565a3f262ee6dc069d7bf9dab4a
GIT binary patch
literal 827
zcmX^0Z`VEs1_mPrV|E56Mh2de0wevL%p`rE%)C@~1{OvJfvm)`ME#t^ymWp4q^#8B
z5_SeQMg}pMx`4#Yypq%+*PPVc)VvZ#2Br!_Mg~R~Mh2!zLlDmh#4=)JU`@`?$uDAL
z5byz;msnn+?+g;LW@KQq$;`_vv14Qq*YNc8^h8&n8OF%K;+&t7%EiFUAjHGK#~{qe
zz^tJe#>v3QAj-qQ&cFd;iSsaULRgYK3|tVFG!FwegeA+vz{9}H$iNTsmtSdaQfg61
zVp2{jBZH7nesW??SYlBohz}KHDaptzW@O;=fq4_8&6<&c(UXyZC8a2_oRL971L08j
zqQruX%;aJt7i-NhE(SFQ4R!`~Mh0QHR}l($7&IBQ7#TQ<Q%k`9XJimYG6*aLHA9Do
zL6<>~k%0qbAIN@226k`&fdYgvosmHls{<GrxPtRbi;`2_GC|(s1nJZRIfOxhfsuik
zfsuigft7&?6l@F(3{0Rv1Jhg#9AKIoO7k%Ag87ULd<^^yj0^${3=A_Em>Jj@7#LKv
zwlfH7Nw;rh5Ydup-^w7SCELE0K|)KErF|=dl$IpxRtA}kVBK;I3=DD%><kPHJPa%h
zybN3nd<+5%{0w3Y0t~VYf(*(GLJaZ@3=DP<a~TvE6d6E3g@K(xiGdMh7Xv4Q5(5*M
z#l@h+zzk+_Gbk~zfLS1SvNA9-C^M))T^Y;323D`At+j<gW*dVlh!*M7+QJ|PA|ybB
tRNpoRZG;o~z{ZL)a4?85C@_eFog@Y^1nwk727Lwt21W)(21Bsdi~yxIj;H_t

literal 0
HcmV?d00001

diff --git a/tp6/tp2/tp2/lib/Painter$1.class b/tp6/tp2/tp2/lib/Painter$1.class
new file mode 100755
index 0000000000000000000000000000000000000000..378cfcba6901281c57a8d5deede45c4bb6da9b2a
GIT binary patch
literal 936
zcmX^0Z`VEs1_mPrb9M$MMh3x>0wevL%q0DQ#LT>s)FKr_b_Nzk27#=^vPAuy#JqHU
z|D>$c<PvrUHbw>^glJG{US48SPAVe<TS-P{v5EmBgP;$ZS=NjU++~S5DyccCxv6<2
zj0_U!DqJBl){G2nHko;uC3cJqIvVJTtkDHvx-`QW8Cab2Q&Kq@7#a9^7}yy&KrBHX
z22KVpE(T@>VIBr<1`$REW(|;1exJ;|RKL>Pq|~Aih|`69@{<#D!V-%zL42qn3&=l=
z48rKPsu)@`GB6jF=5aAdGsv<t$S^YSqj{KzL5@M5k%1#IIXSf$945+`zR~mnhhk|-
zW{$p3W^su%H-jRBGCPA3BLg3*3=e|}gDN8fb7D#gBZH_0L?2R|SZhXs+@j9IpuwPt
zu-1@~K^vR3XpU8JPRuJyEVkxi&}PtOXV76}5W}v5hd~b%i0nnF1)wy-$iNkxUs{x$
z>Xr$LejaGT(F3`ik%8YeFF7Z_I5RKZH?<@qKZS?En8AdRfh#d31sZLP4AK~`gGyP0
zqKU^dFE6#oIVZ8WIJKCOfeqqJ1_cI224)6E237_p0Rd1{GcX7Ufg+lLfq{vEfq|QW
zhk=oSmw|!7mVt?ZnSp_UUrT!{1D}@8Rt5pB?F>R2!3sqg7#O&~8W<V47!(-97#P4B
z85sB(#2F+Q7#J8CBpF1YM)@%?F)%VPFvw_aVc^@rAf>g1L0~6?0uw_xL_lpDgBHSE
zKCrb)41x^G4AKlLNM_4G&1PoM2fM<6!H|K0frUYu!HB_>fq_8?Y7YYg1A{h$G=muf
F69C+Z&Jh3r

literal 0
HcmV?d00001

diff --git a/tp6/tp2/tp2/lib/Painter$Canvas.class b/tp6/tp2/tp2/lib/Painter$Canvas.class
new file mode 100755
index 0000000000000000000000000000000000000000..b3101cd6f5b1fe41cc7ccdaa9cab904686bdb28a
GIT binary patch
literal 1671
zcmX^0Z`VEs1_mRB6m|wCMh3Bx0wevL%q0DQ#LT>s)FKt<#JsY^Vs-`=Mh2m*#InQ+
z{o?Y>ymWo9fW*Ai97YC#;?$zd#GJ6yqT<Z_yiiXUMg~SNMh0Hz{Ji3l#JrNQ#GKMp
zRt5-QWMp6~$;d2LF<@j6^g*-AnvsFcCNnRy#Ey|cL<2)sGmMde#W_DEm6L&yL4b#W
zi-DVqftf*whk=Jdn2~{51Ehf8Co?bAuQWF)wJ0PpDJPYYLC7aRIWZ?Ju_zP7hYGTQ
z9KpySfo=)Zx7Lgdd<7u?JLl&X<maX4l`t}hY50J=ub)_6qVHamSdfvKTx_iw26BQl
z4}%1QBs+sFBZDx88Y35W26;vX5x9g?VsU12a7j^qb}AQx9D^dr{Ys1sEE;Yg(_|P_
zco<X})EF5!i&IM=%D}+^*AEf1)(qoh&|uJFXV7G15Qj?!rRJri7G>t8dt~O76!S1>
zGw3if2za|j#yk3jcslxcItF|Cxid1zB0PhtMa4U{(i&v49uI>)g8?IhP?)1ns4GHy
zyuTkPP{B6lB<7{-`zK|kCYM-qF~~3&@h})On1Itn35v0d3`R)7hay!Bwh`hSWb;6Q
zVa8y=&S1{Sz>k(vco-}htQZ+M5|fiti@}LW8B2PBm|0qqnWOKMSzKbx&0xb|$If8O
z$iN47JzR!|!Jff^k%1$#B(*59B)<q0*_ueYJ)z>(+zd_(F6<1>(5#>jHUTEf!{Ex`
z#>l{ums(K*iZQ4O$bMpH@W9Mrt~sf>sd**b4DJkGJPh6pK8y@3DMg9pj0_S;VFpWb
zMlRNxVIX(-@i6!^1TZqNXCxN;fvsfL(2QbaU`%IZ5QaD&C8;tpFsB=(Ffxc@${D#>
zGcvHJLfnBRS3q58&B(wTT#}fa?VDHt&PVJFk&Fz2;IKrtijhGFGd6JLG*C1%GQ@x~
z0WTv1S8#r5QF5wVCMf6fK#L$fkPVCsJf3-ZsYT8?iN(dK#q11;j11Bs32=tQOi_#s
z%-*S$j0|j$@{2)%fsuikfq{XEL5hKufsKKYfgQ}_5D);BBn%7;%nVEnJPf=Hj0}7X
z3=Ad=Obkp63=CXa+FKd;wYD<|ZUn0rVPF93W?(R25M^Ls;9+0{sbUag5NBXuU;z~b
zP!p~*urPqiJwGk&?F>@d2N-00b#^nzMe=TEP}s(xth0$heG`N3HU>kjEe!lS7)*CE
zSTizMu`Fj0m1Nn;;K;~ufWh5QS7#@KCldom#Fvp_*8k@qS1>bxT%pCl#lXN|#=y#8
z&cMZB!63$9$somG#URUI$)Lbs&0xb|!{E$d&EU&m3wEg%0}BHKgCEqTAXXql5CbCv
z7lR8!Fhd9f6N3!{J3}Z#7y~myI0FNNI0Msv215o`b_Pavh6r{B83uL+Ck6&V0g$Jo
zpq^A?U;+m#8_1K<AjdI*9R~_vSP+4Nk%=J|9DH#M@eB+MLJUj{2@DzxNi3kU+>9Za
Gfe8Ti{e!vy

literal 0
HcmV?d00001

diff --git a/tp6/tp2/tp2/lib/Painter.class b/tp6/tp2/tp2/lib/Painter.class
new file mode 100755
index 0000000000000000000000000000000000000000..ede1b6569325971de48b5f7158cf32352181070e
GIT binary patch
literal 2099
zcmX^0Z`VEs1_mRBVs-{5Mh5<p0wevL%q0DQ#LT>s)FO5U7Dfhvti-ZJ{hY+SbbbG%
ztkmQZMh1@5oYdUZypm!@1_2+ibZJRuj=oQ3afvk}17~n%dR}5lX;CU8gBF^!jSrd?
zt`L)~?W`FY*pd_T$`Xqi86?nEsW^jWKx%9<^D;~97#UbKJUunT7#Ucc^HWl}7?>IO
zc^J4E1Q;2ZH8jK68H5-agb^-tEGkN@1UZk3L6Cu;lYx;zl!t+pfsLI(oRL8Yq^?50
zxI8m2UEj;CC^0vcgF%v!fgKtOTnu6i(jdcS7#T!0ARYn-M{r3|W?s5A$T~Sj1~D|B
zLEX&7Aj_Zt(yhqIpre8AF>7=Is4i>GFpw*ic^EhuxY!v~p{~?VEHBY_$;?g7E6&W%
z<6=-@PzM>!1F}Suhe3-$n~_1FIJG38C^ap$s3<ihII}91kwF~lY82hpnqeTH>GCk>
zG3YZgFej#@FfwQ%sdUcIEy&MH%`36igm@aH9U%zPY{<i41PXJOg2d!(kbnsfgDHa<
zBZEY7YKco~T4HHViE~bVajJhoYEfcIW_}(c1B-?y#AXW~21^DjMh33p)RM5w;>@I+
zRFG^GC|3D>GV@aXN^_G^i$W5?5<))t$%#2(iA9+pK2(sUBqOt!kwFkW6s;K<Sj#h0
zN-`K37(E#o*fLTx(=$pK8CcUmvCGIH0`?GUoLe(8a3!XsKocY*gEU5DL8ZVE?#{>{
zh#ujFTnuguo}dWvA}X#C=5aCjF!-@E_%bp`At%OQP?8KS$;`<t$xJQgVen@NU}WIV
z%qz>!PW4GFNi9M|EjU32mFDGvLdO~ugzV5viX}V2EM{b2PfSSx1vSVZ7Z(>7aJYa|
znR9+lei7KKVT=qsFt38taxsK5M1Xu53DV{1>FJ57i;IDgA)1H5g~64PfvLifk%7^L
zk%6hw5X3VAv5XiQSd&3kz>5$_>H=BH$iR`9k`j=gnO6eJaoAmz#>l`6a}`)A7egvT
z2FO_{j0}twj0}vGAajzFQ;UmL3>X=dF`^TetdYwujzowCLq-N|Y#QJ;LJCM&Ze?WP
z3eGPrN=|jl1SMh~Xvv`micCfZ9?!hI)FS7c#Ny)AVnzlwNMXjH$iT?J%)r3F#J~h9
zix?Og*ugvw1}0FhXJBApV_;<9X5e99WZ-3BVA#dL%D}?Fz~HB~oq<nlH-lj0b_U_C
z3?jQ3#3F?xwlhfiY3*i^jnrb?&LF>)K}l;1gVJsWl}Krs?F?$$7&LT20^1mL!gaSX
z80fNXV=&fb*~VbL5p1V50|SE=0~Z4Wg9rl)gD3+(gBXJ(gE)g4g9L*agCv7JgA{`^
zgEWH&gA9W&gDis$SUuP^47Ln*3?SggV9(&dzzA|7gCm0j0~3QJgDHa(gEIp&0~07I
zK>gv$z{0@9z`($}o53woOM5$m#|{Q>gfqCnk_rqw3~FF&#K3%BxHY^Cfeb+mj0}tn
z!3-f#BP$p<z>b&D+RYFesotmAC&Ah$!QLmyxt$?=J3|z@>6#4U3|e5*?HJe?7#Jkr
zrb{ryFvNmAA;A#G5DShV35IxvSO!+Gx&($;a5PCUBr+s1fXe7(h7_nPVi-8UrU_{6
zW=M@x*OX-4&XA79c3lR320gItTHpv3fZHy>kO{S2fFTQNy8zfGRsjx%Y=#`DO{!r3
zGcd4fZDA1E0FOaXdSPG?1RKr7z#zcEkjs#VMT-);79p4x1}27luyF+pg$xV~LJUj{
SZlJhjU|^7CU}Pv_U;+TM@We;}

literal 0
HcmV?d00001

diff --git a/tp6/tp2/tp2/lib/PainterElement.class b/tp6/tp2/tp2/lib/PainterElement.class
new file mode 100755
index 0000000000000000000000000000000000000000..bc59f4a0146b025fa5e8baeec404cef5e4386b84
GIT binary patch
literal 159
zcmX^0Z`VEs1_mPrPId++Mh3Bx0wevL%q0DQ#LT>s)FRiM)ZEm(5_Sd_Mh1bb#Ii*F
zoW#6zegCAa)Z`LI29}hf#BxRk2@M~xTw-~NzI#z(K}KeBv5||lW*8#_S8#r5QF5wV
pW=<+2gD|S8dLT_~3=E76%nTsF$im3L%D~0|5@BaxU|?e4002PbCy)RD

literal 0
HcmV?d00001

diff --git a/tp6/tp2/tp2/lib/Point.class b/tp6/tp2/tp2/lib/Point.class
new file mode 100755
index 0000000000000000000000000000000000000000..a819a8f514fdf2730726c4017a7b66684d5afbb4
GIT binary patch
literal 744
zcmX^0Z`VEs1_mPrJ$42rMh4!J0wevL%q0DQ{LH)(b_Nzk27#=^vPAuy#JqHU|D>$c
z<PvrUHbw?9xWdHDypq%+*PPVc)VvZ#2F40T21XY~2F6N82G->Koctn21_2+i8Hwd3
z`pzH`Yeoh(o6Nk-5<5l)Q4JRtbZN~nMg|t={FGEK24)5U9tIu;K}H5<4b3o421W*9
z9tL&>4iHO}hk+Bq66ayyV&G<E;P=VQOZ6+wO-d~aNleN~Wn>WY$xlwq2}>->1o5GQ
zEF~G4#URyiPk?-D&B(x#Qj}QE$RMGCaFKgaVnIe`a<P$%wPqL>gFJ&GJA(ovgD~7j
z2n9S0N({=33>?L&C17tdG6*9X1QxQ^3}bT;VE_Y=Vd^{#8Vs6@3>;~hIXV7ii8+i6
z>>8e)o}Qo}U`%IZ5XI^eMh33n{L-T2RJTl!C%M3}r3Z2ng8~C112Y3711keF0~08u
z7#J9sK;Z<Yxfr;?G$R8K11|$310MqeLoNd|0~-SagQ(Va27WE|tqek1np+t}v?N)#
zGKg&iE0<tkU=U+qWnf_7W?*3e1v@VT9|IqQ2m?QZBm)D376S{&00t=rX|UHs!4@-u
z#W)!_7?{B<kmallj0`divQVqz8Q2(@7#J9owY9b|h;3t#1JObv3@Yh;T3Z-IzzhK{
u0j_NfY6yq$fsGSl;9wADP+|}PJ3tI#4BP?A3|b7@42%qn3_4&B=mG#2WrV^2

literal 0
HcmV?d00001

diff --git a/tp6/tp2/tp2/lib/Tools.class b/tp6/tp2/tp2/lib/Tools.class
new file mode 100755
index 0000000000000000000000000000000000000000..38a25c7192c043b2f2746fa22aafc5abe9920b4f
GIT binary patch
literal 551
zcmX^0Z`VEs1_mPrMRo=zMh4!J0wevL%q0Dg{QR6^b_Nzk27#=^vPAuy#JqHU|D>$c
z<Pt^(Hk-`6%o00B24)S-Fh&Lz=lqmZE(T@>P96qU1~x_pexJ;|RKL>Pq|~C2#H5^5
zMg}3D{N%)(u*9NF5FaYYQj(Eb3{s6^sWl@5YjI9$Y5^kyi-xCW7#D*egD^XT5Q<Ae
zGKx|YQ+OEo7(_tIyg<st7$n#k#2Fdn5DxatD@iRXDlI5UO>wPAPAw?O%+KRtkOaH2
zpeQr1B)B9oIXk2%F*%iyfho6`k%7^Zk%2LlkwL)+zbV#?47^~?zKI1;?{Ed@mlh?b
zx@Ceq%mofWJ&+*`iVTbl%nTsF#J~s&AqGYUb_NCpeFjDbMg|53R;}#}92*%J7?>Ei
z7#JAXz=F&S+zbp1JYY5}0}lf)0|Nsm10MrFRC6)|69W?i0|TE_>kbBi<qRA?+S?dJ
zH$v5OFo-cQgH01+U}0cjU}xZ9;9%fn;AG%s;0Bv42GPwR#UKqfnT0`yL6(7$K@O~%
R$%CCijD>-bK_2WZ1puA&Xkh>V

literal 0
HcmV?d00001

-- 
GitLab