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<20^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