public TrackMapDto RotateRight(TrackMapDto trackMapDto) { TrackGeometryDto trackGeometry = trackMapDto.TrackGeometry; TrackMapDto swapped = SwapAxis(trackMapDto); if (trackGeometry.IsSwappedAxis) { swapped.TrackGeometry.XCoef = -trackMapDto.TrackGeometry.XCoef; } else { swapped.TrackGeometry.YCoef = -trackMapDto.TrackGeometry.YCoef; } bool reverseXAxis = Math.Sign(trackMapDto.TrackGeometry.XCoef) != Math.Sign(swapped.TrackGeometry.YCoef); bool reverseYAxis = Math.Sign(trackMapDto.TrackGeometry.YCoef) != Math.Sign(swapped.TrackGeometry.XCoef); SwapGeometries(swapped, reverseXAxis, reverseYAxis); return(swapped); }
public TrackGeometryDto BuildTrackGeometryDto(TimedTelemetrySnapshots timedTelemetrySnapshots) { List <TimedTelemetrySnapshot> filteredPoints = Filter(timedTelemetrySnapshots); TrackGeometryDto trackGeometryDto = new TrackGeometryDto { ExporterVersion = ExporterVersion, FullMapGeometry = GetGeometry(filteredPoints, true), Sector1Geometry = GetSectorGeometry(filteredPoints, x => x.PlayerData.Timing.CurrentSector == 1), Sector2Geometry = GetSectorGeometry(filteredPoints, x => x.PlayerData.Timing.CurrentSector == 2), Sector3Geometry = GetSectorGeometry(filteredPoints, x => x.PlayerData.Timing.CurrentSector == 3), StartLineGeometry = ExtractFinishLine(filteredPoints), LeftOffset = filteredPoints.Min(x => x.PlayerData.WorldPosition.X.InMeters) - TrackBounds, TopOffset = filteredPoints.Min(x => x.PlayerData.WorldPosition.Z.InMeters) - TrackBounds, }; trackGeometryDto.Width = filteredPoints.Max(x => x.PlayerData.WorldPosition.X.InMeters) + TrackBounds - trackGeometryDto.LeftOffset; trackGeometryDto.Height = filteredPoints.Max(x => x.PlayerData.WorldPosition.Z.InMeters) + TrackBounds - trackGeometryDto.TopOffset; return(trackGeometryDto); }