public static Skyline merge(Skyline skyline1, Skyline skyline2){
int[] nCoords = new int[skyline1.coords.length + skyline2.coords.length];
int i = 0;
int j = 0;
for (int h = 0; h < nCoords.length; h += 2){
// normaal kwam hier "nCoords[h+1] = 0;" - oneven = hoogtes - niet nodig om uit te voeren -> initialisatie waarde is altijd 0
if (skyline1.coords[i] <= skyline2.coords[j]){
nCoords[h] = skyline1.coords[i];
if (!(i+2 >= skyline1.coords.length))
i += 2;
} else {
nCoords[h] = skyline2.coords[j];
if (!(j+2 >= skyline2.coords.length))
j += 2;
}
}
i = 0; j = 0;
for (int k = 1; k < nCoords.length-1; k += 2){
if (nCoords[i] <= skyline2.coords[j]){
nCoords[k] = skyline1.coords[i];
if (!(i+2 >= skyline1.coords.length))
i += 2;
} else {
nCoords[k] = skyline2.coords[j];
if (!(j+2 >= skyline2.coords.length))
j += 2;
}
}
return verwijderDubbels(nCoords); // maak een nieuwe skyline aan met deze coordinaten en geef ze terug
}
private static Skyline verwijderDubbels(int[] nCoords){
int h = 0;
for (int i = 0; i < nCoords.length-2; i++){
if (nCoords[i] == nCoords[i+2]){
nCoords[i+1] = -1;
nCoords[i+2] = -1;
h += 2;
}
}
int[] fCoords = new int[nCoords.length];//-h];
for (int j = 0; j < nCoords.length; j++){
if (nCoords[j] != -1){
fCoords[j] = nCoords[j];
}
}
return new Skyline(fCoords);
}