@@ -25,25 +25,23 @@ fn fwd(op: &Op, _ctx: &dyn Context, operands: &mut dyn CoordinateSet) -> usize {
25
25
let length = operands. len ( ) ;
26
26
27
27
for i in 0 ..length {
28
- let mut coord = operands. get_coord ( i) ;
29
- let lam = coord[ 0 ] - lon_0;
30
- let phi = coord[ 1 ] ;
28
+ let ( mut lam, phi) = operands. xy ( i) ;
29
+ lam -= lon_0;
31
30
let mut rho = 0. ;
32
31
33
32
// Close to one of the poles?
34
33
if ( phi. abs ( ) - FRAC_PI_2 ) . abs ( ) < EPS10 {
35
34
if phi * n <= 0. {
36
- coord = Coor4D :: nan ( ) ;
37
- operands. set_coord ( i, & coord) ;
35
+ operands. set_coord ( i, & Coor4D :: nan ( ) ) ;
38
36
continue ;
39
37
}
40
38
} else {
41
39
rho = c * crate :: math:: ancillary:: ts ( phi. sin_cos ( ) , e) . powf ( n) ;
42
40
}
43
41
let sc = ( lam * n) . sin_cos ( ) ;
44
- coord [ 0 ] = a * k_0 * rho * sc. 0 + x_0;
45
- coord [ 1 ] = a * k_0 * ( rho0 - rho * sc. 1 ) + y_0;
46
- operands. set_coord ( i, & coord ) ;
42
+ let x = a * k_0 * rho * sc. 0 + x_0;
43
+ let y = a * k_0 * ( rho0 - rho * sc. 1 ) + y_0;
44
+ operands. set_xy ( i, x , y ) ;
47
45
successes += 1 ;
48
46
}
49
47
successes
@@ -64,20 +62,19 @@ fn inv(op: &Op, _ctx: &dyn Context, operands: &mut dyn CoordinateSet) -> usize {
64
62
return 0 ;
65
63
} ;
66
64
let mut successes = 0_usize ;
67
- let length = operands. len ( ) ;
68
65
69
- for i in 0 ..length {
70
- let mut coord = operands. get_coord ( i) ;
71
- let mut x = ( coord [ 0 ] - x_0) / ( a * k_0) ;
72
- let mut y = rho0 - ( coord [ 1 ] - y_0) / ( a * k_0) ;
66
+ for i in 0 ..operands . len ( ) {
67
+ let ( mut x , mut y ) = operands. xy ( i) ;
68
+ x = ( x - x_0) / ( a * k_0) ;
69
+ y = rho0 - ( y - y_0) / ( a * k_0) ;
73
70
74
71
let mut rho = x. hypot ( y) ;
75
72
76
- // On one of the poles
73
+ // On one of the poles?
77
74
if rho == 0. {
78
- coord [ 0 ] = 0. ;
79
- coord [ 1 ] = FRAC_PI_2 . copysign ( n) ;
80
- operands. set_coord ( i, & coord ) ;
75
+ let lon = 0. ;
76
+ let lat = FRAC_PI_2 . copysign ( n) ;
77
+ operands. set_xy ( i, lon , lat ) ;
81
78
successes += 1 ;
82
79
continue ;
83
80
}
@@ -90,15 +87,13 @@ fn inv(op: &Op, _ctx: &dyn Context, operands: &mut dyn CoordinateSet) -> usize {
90
87
}
91
88
92
89
let ts0 = ( rho / c) . powf ( 1. / n) ;
93
- let phi = crate :: math:: ancillary:: pj_phi2 ( ts0, e) ;
94
- if phi. is_infinite ( ) || phi. is_nan ( ) {
95
- coord = Coor4D :: nan ( ) ;
96
- operands. set_coord ( i, & coord) ;
90
+ let lat = crate :: math:: ancillary:: pj_phi2 ( ts0, e) ;
91
+ if lat. is_infinite ( ) || lat. is_nan ( ) {
92
+ operands. set_coord ( i, & Coor4D :: nan ( ) ) ;
97
93
continue ;
98
94
}
99
- coord[ 0 ] = x. atan2 ( y) / n + lon_0;
100
- coord[ 1 ] = phi;
101
- operands. set_coord ( i, & coord) ;
95
+ let lon = x. atan2 ( y) / n + lon_0;
96
+ operands. set_xy ( i, lon, lat) ;
102
97
successes += 1 ;
103
98
}
104
99
successes
0 commit comments