Projektteil 2
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Erdbeben.java 3.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package de.edotzlaff.detection.detektion;
  2. import android.os.Build;
  3. import android.util.Log;
  4. import androidx.annotation.RequiresApi;
  5. import de.edotzlaff.detection.detektion.berechnung.Endpunkt;
  6. import de.edotzlaff.detection.detektion.berechnung.EndpunktVerbindung;
  7. import de.edotzlaff.detection.detektion.berechnung.EpizentrumRechnung;
  8. import java.util.ArrayList;
  9. import java.util.HashMap;
  10. import java.util.Objects;
  11. public class Erdbeben {
  12. //ToDO anpassen an Szenario umso mehr umso wahrscheinlich ein Ergebnis, oder Abbruchbedingung mit do while
  13. public static final Integer SCHLEIFENDURCHLAUFTE = 8000;
  14. private static final String TAG = "ERDBEBEN";
  15. private Epizentrum epizentrum;
  16. private EpizentrumRechnung epizentrumRechnung;
  17. private HashMap<String, Detektionssignal> nutzerDaten;
  18. private Detektionssignal erstesDetektionssignal;
  19. public Erdbeben() {
  20. nutzerDaten = new HashMap<>();
  21. epizentrumRechnung = new EpizentrumRechnung();
  22. epizentrum = new Epizentrum();
  23. }
  24. public int addDetektionssignal(Detektionssignal detektionssignal) {
  25. nutzerDaten.put(detektionssignal.getDeviceId(), detektionssignal);
  26. return nutzerDaten.size();
  27. }
  28. public void addDetektionssignalList(ArrayList<Detektionssignal> detektionssignale)
  29. {
  30. for (int i = 0; i< detektionssignale.size(); i++)
  31. {
  32. nutzerDaten.put(detektionssignale.get(i).getDeviceId()+"i",detektionssignale.get(i));
  33. }
  34. Log.i(TAG, "addDetektionssignalList: " + nutzerDaten.size());
  35. }
  36. @RequiresApi(api = Build.VERSION_CODES.O)
  37. public Epizentrum ermittleEpizentrum() {
  38. ArrayList<Detektionssignal> rechenListe = new ArrayList<>();
  39. nutzerDaten.forEach((key, value) -> rechenListe.add(value));
  40. //Initialisierung der Rechung - First Element mit delta r + alle möglichen EndpunktKombinationen (einfach)
  41. erstesDetektionssignal = epizentrumRechnung.ermittleErstesDetektionssignal(rechenListe);
  42. ArrayList<Endpunkt> berechnungsEndpunkte = epizentrumRechnung.initEndpunkte(rechenListe, erstesDetektionssignal);
  43. ArrayList<EndpunktVerbindung> endpunktKonbinationen = epizentrumRechnung.ermittleEndpunktKonbinationen(berechnungsEndpunkte);
  44. //ToDo Vernünftiger Endpunkt überlegen bzw. bis wann abgebrochen wird -> Umzug in Berechnungs
  45. for (int i = 0; i <= SCHLEIFENDURCHLAUFTE; i++) {
  46. if (epizentrumRechnung.genuegendSchnittpunktevorhanden(endpunktKonbinationen)) {
  47. epizentrum = epizentrumRechnung.ueberpruefeObEpizentrum(endpunktKonbinationen);
  48. //ToDo set EnstehungsZeitpunkt -> (Bezugszeit, Koord, Koord, v;)
  49. if (!Objects.isNull(epizentrum)) {
  50. epizentrum.setEntstehungsZeitpunkt(epizentrumRechnung.berechneEntstehungsZeitpunktLongLatt(erstesDetektionssignal, epizentrum.getKoordinaten()));
  51. return epizentrum;
  52. }
  53. }
  54. epizentrumRechnung.erhoheRadius(berechnungsEndpunkte);
  55. }
  56. return null;
  57. }
  58. }