package skyline; import java.util.TreeSet; /** * Klasse die het algoritme implementeert om een optimale stad te bouwen. * Het is NIET toegelaten bestaande methodes en/of signaturen te wijzigen, maar * het staat je vrij naar behoefte methodes en velden toe te voegen. * @author Timbermont Bouke **/ public class SkylineSolver{ private BuildingList list; private double o,l; private TreeSet set; /** * Creeert een nieuwe instantie van SkylineSolver met gegeven * lijst van Buildings. * @param list de Buildings die gebruikt moeten worden. **/ public SkylineSolver(BuildingList list) { this.list=list; set=new TreeSet(); set.add(listToSkyline(list)); } /** * Geeft een lijst van optimale Skylines terug. * @param o Vrij in te stellen parameter O uit de opgave * @param l Vrij in te stellen parameter L uit de opgave * @param x Maximaal aantal verschuivingen **/ TreeSet getOptimalSkylines(double o, double l, int x) { this.o=o; this.l=l; return set; } /*De volgende methode neemt een skyline en berekend ervan de verhouding *die aangeeft in hoeverre die skyline ideaal is. */ private double verhouding(Skyline s){ double teller=s.getSurface()-Math.min((double)s.getSurface(),o); double len=s.coords[s.coords.length-2]-s.coords[0]; double noemer=1+len-Math.min(len,l); return teller/noemer; } public static Skyline listToSkyline(BuildingList list){ if(list.size()>1){ BuildingList[] halflist=new BuildingList[2]; halflist[0]=new BuildingList(); halflist[1]=new BuildingList(); int i=0; for(Building building:list){ halflist[i%2].addBuilding(building); i++; } return Skyline.merge(listToSkyline(halflist[0]),listToSkyline(halflist[1])); }else{ return new Skyline(list.getBuilding(0)); } } }