src/misc.cpp

changeset 502
f6534d591f80
parent 501
8f314f3f5054
child 504
6a1fa662bfc1
equal deleted inserted replaced
501:8f314f3f5054 502:f6534d591f80
322 322
323 bool RingFinder::findRingsRecursor (double r0, double r1) 323 bool RingFinder::findRingsRecursor (double r0, double r1)
324 { // Find the scale and number of a ring between r1 and r0. 324 { // Find the scale and number of a ring between r1 and r0.
325 double scale = r1 - r0; 325 double scale = r1 - r0;
326 double num = r0 / scale; 326 double num = r0 / scale;
327 print ("r0: %1, r1: %2, scale: %3, num: %4\n", r0, r1, scale, num);
328 327
329 // If the ring number is integral, we have found a fitting ring to r0 -> r1! 328 // If the ring number is integral, we have found a fitting ring to r0 -> r1!
330 if (isInteger (num)) 329 if (isInteger (num))
331 { SolutionComponent cmp; 330 { SolutionComponent cmp;
332 cmp.scale = scale; 331 cmp.scale = scale;
334 m_solution << cmp; 333 m_solution << cmp;
335 } 334 }
336 else 335 else
337 { // If not, find an intermediate <r> between the radii 336 { // If not, find an intermediate <r> between the radii
338 double r = ceil (num) * scale; 337 double r = ceil (num) * scale;
339 print ("\tr: %1\n", r);
340 338
341 // If r is the same as r0 or r1, we simply cannot find any rings between 339 // If r is the same as r0 or r1, we simply cannot find any rings between
342 // r0 and r1. Stop and return failure. 340 // r0 and r1. Stop and return failure.
343 if (isZero (r0 - r) || isZero (r1 - r)) 341 if (isZero (r0 - r) || isZero (r1 - r))
344 { print ("failure!\n");
345 return false; 342 return false;
346 }
347 343
348 // Split this ring into r0 -> r and r -> r1. Recurse to possibly find 344 // Split this ring into r0 -> r and r -> r1. Recurse to possibly find
349 // the rings for these. If either recurse fails, the entire algorithm 345 // the rings for these. If either recurse fails, the entire algorithm
350 // fails as well. 346 // fails as well.
351 if (!findRingsRecursor (r0, r) || !findRingsRecursor (r, r1)) 347 if (!findRingsRecursor (r0, r) || !findRingsRecursor (r, r1))

mercurial