rotate trajectory coordinates

This commit is contained in:
ngfrolov 2023-05-25 15:26:06 +05:00
parent 28cbd75705
commit 3d76ae3155
Signed by: ng.frolov
GPG Key ID: E99907A0357B29A7
2 changed files with 15 additions and 15 deletions

View File

@ -6,17 +6,17 @@
public class TrajectoryVisualizationDto
{
/// <summary>
/// Координаты по оси X, в сторону севера (м)
/// Координаты по оси X, в сторону востока (м)
/// </summary>
public double X { get; set; }
/// <summary>
/// Координаты по оси Y, в сторону востока (м)
/// Координаты по оси Y, в высоту (м)
/// </summary>
public double Y { get; set; }
/// <summary>
/// Координаты по оси Z, глубина (м)
/// Координаты по оси Z, в сторону юга (м)
/// </summary>
public double Z { get; set; }
}

View File

@ -14,7 +14,7 @@ namespace AsbCloudInfrastructure.Services.Trajectory
{
private readonly IPlannedTrajectoryRepository plannedRepository;
private readonly IActualTrajectoryRepository factualRepository;
public TrajectoryVisualizationService(IPlannedTrajectoryRepository plannedRepository, IActualTrajectoryRepository factualRepository)
{
this.plannedRepository = plannedRepository;
@ -40,6 +40,8 @@ namespace AsbCloudInfrastructure.Services.Trajectory
return result;
}
record struct Location(double North, double East, double Depth);
/// <summary>
/// Формирует список координат для визуализации трактории 3D
/// </summary>
@ -51,7 +53,7 @@ namespace AsbCloudInfrastructure.Services.Trajectory
if (geoCoordinatesLength < 2)
return new TrajectoryVisualizationDto[0];
var cartesianCoordinates = new TrajectoryVisualizationDto[geoCoordinatesLength];
var cartesianCoordinates = new Location[geoCoordinatesLength];
cartesianCoordinates[0] = new();
var geoCoordinatesArray = geoCoordinates.OrderBy(c => c.WellboreDepth).ToArray();
@ -61,22 +63,20 @@ namespace AsbCloudInfrastructure.Services.Trajectory
var deltaWellLength = geoCoordinatesArray[i].WellboreDepth - intervalGeoParams.WellboreDepth;
var projectionLengthToXYSurface = deltaWellLength * Math.Sin(intervalGeoParams.ZenithAngle * Math.PI / 180);
var dz = deltaWellLength * Math.Cos(intervalGeoParams.ZenithAngle * Math.PI / 180);
var dx = projectionLengthToXYSurface * Math.Sin(intervalGeoParams.AzimuthGeo * Math.PI / 180);
var dy = projectionLengthToXYSurface * Math.Cos(intervalGeoParams.AzimuthGeo * Math.PI / 180);
var dDepth = deltaWellLength * Math.Cos(intervalGeoParams.ZenithAngle * Math.PI / 180);
var dNorth = projectionLengthToXYSurface * Math.Sin(intervalGeoParams.AzimuthGeo * Math.PI / 180);
var dEast = projectionLengthToXYSurface * Math.Cos(intervalGeoParams.AzimuthGeo * Math.PI / 180);
var preCoordinates = cartesianCoordinates[i - 1];
var coordinates = new TrajectoryVisualizationDto
{
Z = preCoordinates.Z + dz,
X = preCoordinates.X + dx,
Y = preCoordinates.Y + dy,
};
var coordinates = new Location(
preCoordinates.North + dNorth,
preCoordinates.East + dEast,
preCoordinates.Depth + dDepth);
cartesianCoordinates[i] = coordinates;
}
return cartesianCoordinates;
return cartesianCoordinates.Select(location => new TrajectoryVisualizationDto { X = location.East, Y = - location.Depth, Z = - location.North});
}
}