Code Duplication    Length = 26-33 lines in 2 locations

src/Location/Bearing/BearingEllipsoidal.php 1 location

@@ 168-193 (lines=26) @@
165
166
        $iterations = 0;
167
168
        do {
169
            $sinλ   = sin($λ);
170
            $cosλ   = cos($λ);
171
            $sinSqσ = ($cosU2 * $sinλ) * ($cosU2 * $sinλ)
172
                      + ($cosU1 * $sinU2 - $sinU1 * $cosU2 * $cosλ) * ($cosU1 * $sinU2 - $sinU1 * $cosU2 * $cosλ);
173
            $sinσ   = sqrt($sinSqσ);
174
175
            if ($sinσ == 0) {
176
                return 0;
177
            }
178
179
            $cosσ   = $sinU1 * $sinU2 + $cosU1 * $cosU2 * $cosλ;
180
            $σ      = atan2($sinσ, $cosσ);
181
            $sinα   = $cosU1 * $cosU2 * $sinλ / $sinσ;
182
            $cosSqα = 1 - $sinα * $sinα;
183
184
            if ($cosSqα == 0.0) {
185
                $cos2σM = 0;
186
            } else {
187
                $cos2σM = $cosσ - 2 * $sinU1 * $sinU2 / $cosSqα;
188
            }
189
190
            $C  = $f / 16 * $cosSqα * (4 + $f * (4 - 3 * $cosSqα));
191
            $λp = $λ;
192
            $λ  = $L + (1 - $C) * $f * $sinα * ($σ + $C * $sinσ * ($cos2σM + $C * $cosσ * (- 1 + 2 * $cos2σM * $cos2σM)));
193
        } while (abs($λ - $λp) > 1e-12 && ++ $iterations < 200);
194
195
        if ($iterations >= 200) {
196
            throw new NotConvergingException('Inverse Vincenty Formula did not converge');

src/Location/Distance/Vincenty.php 1 location

@@ 69-101 (lines=33) @@
66
        $cosU1 = cos($U1);
67
        $cosU2 = cos($U2);
68
69
        do {
70
            $sinLambda = sin($lambda);
71
            $cosLambda = cos($lambda);
72
73
            $sinSigma = sqrt(
74
                ($cosU2 * $sinLambda) * ($cosU2 * $sinLambda) +
75
                ($cosU1 * $sinU2 - $sinU1 * $cosU2 * $cosLambda) * ($cosU1 * $sinU2 - $sinU1 * $cosU2 * $cosLambda)
76
            );
77
78
            if ($sinSigma == 0) {
79
                return 0.0;
80
            }
81
82
            $cosSigma = $sinU1 * $sinU2 + $cosU1 * $cosU2 * $cosLambda;
83
84
            $sigma = atan2($sinSigma, $cosSigma);
85
86
            $sinAlpha = $cosU1 * $cosU2 * $sinLambda / $sinSigma;
87
88
            $cosSqAlpha = 1 - $sinAlpha * $sinAlpha;
89
90
            if ($cosSqAlpha == 0) {
91
                $cos2SigmaM = 0;
92
            } else {
93
                $cos2SigmaM = $cosSigma - 2 * $sinU1 * $sinU2 / $cosSqAlpha;
94
            }
95
96
            $C = $f / 16 * $cosSqAlpha * (4 + $f * (4 - 3 * $cosSqAlpha));
97
98
            $lambdaP = $lambda;
99
100
            $lambda = $L + (1 - $C) * $f * $sinAlpha * ($sigma + $C * $sinSigma * ($cos2SigmaM + $C * $cosSigma * (- 1 + 2 * $cos2SigmaM * $cos2SigmaM)));
101
        } while (abs($lambda - $lambdaP) > 1e-12 && -- $iterationLimit > 0);
102
103
        if ($iterationLimit == 0) {
104
            throw new NotConvergingException();