@@ -218,10 +218,7 @@ function arrayLCM(A) {
218
218
}
219
219
220
220
proto . calcXnums = function ( xlen ) {
221
- var maxDist = Math . abs (
222
- this . getXat ( 0 , 0 ) -
223
- this . getXat ( xlen - 1 , 0 )
224
- ) ;
221
+
225
222
var nums = [ ] ;
226
223
for ( var i = 1 ; i < xlen ; i ++ ) {
227
224
var a = this . getXat ( i - 1 , 0 ) ;
@@ -230,21 +227,30 @@ proto.calcXnums = function(xlen) {
230
227
if ( b !== a &&
231
228
a !== undefined && a !== null &&
232
229
b !== undefined && b !== null ) {
233
- nums [ i - 1 ] = Math . round (
234
- maxDist / Math . abs ( b - a )
235
- ) ;
230
+ nums [ i - 1 ] = Math . abs ( b - a ) ;
236
231
} else {
232
+ nums [ i - 1 ] = 0 ;
233
+ }
234
+ }
235
+
236
+ var totalDist = 0 ;
237
+ for ( var i = 1 ; i < xlen ; i ++ ) {
238
+ totalDist += nums [ i - 1 ] ;
239
+ }
240
+
241
+ for ( var i = 1 ; i < xlen ; i ++ ) {
242
+ if ( nums [ i - 1 ] === 0 ) {
237
243
nums [ i - 1 ] = 1 ;
244
+ } else {
245
+ nums [ i - 1 ] = Math . round ( totalDist ) ;
238
246
}
239
247
}
248
+
240
249
return nums ;
241
250
} ;
242
251
243
252
proto . calcYnums = function ( ylen ) {
244
- var maxDist = Math . abs (
245
- this . getYat ( 0 , 0 ) -
246
- this . getYat ( 0 , ylen - 1 )
247
- ) ;
253
+
248
254
var nums = [ ] ;
249
255
for ( var i = 1 ; i < ylen ; i ++ ) {
250
256
var a = this . getYat ( 0 , i - 1 ) ;
@@ -253,13 +259,25 @@ proto.calcYnums = function(ylen) {
253
259
if ( b !== a &&
254
260
a !== undefined && a !== null &&
255
261
b !== undefined && b !== null ) {
256
- nums [ i - 1 ] = Math . round (
257
- maxDist / Math . abs ( b - a )
258
- ) ;
262
+ nums [ i - 1 ] = Math . abs ( b - a ) ;
259
263
} else {
264
+ nums [ i - 1 ] = 0 ;
265
+ }
266
+ }
267
+
268
+ var totalDist = 0 ;
269
+ for ( var i = 1 ; i < ylen ; i ++ ) {
270
+ totalDist += nums [ i - 1 ] ;
271
+ }
272
+
273
+ for ( var i = 1 ; i < ylen ; i ++ ) {
274
+ if ( nums [ i - 1 ] === 0 ) {
260
275
nums [ i - 1 ] = 1 ;
276
+ } else {
277
+ nums [ i - 1 ] = Math . round ( totalDist ) ;
261
278
}
262
279
}
280
+
263
281
return nums ;
264
282
} ;
265
283
@@ -269,21 +287,16 @@ var MIN_RESOLUTION = highlyComposites[9];
269
287
var MAX_RESOLUTION = highlyComposites [ 13 ] ;
270
288
271
289
proto . estimateScale = function ( resSrc , axis ) {
272
- // console.log("axis=", axis);
273
- // console.log("resSrc=", resSrc);
274
-
275
290
var nums = ( axis === 0 ) ?
276
291
this . calcXnums ( resSrc ) :
277
292
this . calcYnums ( resSrc ) ;
278
293
279
- // console.log("nums=", nums);
280
-
281
294
var resDst = 1 + arrayLCM ( nums ) ;
282
295
283
- // console.log("BEFORE: resDst=", resDst);
284
296
while ( resDst < MIN_RESOLUTION ) {
285
297
resDst *= 2 ;
286
298
}
299
+
287
300
while ( resDst > MAX_RESOLUTION ) {
288
301
resDst -- ;
289
302
resDst /= smallestDivisor ( resDst ) ;
@@ -294,12 +307,8 @@ proto.estimateScale = function(resSrc, axis) {
294
307
resDst = MAX_RESOLUTION ; // option 2: use max resolution
295
308
}
296
309
}
297
- // console.log("AFTER: resDst=", resDst);
298
310
299
311
var scale = Math . round ( resDst / resSrc ) ;
300
-
301
- // console.log("scale=", resDst, "/", resSrc, "=", scale);
302
-
303
312
return ( scale > 1 ) ? scale : 1 ;
304
313
} ;
305
314
0 commit comments