public void Invoke(int y) { var span = _target.GetPixelRowSpan(y); // Calculate or retrieve the latitude calculation component of geostationary projection var latitudeCalculations = CalculateGeostationaryLatitude(y + _yOffset); // Convert image x,y to Mercator projection angle var targetWidth = _registration.Width * 2; var projectionY = ProjectionAngleConverter.FromY(y + _yOffset, _registration.Height); for (var x = 0; x < span.Length; x++) { var projectionX = ProjectionAngleConverter.FromX(x + _xOffset, targetWidth); // Convert latitude/longitude to geostationary scanning angle GeostationaryProjection.ToScanningAngle(latitudeCalculations, projectionX, _registration.Definition, out var scanningX, out var scanningY); // Map pixel from satellite image back to target image span[x] = GetTargetColour(scanningX, scanningY, projectionY, projectionX); } }
public void FromX() { Angle.FromRadians(ProjectionAngleConverter.FromX(0, 200)).Degrees.Should().BeApproximately(-180, Precision); Angle.FromRadians(ProjectionAngleConverter.FromX(200, 200)).Degrees.Should().BeApproximately(180, Precision); Angle.FromRadians(ProjectionAngleConverter.FromX(100, 200)).Degrees.Should().BeApproximately(0, Precision); }