KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I have a recursive function for moving some circles on a canvas. Overed circle is enlarged (zoom in) and all the other circles is pushed away. Pushed circles push other circles and so on until zooming is complete. I get an error "Maximum call stack size exceeded", and I understand the problem, but I just don't know how to solve it... I found three possible solutions for solving recursion problems in general: Change recursion to iteration Use memoization Use SetTimeout But I think that I can use none of them: I can not implement iteration because of unknown count of operations needed I don't understand memoization well enough, but I think it does not fit either (or maybe I'm wrong and someone could told me differently?) I can not use SetTimeout, because it should be blocking function calls at this particular animation. How do I fix this problem? // Pushes circles aside when some other circle leans on these circles (on zoom in) var moveCirclesAside = function(circle1, circleToSkip, groupOfMoves) { var count = circles.length; for (var i = 0; i < count; i++) { // Skip the same circle if (i == circle1.i) { continue; } // Also skip the circle which was intended not to move any further if (circleToSkip != null && i == circleToSkip.i) { continue; } // Get second circle var circle2 = circles[i]; // Calculate a distance between two circles var dx = circle2.x - circle1.x; var dy = circle2.y - circle1.y; var distance = Math.sqrt((dx * dx) + (dy * dy)); // If circles already collided need to do some moving... if (distance <= circle1.r + circle2.r + OD.config.circleSpacing) { // Get collision angles var a
Tags (comma-separated)
Save Edits
Cancel