@@ -69,12 +69,9 @@ fn fwd(op: &Op, _ctx: &dyn Context, operands: &mut dyn CoordinateSet) -> usize {
69
69
let ( sc, cc) = gamma_c. sin_cos ( ) ;
70
70
71
71
let mut successes = 0_usize ;
72
- let length = operands. len ( ) ;
73
72
74
- for i in 0 ..length {
75
- let mut coord = operands. get_coord ( i) ;
76
- let lon = coord[ 0 ] ;
77
- let lat = coord[ 1 ] ;
73
+ for i in 0 ..operands. len ( ) {
74
+ let ( lon, lat) = operands. xy ( i) ;
78
75
let slat = lat. sin ( ) ;
79
76
80
77
let t = ( FRAC_PI_4 - lat / 2.0 ) . tan ( ) / ( ( 1.0 - e * slat) / ( 1.0 + e * slat) ) . powf ( e / 2.0 ) ;
@@ -90,8 +87,9 @@ fn fwd(op: &Op, _ctx: &dyn Context, operands: &mut dyn CoordinateSet) -> usize {
90
87
// Variant A
91
88
if !variant {
92
89
let u = A * ( S * c0 + V * s0) . atan2 ( cblon) / B ;
93
- coord[ 0 ] = v * cc + u * sc + FE ;
94
- coord[ 1 ] = u * cc - v * sc + FN ;
90
+ let x = v * cc + u * sc + FE ;
91
+ let y = u * cc - v * sc + FN ;
92
+ operands. set_xy ( i, x, y) ;
95
93
successes += 1 ;
96
94
continue ;
97
95
}
@@ -105,18 +103,18 @@ fn fwd(op: &Op, _ctx: &dyn Context, operands: &mut dyn CoordinateSet) -> usize {
105
103
} else {
106
104
A * ( S * c0 + V * s0) . atan2 ( cblon) / B - uc. copysign ( latc) * ( lonc - lon) . signum ( )
107
105
} ;
108
- coord[ 0 ] = v * cc + u * sc + Ec ;
109
- coord[ 1 ] = u * cc - v * sc + Nc ;
106
+ let x = v * cc + u * sc + Ec ;
107
+ let y = u * cc - v * sc + Nc ;
108
+ operands. set_xy ( i, x, y) ;
110
109
successes += 1 ;
111
110
continue ;
112
111
}
113
112
114
113
// The general case
115
114
let u = A * ( S * c0 + V * s0) . atan2 ( cblon) / B - uc. copysign ( latc) ;
116
- coord[ 0 ] = v * cc + u * sc + Ec ;
117
- coord[ 1 ] = u * cc - v * sc + Nc ;
118
-
119
- operands. set_coord ( i, & coord) ;
115
+ let x = v * cc + u * sc + Ec ;
116
+ let y = u * cc - v * sc + Nc ;
117
+ operands. set_xy ( i, x, y) ;
120
118
successes += 1 ;
121
119
}
122
120
@@ -179,11 +177,8 @@ fn inv(op: &Op, _ctx: &dyn Context, operands: &mut dyn CoordinateSet) -> usize {
179
177
let offset = if variant { uc. copysign ( latc) } else { 0.0 } ;
180
178
181
179
let mut successes = 0_usize ;
182
- let length = operands. len ( ) ;
183
- for i in 0 ..length {
184
- let mut coord = operands. get_coord ( i) ;
185
- let E = coord[ 0 ] ;
186
- let N = coord[ 1 ] ;
180
+ for i in 0 ..operands. len ( ) {
181
+ let ( E , N ) = operands. xy ( i) ;
187
182
188
183
let v = ( E - FE ) * cc - ( N - FN ) * sc;
189
184
let u = ( N - FN ) * cc + ( E - FE ) * sc + offset;
@@ -215,10 +210,7 @@ fn inv(op: &Op, _ctx: &dyn Context, operands: &mut dyn CoordinateSet) -> usize {
215
210
216
211
let lat = chi + es * ( f[ 0 ] * s[ 0 ] + f[ 1 ] * s[ 1 ] + f[ 2 ] * s[ 2 ] + f[ 3 ] * s[ 3 ] ) ;
217
212
let lon = lambda_0 - ( S * c0 - V * s0) . atan2 ( ( B * u / A ) . cos ( ) ) / B ;
218
-
219
- coord[ 0 ] = lon;
220
- coord[ 1 ] = lat;
221
- operands. set_coord ( i, & coord) ;
213
+ operands. set_xy ( i, lon, lat) ;
222
214
successes += 1 ;
223
215
}
224
216
0 commit comments