public PositionModel GetLocation(List <SatelliteModel> satellites) { if (satellites.Count != 3) { throw new SatellitesRequiredException("Se deben ingresar las distancias a los tres satélites"); } if (satellites.Any(x => x.Distance == null || x.Distance == 0)) { throw new ErrorException("Es necesario enviar una distancia válida."); } TrilaterationModel satelliteKenobi = GetTrilaterationModel("kenobi", -500, -200, satellites); TrilaterationModel satelliteSkywalker = GetTrilaterationModel("skywalker", 100, -100, satellites); TrilaterationModel satelliteSato = GetTrilaterationModel("sato", 500, 100, satellites); return(getPosition(satelliteKenobi, satelliteSkywalker, satelliteSato)); }
private PositionModel getPosition(TrilaterationModel satelliteKenobi, TrilaterationModel satelliteSkywalker, TrilaterationModel satelliteSato) { TrilaterationModel result; try { result = Trilateration.getTrilateration(satelliteKenobi, satelliteSkywalker, satelliteSato); } catch (Exception) { throw new ErrorException("Ocurrió un error al obtener localización de emisor."); } return(new PositionModel() { X = Math.Round(result.X, 2), Y = Math.Round(result.Y, 2) }); }
private TrilaterationModel GetTrilaterationModel(string satelliteName, double x, double y, List <SatelliteModel> satellites) { TrilaterationModel satelliteKenobi = new TrilaterationModel(0, 0, 0); var satellite = satellites.Find(x => x.Name == satelliteName); if (satellite == null) { throw new ErrorException("No se encontró el satélites, los satélites validos son (kenobi, skywalker, sato)"); } try { satelliteKenobi = new TrilaterationModel(x, y, Decimal.ToDouble((Decimal)satellite.Distance)); } catch (Exception) { throw new ErrorException("Ocurrió un error, por favor revise los datos enviados."); } return(satelliteKenobi); }