void explore( Plot &pl, Mobius a, Mobius b, Circle Ca, Circle Cb, Circle CA, Circle CB, int maxLevel){ Mobius A = a.inverse(); Mobius B = b.inverse(); Mobius gens[4] = {a, b, A, B}; int inverse[4] = {2, 3, 0, 1}; int level = 0; Circle circs[4] = {Ca, Cb, CA, CB}; for(int i=0; i<4; ++i){ pl.circle(circs[i].centre, circs[i].radius, colScale(level, maxLevel)); //pl.show(); recursiveExplore(pl, gens[i], i, gens, circs, inverse, level, maxLevel); } }
void recursiveExplore( Plot &pl, Mobius map, int j, Mobius gens[4], Circle circs[4], int inverse[4], int level, int maxLevel) { Circle image; for (int i=0; i<4; ++i){ if(i != inverse[j]){ image = map.circleImage(circs[i]); pl.circle(image.centre, image.radius, colScale(level, maxLevel)); //pl.show(); //cv::waitKey(0); if( level < maxLevel ){ recursiveExplore(pl, map.after(gens[i]), i, gens, circs, inverse, level+1, maxLevel); } } } }