package projetia; import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.ArrayList; import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.Random; import javafx.scene.paint.Color; import javafx.scene.shape.Polygon; public class ConvexPolygon extends Polygon { static final int maxNumPoints=3; static Random gen = new Random(); static int max_X,max_Y; NumberFormat nf = new DecimalFormat("##.00"); // randomly generates a polygon public ConvexPolygon(int numPoints){ super(); genRandomConvexPolygone(numPoints); int r = gen.nextInt(256);//générer un entier pseudo-aléatoire entre 0 et 256)// int g = gen.nextInt(256);//générer un entier pseudo-aléatoire entre 0 et 256)// int b = gen.nextInt(256); //générer un entier pseudo-aléatoire entre 0 et 256)// double opacite = gen.nextDouble();//générer un double pseudo-aléatoire// // System.out.println("ConvexPolygo-couleur rouge =" + r + " couleur verte =" + g + " couleur bleue =" + b + " opacité=" + opacite); this.setFill(Color.rgb(r, g, b));//remplissage de couleur dans color par r,g et b// this.setOpacity(gen.nextDouble());//remplissage de l'opacité en ajoutant un double pseudo-aléatoire// } public ConvexPolygon reproduire(ConvexPolygon cp) { ConvexPolygon enfant = new ConvexPolygon();//créer enfant de type ConvexPolygon// double random = enfant.gen.nextInt(1) ;//random: double aléatoire compris entre 0 et 1 // System.out.println("reproduire-random==" + random); enfant.max_X = cp.max_X;// enfant.max_Y = cp.max_Y; System.out.println("reproduire=" + this.toString());// System.out.println("reproduire cp=" + cp.toString());// enfant.genRandomConvexPolygone(3); Color couleur_pere = (Color) this.getFill(); Color couleur_mere = (Color) cp.getFill(); int rougepere = (int) (couleur_pere.getRed() * 255.0); int rougemere = (int) (couleur_mere.getRed() * 255.0); int greenpere = (int) (couleur_pere.getGreen() * 255.0); int greenmere = (int) (couleur_mere.getGreen() * 255.0); int bleuepere = (int) (couleur_pere.getBlue() * 255.0); int bleuemere = (int) (couleur_mere.getBlue() * 255.0); int r = (int) (random * rougepere + (1.0 - random) * rougemere ); // int r = (int) (0.5 * rougepere + (0.5) * rougemere); int g = (int) (random * greenpere + (1 - random) * greenmere ); // int g = (int) (0.5 * greenpere + (0.5) * greenmere ); // int b = (int) (random * bleuepere + (1 - random) * bleuemere ); // int b = (int) (0.5 * bleuepere + (0.5) * bleuemere ); if (random < 0.1) { if (r < 36) r = 35; else r = r - 35; if (b < 43 ) b = 42; else b = b - 42; if (g < 57 ) g = 56; else g = g - 56; } if (random > 0.9) { if (r > 200) r = 255; else r = r + 35; if (b > 200 ) b = 255; else b = b + 42; if (g > 200 ) g = 255; else g = g + 55; } System.out.println("couleur rouge de pere=" + rougepere + " couleur rouge de mere=" + rougemere + " couleur rouge de l'enfant=" + r); System.out.println("couleur blue de pere=" + bleuepere + " couleur blue de mere=" + bleuemere + " couleur bleue de l'enfant=" + b); System.out.println("couleur vert de pere=" + greenpere + " couleur verte de mere=" + greenmere + " couleur verte de l'enfant=" + g); enfant.setFill(Color.rgb(r, g, b)); // double opacite = random * this.getOpacity() + (1- random) * cp.getOpacity(); double opacite = (0.5 * this.getOpacity() + (0.5) * cp.getOpacity() ); System.out.println("opacite du pere=" + this.getOpacity() + " opacite de mere=" + cp.getOpacity() + " opacite de l'enfant=" + opacite); enfant.setOpacity(opacite); /*int r = (int) (random * couleur_pere.getRed() + (1 - random) * couleur_mere.getRed() ); if (random < 0.1) r = 215; int g = (int) (random * couleur_pere.getGreen() + (1 - random) * couleur_mere.getGreen() ); int b = (int) (random * couleur_pere.getBlue() + (1 - random) * couleur_mere.getBlue() ); enfant.setFill(Color.rgb(r, g, b)); double opacite = random * this.getOpacity() + (1- random) * cp.getOpacity(); enfant.setOpacity(opacite);*/ return enfant; } public ConvexPolygon(){ super(); } @Override public String toString(){ String res = super.toString(); res += " " + this.getFill() + " opacity " + this.getOpacity(); return res; } public void addPoint(double x, double y){ getPoints().add(x); getPoints().add(y); } // http://cglab.ca/~sander/misc/ConvexGeneration/convex.html public void genRandomConvexPolygone(int n){ List points = new LinkedList(); List abs = new ArrayList<>(); List ord = new ArrayList<>(); for (int i=0;i xVec = new ArrayList<>(); List yVec = new ArrayList<>(); int top= minX, bot = minX; for (int i=1;i lpAux = new ArrayList<>(); for (int i=0;i Math.atan2(x.getY(), x.getX()) < Math.atan2(y.getY(), y.getX()) ? -1 : Math.atan2(x.getY(), x.getX()) == Math.atan2(y.getY(), y.getX()) ? 0 : 1); int x=0,y=0; int minPolX=0, minPolY=0; for (int i=0;i