var brd = JXG.JSXGraph.initBoard('box',{boundingbox:[-2,2,2,-2]}); solveQ2 =function(x1,x2,x3,off){ var a, b, c, d; a =0.5; b =-(x1+x2+x3); c = x1*x1+x2*x2+x3*x3-0.5*(x1+x2+x3)*(x1+x2+x3)-off; d = b*b-4*a*c; if(Math.abs(d)<0.00000001) d =0.0; return[(-b+Math.sqrt(d))/(2.0*a),(-b-Math.sqrt(d))/(2.0*a)]; }
a = brd.create('segment',[[0,0],[2,0]],{visible:false}); p1 = brd.create('glider',[1.3,0,a],{name:'Drag me'}); b0 =-0.5;
otherCirc =function(circs,level){ var c, fx,fy,fr; if(level<=0)return; fx =function(){ var b,x,i; b =[]; x =[]; for(i=0;i<4;i++){ b[i]= circs[i].curvature(); x[i]= circs[i].midpoint.X(); }
b[4]=2*(b[0]+b[1]+b[2])-b[3]; x[4]=(2*(b[0]*x[0]+b[1]*x[1]+b[2]*x[2])-b[3]*x[3])/b[4]; return x[4]; } fy =function(){ var b,y,i; b =[]; y =[]; for(i=0;i<4;i++){ b[i]= circs[i].curvature(); y[i]= circs[i].midpoint.Y(); }
b[4]=2*(b[0]+b[1]+b[2])-b[3]; y[4]=(2*(b[0]*y[0]+b[1]*y[1]+b[2]*y[2])-b[3]*y[3])/b[4]; return y[4]; } fr =function(){ var b,i; b =[]; for(i=0;i<4;i++){ b[i]= circs[i].curvature(); } b[4]=2*(b[0]+b[1]+b[2])-b[3]; if(isNaN(b[4])){ return1000.0; }else{ return1/b[4]; } } c = brd.create('circle',[[fx,fy],fr],{strokeWidth:1,name:'', fillColor:JXG.hsv2rgb(50*level,0.8,0.8),highlightFillColor:JXG.hsv2rgb(50*level,0.5,0.8),fillOpacity:0.5,highlightFillOpacity:0.5}); c.curvature=function(){return1/this.radius;};