public void OverlappingBoth()
        {
            // Overlapped by both second and third
            var first  = ToDefinition(-150, 10);
            var second = ToDefinition(140, -50);
            var third  = ToDefinition(0, 60);

            var calculator = new ProjectionOverlapCalculator();

            calculator.Initialise(new List <SatelliteDefinition> {
                first, second, third
            });

            VerifyRangeEquivalency(
                calculator.GetNonOverlappingRange(first),
                new Range(Angle.FromDegrees(-100), Angle.FromDegrees(5)));

            VerifyRangeEquivalency(
                calculator.GetNonOverlappingRange(second),
                new Range(Angle.FromDegrees(140), Angle.FromDegrees(260)));

            VerifyRangeEquivalency(
                calculator.GetNonOverlappingRange(third),
                new Range(Angle.FromDegrees(5), Angle.FromDegrees(60)));
        }
        public void NonOverlapping()
        {
            var goes16         = ToDefinition(-156.2995, 6.2995);
            var nonOverlapping = ToDefinition(60, 120);

            var calculator = new ProjectionOverlapCalculator();

            calculator.Initialise(new List <SatelliteDefinition> {
                goes16, nonOverlapping
            });

            VerifyRangeEquivalency(calculator.GetNonOverlappingRange(goes16), goes16.LongitudeRange);
            VerifyRangeEquivalency(calculator.GetNonOverlappingRange(nonOverlapping), nonOverlapping.LongitudeRange);
        }
        public void OverlappingSingleNoWrap()
        {
            var first  = ToDefinition(-100, 0);
            var second = ToDefinition(-50, 150);

            var calculator = new ProjectionOverlapCalculator();

            calculator.Initialise(new List <SatelliteDefinition> {
                first, second
            });

            VerifyRangeEquivalency(
                calculator.GetNonOverlappingRange(first),
                new Range(Angle.FromDegrees(-100), Angle.FromDegrees(-25)));

            VerifyRangeEquivalency(
                calculator.GetNonOverlappingRange(second),
                new Range(Angle.FromDegrees(-25), Angle.FromDegrees(150)));
        }
        public void Goes17Himawari8()
        {
            // Simplified for ease of validation
            var goes17    = ToDefinition(140, -50, "GOES-17");
            var himawari8 = ToDefinition(60, -140, "Himawari-8");

            var calculator = new ProjectionOverlapCalculator();

            calculator.Initialise(new List <SatelliteDefinition> {
                goes17, himawari8
            });

            VerifyRangeEquivalency(
                calculator.GetNonOverlappingRange(goes17),
                new Range(Angle.FromDegrees(180).Radians, Angle.FromDegrees(-50).Radians));
        }