359 lines
7.9 KiB
Java
359 lines
7.9 KiB
Java
package pl.wat.ms4ds.terenfunkcje;
|
|
|
|
|
|
import pl.wat.ms4ds.common.EGeoDirection;
|
|
|
|
public class Kwadrat {
|
|
|
|
public static final Kwadrat EMPTY_SQUARE = new Kwadrat(null, 0.0f, 0.0f, 0.0f, 0.0f, 200, 0,
|
|
new boolean[8], new boolean[8], new boolean[8]);
|
|
|
|
float stopienZabudowy;
|
|
float stopienZalesienia;
|
|
float stopienZawodnienia;
|
|
float stopienZabagnienia;
|
|
boolean jestDroga[];
|
|
boolean jestRow[];
|
|
boolean jestPrzeszkodaWodna[];
|
|
int roznicaWzniesien;
|
|
int wysokoscSrednia;
|
|
|
|
/**
|
|
* The height above the level of the sea.
|
|
*/
|
|
short elevation;
|
|
/**
|
|
* 0 - BARE_GROUND
|
|
* 1 - GRASS
|
|
* 2 - SWAMP
|
|
* 3 - WATER
|
|
* 4 - SCRUB, BUSHES
|
|
* 5 - BUILDINGS
|
|
* 6 - FOREST
|
|
*/
|
|
short terrainType;
|
|
/**
|
|
* Rodzaj drogi na danym kierunku.
|
|
* 0 - no road, 1 - small roads, 2 - minor roads, 3 - major roads
|
|
*/
|
|
byte[] roads;
|
|
/**
|
|
* Rodzaj przeszkody wodnej na danym kierunku.
|
|
* 0 - no watercourse, 1 - drain, ditch, 2 - canal, stream, 3 - river
|
|
*/
|
|
byte[] waterWays;
|
|
|
|
|
|
|
|
transient RightBigSquare bs;
|
|
|
|
public float getStopienZabudowy() {
|
|
return stopienZabudowy;
|
|
}
|
|
|
|
public float getStopienZalesienia() {
|
|
return stopienZalesienia;
|
|
}
|
|
|
|
public float getStopienZawodnienia() {
|
|
return stopienZawodnienia;
|
|
}
|
|
|
|
public float getStopienZabagnienia() {
|
|
return stopienZabagnienia;
|
|
}
|
|
|
|
public int getRoznicaWzniesien() {
|
|
return roznicaWzniesien;
|
|
}
|
|
|
|
public int getWysokoscSrednia() {
|
|
return wysokoscSrednia;
|
|
}
|
|
|
|
public boolean[] getJestDroga() {
|
|
return jestDroga;
|
|
}
|
|
|
|
public boolean jestOdcinekDrogi() {
|
|
for (int i = 0; i < 8; i++) {
|
|
if (jestDroga[i])
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public boolean getJestDroga(EGeoDirection naKierunku) {
|
|
if (naKierunku == EGeoDirection.UNDEFINED) {
|
|
return false;
|
|
}
|
|
return jestDroga[naKierunku.id];
|
|
}
|
|
|
|
public boolean[] getJestRow() {
|
|
return jestRow;
|
|
}
|
|
|
|
public boolean[] getJestPrzeszkodaWodna() {
|
|
return jestPrzeszkodaWodna;
|
|
}
|
|
|
|
public void setStopienZabudowy(float stopienZabudowy) {
|
|
this.stopienZabudowy = stopienZabudowy;
|
|
normalizujDanePokrycia();
|
|
// try {
|
|
// if (null != bs) {
|
|
// bs.updateFile(false);
|
|
// }
|
|
// } catch (IOException e) {
|
|
// }
|
|
}
|
|
|
|
public void setStopienZalesienia(float stopienZalesienia) {
|
|
this.stopienZalesienia = stopienZalesienia;
|
|
normalizujDanePokrycia();
|
|
// try {
|
|
// if (null != bs) {
|
|
// bs.updateFile(false);
|
|
// }
|
|
// } catch (IOException e) {
|
|
// }
|
|
}
|
|
|
|
public void setStopienZawodnienia(float stopienZawodnienia) {
|
|
this.stopienZawodnienia = stopienZawodnienia;
|
|
normalizujDanePokrycia();
|
|
// try {
|
|
// if (null != bs) {
|
|
// bs.updateFile(false);
|
|
// }
|
|
// } catch (IOException e) {
|
|
// }
|
|
}
|
|
|
|
public void setStopienZabagnienia(float stopienZabagnienia) {
|
|
this.stopienZabagnienia = stopienZabagnienia;
|
|
normalizujDanePokrycia();
|
|
// try {
|
|
// if (null != bs) {
|
|
// bs.updateFile(false);
|
|
// }
|
|
// } catch (IOException e) {
|
|
// }
|
|
}
|
|
|
|
public void normalizujDanePokrycia() {
|
|
float suma = stopienZalesienia + stopienZawodnienia + stopienZabudowy + stopienZabagnienia;
|
|
if (suma > 1.0f) {
|
|
stopienZalesienia /= suma;
|
|
stopienZawodnienia /= suma;
|
|
stopienZabudowy /= suma;
|
|
stopienZabagnienia = 1.0f - stopienZalesienia - stopienZawodnienia - stopienZabudowy;
|
|
}
|
|
}
|
|
|
|
public void setRoznicaWzniesien(int roznicaWzniesien) {
|
|
this.roznicaWzniesien = roznicaWzniesien;
|
|
// try {
|
|
// if (null != bs) {
|
|
// bs.updateFile(false);
|
|
// }
|
|
// } catch (IOException e) {
|
|
// }
|
|
}
|
|
|
|
public void setWysokoscSrednia(int wysokoscSrednia) {
|
|
this.wysokoscSrednia = wysokoscSrednia;
|
|
// try {
|
|
// if (null != bs) {
|
|
// bs.updateFile(false);
|
|
// }
|
|
// } catch (IOException e) {
|
|
// }
|
|
}
|
|
|
|
public void setJestDroga(boolean[] czyJestDroga) {
|
|
this.jestDroga = czyJestDroga;
|
|
// try {
|
|
// if (null != bs) {
|
|
// bs.updateFile(false);
|
|
// }
|
|
// } catch (IOException e) {
|
|
// }
|
|
}
|
|
|
|
public void setJestDroga(EGeoDirection naKierunku, boolean czyJest) {
|
|
if (naKierunku == EGeoDirection.UNDEFINED) {
|
|
return;
|
|
}
|
|
this.jestDroga[naKierunku.id] = czyJest;
|
|
// try {
|
|
// if (null != bs) {
|
|
// bs.updateFile(false);
|
|
// }
|
|
// } catch (IOException e) {
|
|
// }
|
|
}
|
|
|
|
public void setJestPrzeszkodaWodna(EGeoDirection naKierunku, boolean czyJest) {
|
|
if (naKierunku == EGeoDirection.UNDEFINED) {
|
|
return;
|
|
}
|
|
this.jestPrzeszkodaWodna[naKierunku.id] = czyJest;
|
|
// try {
|
|
// if (null != bs) {
|
|
// bs.updateFile(false);
|
|
// }
|
|
// } catch (IOException e) {
|
|
// }
|
|
}
|
|
|
|
public void setJestRow(EGeoDirection naKierunku, boolean czyJest) {
|
|
if (naKierunku == EGeoDirection.UNDEFINED) {
|
|
return;
|
|
}
|
|
this.jestRow[naKierunku.id] = czyJest;
|
|
// try {
|
|
// if (null != bs) {
|
|
// bs.updateFile(false);
|
|
// }
|
|
// } catch (IOException e) {
|
|
// }
|
|
}
|
|
|
|
public void setJestRow(boolean[] czyJestRow) {
|
|
this.jestRow = czyJestRow;
|
|
// try {
|
|
// if (null != bs) {
|
|
// bs.updateFile(false);
|
|
// }
|
|
// } catch (IOException e) {
|
|
// }
|
|
}
|
|
|
|
public void setJestPrzeszkodaWodna(boolean[] czyJestPrzeszkodaWodna) {
|
|
this.jestPrzeszkodaWodna = czyJestPrzeszkodaWodna;
|
|
// try {
|
|
// if (null != bs) {
|
|
// bs.updateFile(false);
|
|
// }
|
|
// } catch (IOException e) {
|
|
// }
|
|
}
|
|
|
|
public float getStopienPofaldowania() {
|
|
// TODO: dodac do normatywow w klasie Teren (parametr kalibracyjny)
|
|
float stopienPofaldowania = 0.0f;
|
|
if (this.roznicaWzniesien >= 50)
|
|
stopienPofaldowania = 1.0f;
|
|
else if (this.roznicaWzniesien >= 10)
|
|
stopienPofaldowania = 0.6f;
|
|
else if (this.roznicaWzniesien >= 5)
|
|
stopienPofaldowania = 0.4f;
|
|
else if (this.roznicaWzniesien >= 3)
|
|
stopienPofaldowania = 0.2f;
|
|
return stopienPofaldowania;
|
|
}
|
|
|
|
public Kwadrat() {
|
|
jestDroga = new boolean[8];
|
|
jestPrzeszkodaWodna = new boolean[8];
|
|
jestRow = new boolean[8];
|
|
}
|
|
|
|
public Kwadrat(RightBigSquare _bs, float _stopienZabudowy, float _stopienZalesienia, float _stopienZabagnienia, float _stopienZawodnienia,
|
|
int _wysokoscSrednia, int _roznicaWzniesien, boolean _czyJestDroga[], boolean _czyJestRow[], boolean _czyJestPrzeszkodaWodna[]){
|
|
bs = _bs;
|
|
stopienZabudowy = _stopienZabudowy;
|
|
stopienZalesienia = _stopienZalesienia;
|
|
stopienZabagnienia = _stopienZabagnienia;
|
|
stopienZawodnienia = _stopienZawodnienia;
|
|
wysokoscSrednia = _wysokoscSrednia;
|
|
roznicaWzniesien = _roznicaWzniesien;
|
|
jestDroga = new boolean[8];
|
|
jestRow = new boolean[8];
|
|
jestPrzeszkodaWodna = new boolean[8];
|
|
for (int i = 0; i < _czyJestDroga.length; i++) {
|
|
jestDroga[i]=_czyJestDroga[i];
|
|
}
|
|
for (int i = 0; i < jestRow.length; i++) {
|
|
jestRow[i]=_czyJestRow[i];
|
|
}
|
|
for (int i = 0; i < _czyJestPrzeszkodaWodna.length; i++) {
|
|
jestPrzeszkodaWodna[i]=_czyJestPrzeszkodaWodna[i];
|
|
}
|
|
}
|
|
|
|
public String toString() {
|
|
float f = this.stopienZabudowy * 255.0f;
|
|
int hex = (int)f;
|
|
String s = String.format("%02X", hex);
|
|
String linia = s;
|
|
linia += " ";
|
|
|
|
f = this.stopienZalesienia * 255.0f;
|
|
hex = (int)f;
|
|
s = String.format("%02X", hex);
|
|
linia += s;
|
|
linia += " ";
|
|
|
|
f = this.stopienZabagnienia * 255.0f;
|
|
hex = (int)f;
|
|
s = String.format("%02X", hex);
|
|
linia += s;
|
|
linia += " ";
|
|
|
|
f = this.stopienZawodnienia * 255.0f;
|
|
hex = (int)f;
|
|
s = String.format("%02X", hex);
|
|
linia += s;
|
|
linia += " ";
|
|
|
|
s = String.format("%4d", this.wysokoscSrednia);
|
|
linia += s;
|
|
linia += " ";
|
|
|
|
s = String.format("%4d", this.roznicaWzniesien);
|
|
linia += s;
|
|
linia += " ";
|
|
|
|
int bity = 0;
|
|
int bit_1 = 1;
|
|
for (int i = 0; i < this.jestDroga.length; i++) {
|
|
if (this.jestDroga[i]) // jest odcinek drogi na tym kierunku
|
|
bity += bit_1;
|
|
|
|
bit_1 = bit_1 << 1;
|
|
}
|
|
s = String.format("%02X", bity);
|
|
linia += s;
|
|
linia += " ";
|
|
|
|
bity = 0;
|
|
bit_1 = 1;
|
|
for (int i = 0; i < this.jestPrzeszkodaWodna.length; i++) {
|
|
if (this.jestPrzeszkodaWodna[i]) // jest przeszkod na tym kierunku
|
|
bity += bit_1;
|
|
|
|
bit_1 = bit_1 << 1;
|
|
}
|
|
s = String.format("%02X", bity);
|
|
linia += s;
|
|
linia += " ";
|
|
|
|
bity = 0;
|
|
bit_1 = 1;
|
|
for (int i = 0; i < this.jestRow.length; i++) {
|
|
if (this.jestRow[i]) // jest row na tym kierunku
|
|
bity += bit_1;
|
|
|
|
bit_1 = bit_1 << 1;
|
|
}
|
|
s = String.format("%02X", bity);
|
|
linia += s;
|
|
return linia;
|
|
}
|
|
|
|
|
|
}
|