Circle circa; Circle circb; Circle circc; boolean mouseDown = false; void setup(){ size(300,300); smooth(); circa = new Circle(75,150,75); circb = new Circle(225,150,75); circc = new Circle(150,75,50); solve(circa,circb,circc); } void draw(){ background(120); if(mouseDown){ if(mouseX > 150){ circb.cenx++; } else { circb.cenx--; } solve(circa,circb,circc); } circa.drawme(); circb.drawme(); circc.drawme(); } void mousePressed(){ mouseDown = true; } void mouseReleased(){ mouseDown = false; } void solve(Circle a, Circle b, Circle c){ float d = sqrt((a.cenx-b.cenx)*(a.cenx-b.cenx)+(a.ceny-b.ceny)*(a.ceny-b.ceny)); println(d); float arad = a.rad+c.rad; float brad = b.rad+c.rad; float nx = (d*d - arad*arad + brad*brad)/(2*d); println(a.cenx+nx); float ny = sqrt((4*d*d*brad*brad - (d*d - arad*arad + brad*brad)*(d*d - arad*arad + brad*brad))/(4*d*d)); println(ny); c.cenx = a.cenx+nx; c.ceny = a.ceny-ny; }