private static double CalculateIISSpeedInKmh(SpaceStationData spaceStation, double distance) { double time = (spaceStation.TimestampSecondRequest - spaceStation.TimestampFirstRequest) / 3600; double speed = (distance / 1000) / time; return(speed); }
private static double CalculateDistanceFromHaversine(double eRadius, SpaceStationData spaceStation) { double haversine = HaversineFormula(spaceStation); double distance = eRadius * haversine; return(distance); }
public CalculatedSpaceStation GetSpeedAndTotalDistance(SpaceStationData spaceStation) { double eRadius = _context.CalculationDatas.Select(d => d.EarthRadius).First(); CalculatedSpaceStation result = CalculationFormulas.CalculateVelocityAndDistance(eRadius, spaceStation); return(result); }
public SpaceStationData GetCombinedSpaceStationData(SpaceStationData firstRequestObject, SpaceStationData secondRequestObject) { if (!firstRequestObject.MessageFirstRequest.Equals(ConnectionStatus.success.ToString()) || !secondRequestObject.MessageFirstRequest.Equals(ConnectionStatus.success.ToString())) { return(null); } SpaceStationData combinedSpaceStation = SpaceStationDataOperations.CombineSpaceStation(firstRequestObject, secondRequestObject); return(combinedSpaceStation); }
private static SpaceStationData ConvertDegreesToRadians(SpaceStationData spaceStation) { SpaceStationData spaceStationInRadians = new SpaceStationData() { LatitudeFirstRequest = spaceStation.LatitudeFirstRequest * Math.PI / 180, LongitudeFirstRequest = spaceStation.LongitudeFirstRequest * Math.PI / 180, LatitudeSecondRequest = spaceStation.LatitudeSecondRequest * Math.PI / 180, LongitudeSecondRequest = spaceStation.LongitudeSecondRequest * Math.PI / 180 }; return(spaceStationInRadians); }
private static double HaversineFormula(SpaceStationData spaceStation) { SpaceStationData radianValues = ConvertDegreesToRadians(spaceStation); double twoPointsChordLength = Math.Pow(Math.Sin((radianValues.LatitudeSecondRequest - radianValues.LatitudeFirstRequest) / 2), 2) + Math.Cos(radianValues.LatitudeFirstRequest) * Math.Cos(radianValues.LatitudeFirstRequest) * Math.Pow(Math.Sin((radianValues.LongitudeSecondRequest - radianValues.LongitudeFirstRequest) / 2), 2); double angularDistance = 2 * Math.Atan2(Math.Pow(twoPointsChordLength, 0.5), Math.Pow(1 - twoPointsChordLength, 0.5)); return(angularDistance); }
public static SpaceStationData CombineSpaceStation(SpaceStationData firstRequestObject, SpaceStationData secondRequestObject) { SpaceStationData combinedSpaceStationDatas = new SpaceStationData() { LatitudeFirstRequest = firstRequestObject.spaceStationPosition.LatitudeJson, LatitudeSecondRequest = secondRequestObject.spaceStationPosition.LatitudeJson, LongitudeFirstRequest = firstRequestObject.spaceStationPosition.LongitudeJson, LongitudeSecondRequest = secondRequestObject.spaceStationPosition.LongitudeJson, TimestampFirstRequest = firstRequestObject.TimestampFirstRequest, TimestampSecondRequest = secondRequestObject.TimestampFirstRequest }; return(combinedSpaceStationDatas); }
public async Task <SpaceStationData> GetNecessaryData(string url) { SpaceStationData firstReqDeserializedObject = await DeserializeSpaceStationObject(_client, url); await Task.Delay(1001); SpaceStationData secondReqDeserializedObject = await DeserializeSpaceStationObject(_client, url); SpaceStationData combinedSpaceStation = _unitOfWork .CalculationDataRepository .GetCombinedSpaceStationData(firstReqDeserializedObject, secondReqDeserializedObject); return(combinedSpaceStation); }
public async Task <IHttpActionResult> SpaceTravel() { try { SpaceStationData SpaceStationDatas = await new SpaceStationHandler().GetNecessaryData("http://api.open-notify.org/iss-now.json"); if (SpaceStationDatas == null) { return(BadRequest("We are sorry, the ISS service from which you are trying get response is not avaiable at the moment!")); } CalculatedSpaceStation finalData = _unitOfWork.CalculationDataRepository.GetSpeedAndTotalDistance(SpaceStationDatas); return(Ok(finalData)); } catch (Exception ex) { return(InternalServerError(ex)); } }
private async Task <SpaceStationData> DeserializeSpaceStationObject(HttpClient client, string url) { SpaceStationData deserializedObject = await new GetDeserializedJsonData <SpaceStationData>(_client, url).DeserializedJsonData(); return(deserializedObject); }
public static CalculatedSpaceStation CalculateVelocityAndDistance(double eRadius, SpaceStationData spaceSation) { double distance = CalculateDistance(spaceSation, eRadius); double velocity = CalculateIISSpeedInKmh(spaceSation, distance); return(new CalculatedSpaceStation() { Distance = distance, Velocity = velocity }); }
private static double CalculateDistance(SpaceStationData spaceStation, double eRadius) { double distance = CalculateDistanceFromHaversine(eRadius, spaceStation); return(distance); }