Advertisement
Guest User

Untitled

a guest
Oct 7th, 2015
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.16 KB | None | 0 0
  1. import java.awt.Point;
  2. import java.util.ArrayList;
  3. import java.util.Arrays;
  4. import java.util.List;
  5.  
  6.  
  7.  
  8. public class Toit2 {
  9. public Point l1[] = {new Point(1,10), new Point(5,6), new Point(8,0), new Point(10,8), new Point(12,0)};
  10. public Point l2[] = {new Point(2,12), new Point(7,0), new Point(9,4), new Point(11,2), new Point(14,0)};
  11.  
  12. Im[] listImmeuble;
  13.  
  14. public Toit2() {
  15.  
  16. }
  17.  
  18. public List<Point> fusion(List<Point> l1, List<Point> l2) {
  19. List<Point> result = new ArrayList<Point>();
  20.  
  21. int l1_length = l1.size();
  22. int l2_length = l2.size();
  23. int j = 0;
  24. int i = 0;
  25.  
  26. //tant que ligne1 et ligne2 n'ont pas été complétement parcourus tout les 2
  27. while(i != l1_length || j != l2_length){
  28. //si un des 2 est fini, alors on rajoute tout le 2eme a la liste des points
  29. if(i == l1_length && j != l2_length){
  30. result.add(l2.get(j));
  31. j++;
  32. } else if(i != l1_length && j == l2_length){
  33. result.add(l1.get(i));
  34. i++;
  35. }
  36. //si l1.get(i) est entre l2.get(j) et [j+1] ( et que j+1 existe donc ) ou l1.get(i).x == l2.get(j).x
  37. else if(j+1 < l2_length && i < l1_length && l2.get(j).x <= l1.get(i).x && l1.get(i).x < l2.get(j+1).x){
  38. //si la hauteur de l1 est inférieur a l2 on ajoute l2 et incrémente j et i (sans ajouter i)
  39. if(l1.get(i).y < l2.get(j).y){
  40. if(j-1 >= 0 &&l2.get(j-1).y > l2.get(j).y){
  41. //on créer un nouveau point
  42. result.add(new Point(l1.get(i).x, l2.get(j).y));
  43. //on ajoute juste l2.get(j)
  44. } else {
  45. result.add(l2.get(j));
  46. }
  47. j++;
  48. i++;
  49. }else if(l2.get(j).y !=0 && l1.get(i).y > l2.get(j).y){
  50. result.add(l2.get(j));
  51. result.add(l1.get(i));
  52. i++;
  53. }else if(j-1 >= 0){
  54. //si le point avant j est plus grand alors l2.get(j) vas vers le bas (ligne verticale)
  55. if(l2.get(j-1).y > l2.get(j).y){
  56. //ici on sais deja qu'on ajout l1.get(i)
  57. //on check si on crer un autre point
  58. if(l1.get(i-1).y > l2.get(j).y){
  59. result.add(new Point(l2.get(j).x, l1.get(i-1).y));
  60. }
  61. result.add(l1.get(i));
  62. i++;
  63. j++;
  64.  
  65. }else{
  66. System.out.println(" CAS NON TRAITE ! l1["+i+"] = " + l1.get(i) + " l2.get(j) = "+l2.get(j)+" et l2.get(j+1)= " + l2.get(j+1));
  67. }
  68. } else {
  69. //ici on ajoute l'un des deux, ils sont égaux
  70. if(l1.get(i).x == l2.get(j).x && l1.get(i).y == l2.get(j).y){
  71. result.add(l1.get(i));
  72. i++;
  73. //si un des deux sont égaux
  74. }else if(l1.get(i).x == l2.get(j).x || l1.get(i).y == l2.get(j).y){
  75. result.add(new Point(Math.min(l1.get(i).x,l2.get(j).x),Math.max(l1.get(i).y,l2.get(j).y)));
  76. i++;
  77. }
  78. }
  79. //si ce n'est pas entre les 2
  80. }else{
  81. if(i < l1_length && l1.get(i).x < l2.get(j).x){
  82. result.add(l1.get(i));
  83. i++;
  84. } else if(j + 1 < l2_length && i < l1_length && l1.get(i).x > l2.get(j+1).x){
  85. j++;
  86. } else if(j == l2_length-1 && i != l1_length-1){
  87. result.add(new Point(l2.get(j).x, l1.get(i).y));
  88. i++;
  89. //ici on ajoute l'un des deux, ils sont égaux
  90. } else if(l1.get(i).x == l2.get(j).x && l1.get(i).y == l2.get(j).y){
  91. result.add(l1.get(i));
  92. i++;
  93. //si un des deux sont égaux
  94. }else if(l1.get(i).x == l2.get(j).x || l1.get(i).y == l2.get(j).y){
  95. result.add(new Point(Math.min(l1.get(i).x,l2.get(j).x),Math.max(l1.get(i).y,l2.get(j).y)));
  96. i++;
  97. } else {
  98. break;
  99. }
  100. }
  101. }
  102.  
  103. return result;
  104. }
  105.  
  106. public List<Point> createRoofline(Im[] listImmeuble){
  107.  
  108. if (listImmeuble.length <= 1) {
  109.  
  110. List<Point> p = new ArrayList<Point>();
  111. p.add(new Point(listImmeuble[0].p1));
  112. p.add(new Point(listImmeuble[0].p2));
  113. return p;
  114. }
  115.  
  116. Im[] first = new Im[listImmeuble.length / 2];
  117. Im[] second = new Im[listImmeuble.length - first.length];
  118.  
  119. System.arraycopy(listImmeuble, 0, first, 0, first.length);
  120. System.arraycopy(listImmeuble, first.length, second, 0, second.length);
  121.  
  122. return fusion(createRoofline(first), createRoofline(second));
  123.  
  124. }
  125.  
  126. public static void main (String[] args){
  127. Toit2 t = new Toit2();
  128.  
  129. /*//test
  130. Point l3[] = {new Point(2,2), new Point(4,0), new Point(5,2), new Point(7,0), new Point(8,2), new Point(10,0)};
  131. Point l4[] = {new Point(1,3), new Point(11,0), new Point(12,1), new Point(13,0), new Point(14,1), new Point(15,0)};
  132.  
  133. Point l5[] = {new Point(1,2), new Point(8,0), new Point(9,2), new Point(10,0)};
  134. Point l6[] = {new Point(1,3), new Point(4,0), new Point(5,6), new Point(7,0)};
  135.  
  136. List<Point> p = t.fusion(t.l1, t.l2);
  137. System.out.println("WE HAVE : ");
  138. for(Point point : p){
  139. System.out.print("(" + point.x + "," + point.y+")");
  140. }
  141. System.out.println("\nWE WANT :");
  142. Point l[] = {new Point(1,10), new Point(2,12), new Point(7,6), new Point(8,0), new Point(9,4), new Point(10,8), new Point(12,2), new Point(14,0)};
  143.  
  144. //test
  145. Point ll[] = {new Point(1,3), new Point(11,0), new Point(12,1), new Point(13,0), new Point(14,1), new Point(15,0)};
  146. Point lll[] = {new Point(1,3), new Point(4,2), new Point(5,6), new Point(7,2), new Point(8,0), new Point(9,2), new Point(10,0)};
  147. for(Point point : l){
  148. System.out.print("(" + point.x + "," + point.y+")");
  149. }
  150.  
  151. System.out.println("\nListe triée : :");
  152.  
  153. Point list[] = {new Point(7,0), new Point(14,0), new Point(5,6), new Point(8,0), new Point(2,12), new Point(11,2), new Point(10,8), new Point(12,0), new Point(1,10), new Point(9,4)};
  154. List<Point> p2 = t.tri(list) ;
  155. for(Point point : p2){
  156. System.out.print("(" + point.x + "," + point.y+")");
  157. }*/
  158.  
  159. //notre liste d'immeuble
  160. Im[] listImmeuble = {new Im(1,10,5,0), new Im(5,6,8,0), new Im(10,8,12,0), new Im(2,12,7,0), new Im(9,4,11,0), new Im(11,2,14,0)};
  161. List<Point> p100 =t.createRoofline(listImmeuble);
  162.  
  163. for(Point point : p100){
  164. System.out.print("(" + point.x + "," + point.y+")");
  165. }
  166.  
  167. System.out.println("\nWE WANT :");
  168. Point l[] = {new Point(1,10), new Point(2,12), new Point(7,6), new Point(8,0), new Point(9,4), new Point(10,8), new Point(12,2), new Point(14,0)};
  169. for(Point point : l){
  170. System.out.print("(" + point.x + "," + point.y+")");
  171. }
  172. }
  173.  
  174.  
  175.  
  176.  
  177.  
  178. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement