package de.edotzlaff.detection.detektion; import android.os.Build; import androidx.annotation.RequiresApi; import de.edotzlaff.detection.detektion.berechnung.Endpunkt; import de.edotzlaff.detection.detektion.berechnung.EndpunktVerbindung; import de.edotzlaff.detection.detektion.berechnung.EpizentrumRechnung; import java.util.ArrayList; import java.util.HashMap; import java.util.Objects; public class Erdbeben { //ToDO anpassen an Szenario umso mehr umso wahrscheinlich ein Ergebnis, oder Abbruchbedingung mit do while public static final Integer SCHLEIFENDURCHLAUFTE = 5000; private Epizentrum epizentrum; private EpizentrumRechnung epizentrumRechnung; private HashMap nutzerDaten; public Erdbeben() { nutzerDaten = new HashMap<>(); epizentrumRechnung = new EpizentrumRechnung(); epizentrum = new Epizentrum(); } public int addDetektionssignal(Detektionssignal detektionssignal) { nutzerDaten.put(detektionssignal.getDeviceId(), detektionssignal); return nutzerDaten.size(); } public void addDetektionssignalList(ArrayList detektionssignale) { for (int i = 0; i< detektionssignale.size(); i++) { nutzerDaten.put(detektionssignale.get(i).getDeviceId(),detektionssignale.get(i)); } } @RequiresApi(api = Build.VERSION_CODES.O) public Epizentrum ermittleEpizentrum() { ArrayList rechenListe = new ArrayList<>(); nutzerDaten.forEach((key, value) -> rechenListe.add(value)); //Initialisierung der Rechung - First Element mit delta r + alle möglichen EndpunktKombinationen (einfach) ArrayList berechnungsEndpunkte = epizentrumRechnung.initEndpunkte(rechenListe); ArrayList endpunktKonbinationen = epizentrumRechnung.ermittleEndpunktKonbinationen(berechnungsEndpunkte); //ToDo Vernünftiger Endpunkt überlegen bzw. bis wann abgebrochen wird -> Umzug in Berechnungs for (int i = 0; i <= SCHLEIFENDURCHLAUFTE; i++) { if (epizentrumRechnung.genuegendSchnittpunktevorhanden(endpunktKonbinationen)) { epizentrum = epizentrumRechnung.ueberpruefeObEpizentrum(endpunktKonbinationen); //ToDo set EnstehungsZeitpunkt -> (Bezugszeit, Koord, Koord, v;) if (!Objects.isNull(epizentrum)) { System.out.println("Epizentrum ermittelt"); epizentrum.setEntstehungsZeitpunkt( epizentrumRechnung.berechneEntstehungsZeitpunktLongLatt( nutzerDaten.get(berechnungsEndpunkte.get(0).getNutzer()), epizentrum.getKoordinaten())); return epizentrum; } } epizentrumRechnung.erhoheRadius(berechnungsEndpunkte); } return null; } }