/* Version 0.82rc4 */
/*
Copyright 2008-2010
Matthias Ehmann,
Michael Gerhaeuser,
Carsten Miller,
Bianca Valentin,
Alfred Wassermann,
Peter Wilfahrt
This file is part of JSXGraph.
JSXGraph is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
JSXGraph is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with JSXGraph. If not, see .
*/
var JXG={};(function(){var a,b;JXG.countDrawings=0;JXG.countTime=0;JXG.require=function(c){};JXG.rendererFiles=[];JXG.rendererFiles.svg="SVGRenderer";JXG.rendererFiles.vml="VMLRenderer";JXG.baseFiles=null;JXG.requirePath="";for(a=0;a0){return this[0].length}else{return 0}};JXG.Math.Matrix.prototype.exchangeRows=function(c,b){var a=this[c];this[c]=this[b];this[b]=a};JXG.DimensionMismatchException=function(a){if((typeof a!=undefined)&&(a!=null)){this.message=a}else{this.message=null}};JXG.DimensionMismatchException.prototype.what=function(){var a="Matrix has incorrect dimensions";if(this.message!=null){return a+": "+this.message+"."}else{return a+"."}};JXG.SingularMatrixException=function(a){if((typeof a!=undefined)&&(a!=null)){this.message=a}else{this.message=null}};JXG.SingularMatrixException.prototype.what=function(){var a="Matrix is singular";if(this.message!=null){return a+": "+this.message+"."}else{return a+"."}};JXG.Math.matVecMult=function(g,e){var a=g.length,h=e.length,d=[],c,f,b;if(h==3){for(c=0;c0)?f[0].length:0;for(d=0;de||c<0){return 0}if(c==0||c==e){return 1}a=1;for(d=0;d0){return Math.exp(c*Math.log(Math.abs(d)))}else{return NaN}}};JXG.Math.normalize=function(c){var a=2*c[3],d=c[4]/(a),e,b;c[5]=d;c[6]=-c[1]/a;c[7]=-c[2]/a;if(d==Infinity||isNaN(d)){e=Math.sqrt(c[1]*c[1]+c[2]*c[2]);c[0]/=e;c[1]/=e;c[2]/=e;c[3]=0;c[4]=1}else{if(Math.abs(d)>=1){c[0]=(c[6]*c[6]+c[7]*c[7]-d*d)/(2*d);c[1]=-c[6]/d;c[2]=-c[7]/d;c[3]=1/(2*d);c[4]=1}else{b=(d<=0)?(-1):(1);c[0]=b*(c[6]*c[6]+c[7]*c[7]-d*d)*0.5;c[1]=-b*c[6];c[2]=-b*c[7];c[3]=b/2;c[4]=b*d}}return c};JXG.Math.Numerics={};JXG.Math.Numerics.INT_TRAPEZ=1;JXG.Math.Numerics.INT_SIMPSON=2;JXG.Math.Numerics.INT_MILNE=3;JXG.Math.Numerics.number_of_nodes=28;JXG.Math.Numerics.integration_type=JXG.INT_MILNE;JXG.Math.Numerics.backwardSolve=function(g,d){var c=d,a,h,f,e;if(g.m){a=g.m();h=g.n()}else{a=g.length;h=(g.length>0)?g[0].length:0}for(f=a-1;f>=0;f--){for(e=h-1;e>f;e--){c[f]-=g[f][e]*c[e]}c[f]/=g[f][f]}return c};JXG.Math.Numerics.Gauss=function(a,l){var q=JXG.Math.eps,c,f,e,d,g,m,h;if(a.n){c=a.n()}else{c=(a.length>0)?a[0].length:0}g=new JXG.Math.Vector();for(f=0;fe;f--){if(Math.abs(a[f][e])>JXG.Math.eps){if(Math.abs(a[e][e])q){q=Math.abs(c[g][f]);a=g}}if(q<=JXG.Math.eps){return false}if(a>f){for(e=0;eg){g=a}m+=a;if(aw);return[b,d]};JXG.Math.Numerics.NewtonCotes=function(d,g){var b=0,a=(d[1]-d[0])/this.number_of_nodes,h,e,c;switch(this.integration_type){case JXG.INT_TRAPEZ:b=(g(d[0])+g(d[1]))*0.5;h=d[0];for(e=0;e0){throw new Error("JSXGraph: INT_SIMPSON requires JXG.Math.Numerics.number_of_nodes dividable by 2.")}c=this.number_of_nodes/2;b=g(d[0])+g(d[1]);h=d[0];for(e=0;e0){throw new Error("JSXGraph: Error in INT_MILNE: JXG.Math.Numerics.number_of_nodes must be a multiple of 4")}c=this.number_of_nodes*0.25;b=7*(g(d[0])+g(d[1]));h=d[0];for(e=0;e=0;e--){q[e]=(g[e]-(r[e+1]*q[e+1]))/f[e]}for(e=a-3;e>=0;e--){q[e+1]=q[e]}q[0]=0;q[a-1]=0;return q};JXG.Math.Numerics.splineEval=function(f,z,v,B){var g=z.length,k=1,h=false,A,q,m,w,u,s,r,e;if(g!=v.length){throw new Error("JSXGraph: Error in JXG.Math.Numerics.splineEval: Defining vector dimensions do not match.")}if(JXG.isArray(f)){k=f.length;h=true}else{f=[f]}A=new Array();for(q=0;qz[g-1])){return"NaN"}m;for(m=1;m=0;d--){e+="("+a[d].toPrecision(c)+")";if(d>1){e+="*"+b+""+d+" + "}else{if(d==1){e+="*"+b+" + "}}}return e};JXG.Math.Numerics.lagrangePolynomial=function(d){var a=[];var c="";var b=function(q,e){var g,f,m,n,r,h=0,l=0;m=d.length;if(!e){for(g=0;g=0;u--){F=(F*E+a[u])}return F};m.getTerm=function(){return d};return m};JXG.Math.Numerics.bezier=function(b){var a=0;return[function(d,c){var g=Math.floor(d)*3,f=d%1,e=1-f;if(!c){a=Math.floor(b.length/3)}if(d<0){return b[0].X()}if(d>=a){return b[b.length-1].X()}if(isNaN(d)){return NaN}return e*e*(e*b[g].X()+3*f*b[g+1].X())+(3*e*b[g+2].X()+f*b[g+3].X())*f*f},function(d,c){var g=Math.floor(d)*3,f=d%1,e=1-f;if(!c){a=Math.floor(b.length/3)}if(d<0){return b[0].Y()}if(d>=a){return b[b.length-1].Y()}if(isNaN(d)){return NaN}return e*e*(e*b[g].Y()+3*f*b[g+1].Y())+(3*e*b[g+2].Y()+f*b[g+3].Y())*f*f},0,function(){return Math.floor(b.length/3)}]};JXG.Math.Numerics.D=function(c,d){var b=0.00001,a=1/(b*2);if(arguments.length==1||(arguments.length>1&&typeof arguments[1]=="undefined")){return function(e,f){return(c(e+b,f)-c(e-b,f))*a}}else{return function(e,f){return(c.apply(d,[e+b,f])-c.apply(d,[e-b,f]))*a}}};JXG.Math.Numerics.I=function(a,b){return JXG.Math.Numerics.NewtonCotes(a,b)};JXG.Math.Numerics.newton=function(e,a,g){var b=0,c=0.000001,d=e.apply(g,[a]),k;while(b<50&&Math.abs(d)>c){k=this.D(e,g)(a);if(Math.abs(k)>c){a-=d/k}else{a+=(Math.random()*0.2-1)}d=e.apply(g,[a]);b++}return a};JXG.Math.Numerics.root=function(b,a,c){return this.newton(b,a,c)};JXG.Math.Numerics.riemann=function(l,e,m,c,g){var d,v,k,u,h,s,q,b,a,r;d=[];v=[];h=0;s=c;e=Math.floor(e);d[h]=s;v[h]=0;if(e>0){u=(g-c)/e;a=u*0.01;for(k=0;kq){q=r}}}}}}h++;d[h]=s;v[h]=q;h++;s+=u;if(m=="trapezodial"){q=l(s)}d[h]=s;v[h]=q;h++;d[h]=s;v[h]=0}}return[d,v]};JXG.Math.Numerics.riemannsum=function(h,d,l,c,e){var k,g,s,r,m,b,a,q;k=0;r=c;d=Math.floor(d);if(d>0){s=(e-c)/d;a=s*0.01;for(g=0;gm){m=q}}}}}}}k+=s*m;r+=s}}return k};JXG.Math.Numerics.Butcher=function(){this.s=0;this.A=[];this.b=[];this.c=[]};JXG.Math.Numerics.predefinedButcher={};JXG.Math.Numerics.predefinedButcher.RK4={s:4,A:[[0,0,0,0],[0.5,0,0,0],[0,0.5,0,0],[0,0,1,0]],b:[1/6,1/3,1/3,1/6],c:[0,0.5,0.5,1]};JXG.Math.Numerics.predefinedButcher.Heun={s:2,A:[[0,0],[1,0]],b:[0.5,0.5],c:[0,1]};JXG.Math.Numerics.predefinedButcher.Euler={s:1,A:[[0]],b:[1],c:[0]};JXG.Math.Numerics.rungeKutta=function(c,G,m,d,F){var n=[],g=[],E=(m[1]-m[0])/d,u=m[0],H,D,C,A,z,B=G.length,v=c.s,b=1000,a=d/b,q=[],w=0;for(H=0;H0){return this.sum(a)/a.length}else{return 0}};JXG.Math.Statistics.median=function(b){var c,a;if(b.length>0){c=b.clone();c.sort(function(e,d){return e-d});a=c.length;if(a%2==1){return c[parseInt(a*0.5)]}else{return(c[a*0.5-1]+c[a*0.5])*0.5}}else{return 0}};JXG.Math.Statistics.variance=function(c){var b,e,d,a;if(c.length>1){b=this.mean(c);e=0;for(d=0,a=c.length;d0){return this.mean(this.multiply(a,b))}else{return 0}};JXG.Math.Statistics.max=function(b){var d,c,a;if(b.length==0){return NaN}d=b[0];for(c=1,a=b.length;cd)?(b[c]):d}return d};JXG.Math.Statistics.min=function(b){var d,c,a;if(b.length==0){return NaN}d=b[0];for(c=1,a=b.length;c0){e=f[l].generatePolynomial();for(b=0;b1){y=1}else{if(y<-1){y=-1}}r=Math.acos(y);if((Math.sin(r)*d)<0){a=6.283185307179586-r}else{a=r}return a};JXG.Math.Geometry.angleBisector=function(f,e,b,k){var c=f.coords.usrCoords,n=e.coords.usrCoords,g=b.coords.usrCoords,q=c[1]-n[1],m=c[2]-n[2],l=Math.sqrt(q*q+m*m),a,r,h;if(typeof k=="undefined"){k=f.board}q/=l;m/=l;a=Math.acos(q);if(m<0){a*=-1}if(a<0){a+=2*Math.PI}q=g[1]-n[1];m=g[2]-n[2];l=Math.sqrt(q*q+m*m);q/=l;m/=l;r=Math.acos(q);if(m<0){r*=-1}if(r<0){r+=2*Math.PI}h=(a+r)*0.5;if(a>r){h+=Math.PI}q=Math.cos(h)+n[1];m=Math.sin(h)+n[2];return new JXG.Coords(JXG.COORDS_BY_USER,[q,m],k)};JXG.Math.Geometry.reflection=function(n,k,c){var e=k.coords.usrCoords,q=n.point1.coords.usrCoords,d=n.point2.coords.usrCoords,b,h,a,f,l,g,m;if(typeof c=="undefined"){c=k.board}l=d[1]-q[1];g=d[2]-q[2];b=e[1]-q[1];h=e[2]-q[2];m=(l*h-g*b)/(l*l+g*g);a=e[1]+2*m*g;f=e[2]-2*m*l;return new JXG.Coords(JXG.COORDS_BY_USER,[a,f],c)};JXG.Math.Geometry.rotation=function(a,n,f,g){var k=n.coords.usrCoords,b=a.coords.usrCoords,e,m,h,q,d,l;if(typeof g=="undefined"){g=n.board}e=k[1]-b[1];m=k[2]-b[2];h=Math.cos(f);q=Math.sin(f);d=e*h-m*q+b[1];l=e*q+m*h+b[2];return new JXG.Coords(JXG.COORDS_BY_USER,[d,l],g)};JXG.Math.Geometry.perpendicular=function(r,n,f){var e=r.point1.coords.usrCoords,d=r.point2.coords.usrCoords,b=n.coords.usrCoords,l,k,h,q,g,c,a,m;if(typeof f=="undefined"){f=n.board}if(n==r.point1){l=e[1]+d[2]-e[2];k=e[2]-d[1]+e[1];h=true}else{if(n==r.point2){l=d[1]+e[2]-d[2];k=d[2]-e[1]+d[1];h=false}else{if(((Math.abs(e[1]-d[1])>JXG.Math.eps)&&(Math.abs(b[2]-(e[2]-d[2])*(b[1]-e[1])/(e[1]-d[1])-e[2])JXG.Math.eps&&(Math.abs(b[0])0){a=k.midpoint.Dist(A.point1);L=k.midpoint.Dist(A.point2);J=((a*a)+(E*E)-(L*L))/(2*E);C=(a*a)-(J*J);C=(C<0)?0:C;H=Math.sqrt(C);F=k.Radius();n=Math.sqrt((F*F)-H*H);D=K[1]-N[1];B=K[2]-N[2];g=e[1]+(H/E)*B;f=e[2]-(H/E)*D;a=(K[1]*B)-(K[2]*D);L=(g*D)+(f*B);G=(B*B)+(D*D);if(Math.abs(G)r){return[0]}else{if(w=a&&Math.abs(b[3])=a){return this.meetLineCircle(d,b,c,e)}else{return this.meetCircleCircle(d,b,c,e)}}}};JXG.Math.Geometry.meetLineLine=function(b,a,c,e){var d=JXG.Math.crossProduct(b,a);if(Math.abs(d[0])>JXG.Math.eps){d[1]/=d[0];d[2]/=d[0];d[0]=1}return new JXG.Coords(JXG.COORDS_BY_USER,d,e)};JXG.Math.Geometry.meetLineCircle=function(l,e,r,s){var x,w,v,u,m,h,g,f,q,y;if(e[4]=0){q=Math.sqrt(q);y=[(-g+q)/(2*h),(-g-q)/(2*h)];return((r==0)?new JXG.Coords(JXG.COORDS_BY_USER,[-y[0]*(-m[1])-u*m[0],-y[0]*m[0]-u*m[1]],s):new JXG.Coords(JXG.COORDS_BY_USER,[-y[1]*(-m[1])-u*m[0],-y[1]*m[0]-u*m[1]],s))}else{return new JXG.Coords(JXG.COORDS_BY_USER,[NaN,NaN],s)}};JXG.Math.Geometry.meetCircleCircle=function(c,a,b,d){var e;if(c[4]JXG.Math.eps&&n<10){E=D(s);C=-B(r);A=l(s);z=-k(r);g=E*z-C*A;s-=(z*y-C*x)/g;r-=(E*x-A*y)/g;y=w.X(s)-v.X(r);x=w.Y(s)-v.Y(r);u=y*y+x*x;n++}arguments.callee.t1memo=s;arguments.callee.t2memo=r;if(Math.abs(s)0.1&&Math.abs(k-g.X(f))>0.1&&Math.abs(h-g.Y(f))>0.1)){q=20;s=(g.maxX()-g.minX())/q;d=g.minX();for(e=0;e0.1&&Math.abs(k-g.X(f))>0.1&&Math.abs(h-g.Y(f))>0.1){break}d+=s}}v=f;arguments.callee.t2memo=v}if(Math.abs(b(v))>JXG.Math.eps){n=0}else{n=1}return(new JXG.Coords(JXG.COORDS_BY_USER,[n,g.X(v),g.Y(v)],l))};JXG.Math.Geometry.projectPointToCircle=function(k,a,c){var f=k.coords.distance(JXG.COORDS_BY_USER,a.midpoint.coords),b=k.coords.usrCoords,d=a.midpoint.coords.usrCoords,h,g,e;if(typeof c=="undefined"){c=k.board}if(Math.abs(f)n.maxX()){m=n.minX()+m-n.maxX()}A=new JXG.Coords(JXG.COORDS_BY_USER,[n.X(m),n.Y(m)],e)}else{if(n.curveType=="plot"){z=l;for(s=0;s=JXG.Math.eps){d=(w*v+b*a)/f;q=Math.sqrt(w*w+b*b-d*(w*v+b*a))}else{d=0;q=Math.sqrt(w*w+b*b)}if(d>=0&&d<=1&&q"){b=this.createPrim("path",a.id);this.appendChildPrim(b,a.layer);this.appendNodesToElement(a,"path")}else{if(c=="triangleup"||c=="a"||c=="^"){b=this.createPrim("path",a.id);this.appendChildPrim(b,a.layer);this.appendNodesToElement(a,"path")}else{if(c=="triangledown"||c=="v"){b=this.createPrim("path",a.id);this.appendChildPrim(b,a.layer);this.appendNodesToElement(a,"path")}else{if(c=="triangleleft"||c=="<"){b=this.createPrim("path",a.id);this.appendChildPrim(b,a.layer);this.appendNodesToElement(a,"path")}else{if(c=="triangleright"||c==">"){b=this.createPrim("path",a.id);this.appendChildPrim(b,a.layer);this.appendNodesToElement(a,"path")}}}}}}}}}this.setObjectStrokeWidth(a,a.visProp.strokeWidth);this.setObjectStrokeColor(a,a.visProp.strokeColor,a.visProp.strokeOpacity);this.setObjectFillColor(a,a.visProp.fillColor,a.visProp.fillOpacity);this.updatePoint(a)};JXG.AbstractRenderer.prototype.updatePoint=function(b){var a=b.visProp.size,c=b.visProp.face;if(isNaN(b.coords.scrCoords[2])||isNaN(b.coords.scrCoords[1])){return}if(this.enhancedRendering){if(!b.visProp.draft){this.setObjectStrokeWidth(b,b.visProp.strokeWidth);this.setObjectStrokeColor(b,b.visProp.strokeColor,b.visProp.strokeOpacity);this.setObjectFillColor(b,b.visProp.fillColor,b.visProp.fillOpacity)}else{this.setDraft(b)}}a*=((!b.board||!b.board.options.point.zoom)?1:Math.sqrt(b.board.zoomX*b.board.zoomY));if(c=="cross"||c=="x"){this.updatePathPrim(b.rendNode,this.updatePathStringPoint(b,a,"x"),b.board)}else{if(c=="circle"||c=="o"){this.updateCirclePrim(b.rendNode,b.coords.scrCoords[1],b.coords.scrCoords[2],a+1)}else{if(c=="square"||c=="[]"){this.updateRectPrim(b.rendNode,b.coords.scrCoords[1]-a,b.coords.scrCoords[2]-a,a*2,a*2)}else{if(c=="plus"||c=="+"){this.updatePathPrim(b.rendNode,this.updatePathStringPoint(b,a,"+"),b.board)}else{if(c=="diamond"||c=="<>"){this.updatePathPrim(b.rendNode,this.updatePathStringPoint(b,a,"diamond"),b.board)}else{if(c=="triangleup"||c=="a"){this.updatePathPrim(b.rendNode,this.updatePathStringPoint(b,a,"A"),b.board)}else{if(c=="triangledown"||c=="v"){this.updatePathPrim(b.rendNode,this.updatePathStringPoint(b,a,"v"),b.board)}else{if(c=="triangleleft"||c=="<"){this.updatePathPrim(b.rendNode,this.updatePathStringPoint(b,a,"<"),b.board)}else{if(c=="triangleright"||c==">"){this.updatePathPrim(b.rendNode,this.updatePathStringPoint(b,a,">"),b.board)}}}}}}}}}this.setShadow(b)};JXG.AbstractRenderer.prototype.changePointStyle=function(a){var b=this.getElementById(a.id);if(b!=null){this.remove(b)}this.drawPoint(a);JXG.clearVisPropOld(a);if(!a.visProp.visible){this.hide(a)}if(a.visProp.draft){this.setDraft(a)}};JXG.AbstractRenderer.prototype.drawLine=function(a){var b=this.createPrim("line",a.id);this.appendChildPrim(b,a.layer);this.appendNodesToElement(a,"lines");this.updateLine(a)};JXG.AbstractRenderer.prototype.updateLine=function(b){var n=new JXG.Coords(JXG.COORDS_BY_USER,b.point1.coords.usrCoords,b.board),l=new JXG.Coords(JXG.COORDS_BY_USER,b.point2.coords.usrCoords,b.board),a,q,f,e,k,d,h,g,c;this.calcStraight(b,n,l);this.updateLinePrim(b.rendNode,n.scrCoords[1],n.scrCoords[2],l.scrCoords[1],l.scrCoords[2],b.board);if(b.image!=null){a=n.scrCoords[1];q=n.scrCoords[2];f=l.scrCoords[1];e=l.scrCoords[2];k=Math.atan2(e-q,f-a);h=250;g=256;c=[[1,0,0],[h*(1-Math.cos(k))+g*Math.sin(k),Math.cos(k),-Math.sin(k)],[g*(1-Math.cos(k))-h*Math.sin(k),Math.sin(k),Math.cos(k)]];b.imageTransformMatrix=c}this.makeArrows(b);if(this.enhancedRendering){if(!b.visProp.draft){this.setObjectStrokeWidth(b,b.visProp.strokeWidth);this.setObjectStrokeColor(b,b.visProp.strokeColor,b.visProp.strokeOpacity);this.setDashStyle(b,b.visProp);this.setShadow(b)}else{this.setDraft(b)}}};JXG.AbstractRenderer.prototype.calcStraight=function(e,n,m){var b,a,k,g,q,d,l,v,h,f,u,r;q=e.visProp.straightFirst;d=e.visProp.straightLast;if(Math.abs(n.scrCoords[0])JXG.Math.eps){for(f=2;f>0;f--){v[h][f]/=v[h][0]}v[h][0]=1}}b=false;a=false;if(!q&&n.scrCoords[1]>=0&&n.scrCoords[1]<=e.board.canvasWidth&&n.scrCoords[2]>=0&&n.scrCoords[2]<=e.board.canvasHeight){b=true}if(!d&&m.scrCoords[1]>=0&&m.scrCoords[1]<=e.board.canvasWidth&&m.scrCoords[2]>=0&&m.scrCoords[2]<=e.board.canvasHeight){a=true}if(Math.abs(v[1][0])e.board.canvasHeight){g=v[2]}else{g=v[3]}}else{if(v[1][2]>e.board.canvasHeight){k=v[2];if(v[3][2]<0){g=v[0]}else{g=v[3]}}else{k=v[1];if(v[3][2]<0){g=v[0]}else{if(v[3][2]>e.board.canvasHeight){g=v[2]}else{g=v[3]}}}}}}k=new JXG.Coords(JXG.COORDS_BY_SCREEN,k.slice(1),e.board);g=new JXG.Coords(JXG.COORDS_BY_SCREEN,g.slice(1),e.board);if(!b&&!a){if(!q&&d&&!this.isSameDirection(n,m,k)&&!this.isSameDirection(n,m,g)){return}else{if(q&&!d&&!this.isSameDirection(m,n,k)&&!this.isSameDirection(m,n,g)){return}}}if(!b){if(!a){if(this.isSameDirection(n,m,k)){if(!this.isSameDirection(n,m,g)){r=k;u=g}else{if(JXG.Math.Geometry.affineDistance(m.usrCoords,k.usrCoords)=0&&f>=0){if((a>=0&&e>=0)||(a<=0&&e<=0)){return true}}else{if(b<=0&&f<=0){if((a>=0&&e>=0)||(a<=0&&e<=0)){return true}}}return false};JXG.AbstractRenderer.prototype.updateTicks=function(b,d,a,e,c){};JXG.AbstractRenderer.prototype.removeTicks=function(a){var b=this.getElementById(a.id+"_ticks");this.remove(b)};JXG.AbstractRenderer.prototype.drawArrow=function(a){var b=this.createPrim("line",a.id);this.setObjectStrokeWidth(a,a.visProp.strokeWidth);this.setObjectStrokeColor(a,a.visProp.strokeColor,a.visProp.strokeOpacity);this.setObjectFillColor(a,a.visProp.fillColor,a.visProp.fillOpacity);this.setDashStyle(a,a.visProp);this.makeArrow(b,a);this.appendChildPrim(b,a.layer);this.appendNodesToElement(a,"lines");this.updateArrow(a)};JXG.AbstractRenderer.prototype.updateArrow=function(a){if(this.enhancedRendering){if(!a.visProp.draft){this.setObjectStrokeWidth(a,a.visProp.strokeWidth);this.setObjectStrokeColor(a,a.visProp.strokeColor,a.visProp.strokeOpacity);this.setObjectFillColor(a,a.visProp.fillColor,a.visProp.fillOpacity);this.setShadow(a);this.setDashStyle(a,a.visProp)}else{this.setDraft(a)}}this.updateLinePrim(a.rendNode,a.point1.coords.scrCoords[1],a.point1.coords.scrCoords[2],a.point2.coords.scrCoords[1],a.point2.coords.scrCoords[2],a.board)};JXG.AbstractRenderer.prototype.drawCurve=function(a){var b=this.createPrim("path",a.id);this.appendChildPrim(b,a.layer);this.appendNodesToElement(a,"path");this.setObjectStrokeWidth(a,a.visProp.strokeWidth);this.setObjectStrokeColor(a,a.visProp.strokeColor,a.visProp.strokeOpacity);this.setObjectFillColor(a,a.visProp.fillColor,a.visProp.fillOpacity);this.setDashStyle(a,a.visProp);this.updateCurve(a)};JXG.AbstractRenderer.prototype.updateCurve=function(a){if(this.enhancedRendering){if(!a.visProp.draft){this.setObjectStrokeWidth(a,a.visProp.strokeWidth);this.setObjectStrokeColor(a,a.visProp.strokeColor,a.visProp.strokeOpacity);this.setObjectFillColor(a,a.visProp.fillColor,a.visProp.fillOpacity);this.setDashStyle(a,a.visProp);this.setShadow(a)}else{this.setDraft(a)}}this.updatePathPrim(a.rendNode,this.updatePathStringPrim(a),a.board);this.makeArrows(a)};JXG.AbstractRenderer.prototype.drawCircle=function(a){var b=this.createPrim("ellipse",a.id);this.appendChildPrim(b,a.layer);this.appendNodesToElement(a,"ellipse");this.updateCircle(a)};JXG.AbstractRenderer.prototype.updateCircle=function(b){if(this.enhancedRendering){if(!b.visProp.draft){this.setObjectStrokeWidth(b,b.visProp.strokeWidth);this.setObjectStrokeColor(b,b.visProp.strokeColor,b.visProp.strokeOpacity);this.setObjectFillColor(b,b.visProp.fillColor,b.visProp.fillOpacity);this.setDashStyle(b,b.visProp);this.setShadow(b)}else{this.setDraft(b)}}var a=b.Radius();if(a>0&&!isNaN(b.midpoint.coords.scrCoords[1]+b.midpoint.coords.scrCoords[2])){this.updateEllipsePrim(b.rendNode,b.midpoint.coords.scrCoords[1],b.midpoint.coords.scrCoords[2],(a*b.board.stretchX),(a*b.board.stretchY))}};JXG.AbstractRenderer.prototype.drawPolygon=function(a){var b=this.createPrim("polygon",a.id);a.visProp.fillOpacity=0.3;this.appendChildPrim(b,a.layer);this.appendNodesToElement(a,"polygon");this.updatePolygon(a)};JXG.AbstractRenderer.prototype.updatePolygon=function(a){if(this.enhancedRendering){if(!a.visProp.draft){this.setObjectStrokeWidth(a,a.visProp.strokeWidth);this.setObjectFillColor(a,a.visProp.fillColor,a.visProp.fillOpacity);this.setShadow(a)}else{this.setDraft(a)}}this.updatePolygonePrim(a.rendNode,a)};JXG.AbstractRenderer.prototype.drawText=function(a){var b;if(a.display=="html"){b=this.container.ownerDocument.createElement("div");b.style.position="absolute";b.style.color=a.visProp.strokeColor;b.className="JXGtext";b.style.zIndex="10";this.container.appendChild(b);b.setAttribute("id",this.container.id+"_"+a.id)}else{b=this.drawInternalText(a)}b.style.fontSize=a.board.options.text.fontSize+"px";a.rendNode=b;a.htmlStr="";this.updateText(a)};JXG.AbstractRenderer.prototype.drawInternalText=function(a){};JXG.AbstractRenderer.prototype.updateText=function(a){if(a.visProp.visible==false){return}if(isNaN(a.coords.scrCoords[1]+a.coords.scrCoords[2])){return}this.updateTextStyle(a);if(a.display=="html"){a.rendNode.style.left=(a.coords.scrCoords[1])+"px";a.rendNode.style.top=(a.coords.scrCoords[2]-this.vOffsetText)+"px";a.updateText();if(a.htmlStr!=a.plaintextStr){a.rendNode.innerHTML=a.plaintextStr;if(a.board.options.text.useASCIIMathML){AMprocessNode(a.rendNode,false)}a.htmlStr=a.plaintextStr}}else{this.updateInternalText(a)}};JXG.AbstractRenderer.prototype.updateInternalText=function(a){};JXG.AbstractRenderer.prototype.updateTextStyle=function(b){var a;if(b.visProp.fontSize){if(typeof b.visProp.fontSize=="function"){a=b.visProp.fontSize();b.rendNode.style.fontSize=(a>0?a:0)}else{b.rendNode.style.fontSize=(b.visProp.fontSize)}}};JXG.AbstractRenderer.prototype.drawImage=function(a){};JXG.AbstractRenderer.prototype.updateImage=function(a){this.updateRectPrim(a.rendNode,a.coords.scrCoords[1],a.coords.scrCoords[2]-a.size[1],a.size[0],a.size[1]);if(a.parent!=null){this.transformImageParent(a,a.parent.imageTransformMatrix)}else{this.transformImageParent(a)}this.transformImage(a,a.transformations)};JXG.AbstractRenderer.prototype.drawGrid=function(e){var x=e.gridX,v=e.gridY,s=new JXG.Coords(JXG.COORDS_BY_SCREEN,[0,0],e),f=new JXG.Coords(JXG.COORDS_BY_SCREEN,[e.canvasWidth,e.canvasHeight],e),y=Math.ceil(s.usrCoords[1]),u=0,w,a,q,r,m,h,n,g,b,c,d;e.hasGrid=true;for(w=0;w<=x+1;w++){if(y-w/xf.usrCoords[1]){a=w-1;break}}y=Math.ceil(f.usrCoords[2]);r=0;for(w=0;w<=v+1;w++){if(y-w/vs.usrCoords[2]){q=w-1;break}}m=Math.round((1/x)*e.stretchX);h=Math.round((1/v)*e.stretchY);n=new JXG.Coords(JXG.COORDS_BY_USER,[Math.ceil(s.usrCoords[1])-u/x,Math.floor(s.usrCoords[2])+q/v],e);g=new JXG.Coords(JXG.COORDS_BY_USER,[Math.floor(f.usrCoords[1])+a/x,Math.ceil(f.usrCoords[2])-r/v],e);b=this.drawVerticalGrid(n,g,m,e);this.appendChildPrim(b,e.options.layer.grid);if(!e.snapToGrid){c=new Object();c.visProp={};c.rendNode=b;c.elementClass=JXG.OBJECT_CLASS_LINE;c.id="gridx";JXG.clearVisPropOld(c);this.setObjectStrokeColor(c,e.gridColor,e.gridOpacity)}else{c=new Object();c.visProp={};c.rendNode=b;c.elementClass=JXG.OBJECT_CLASS_LINE;c.id="gridx";JXG.clearVisPropOld(c);this.setObjectStrokeColor(c,"#FF8080",0.5)}this.setPropertyPrim(b,"stroke-width","0.4px");if(e.gridDash){this.setGridDash("gridx")}b=this.drawHorizontalGrid(n,g,h,e);this.appendChildPrim(b,e.options.layer.grid);if(!e.snapToGrid){c=new Object();c.visProp={};c.rendNode=b;c.elementClass=JXG.OBJECT_CLASS_LINE;c.id="gridy";JXG.clearVisPropOld(c);this.setObjectStrokeColor(c,e.gridColor,e.gridOpacity)}else{c=new Object();c.visProp={};c.rendNode=b;c.elementClass=JXG.OBJECT_CLASS_LINE;c.id="gridy";JXG.clearVisPropOld(c);this.setObjectStrokeColor(c,"#FF8080",0.5)}this.setPropertyPrim(b,"stroke-width","0.4px");if(e.gridDash){this.setGridDash("gridy")}};JXG.AbstractRenderer.prototype.removeGrid=function(a){var b=this.getElementById("gridx");this.remove(b);b=this.getElementById("gridy");this.remove(b);a.hasGrid=false};JXG.AbstractRenderer.prototype.hide=function(a){};JXG.AbstractRenderer.prototype.show=function(a){};JXG.AbstractRenderer.prototype.setObjectStrokeWidth=function(b,a){};JXG.AbstractRenderer.prototype.setObjectStrokeColor=function(c,a,b){};JXG.AbstractRenderer.prototype.setObjectFillColor=function(c,a,b){};JXG.AbstractRenderer.prototype.setDraft=function(b){if(!b.visProp.draft){return}var a=b.board.options.elements.draft.color,c=b.board.options.elements.draft.opacity;if(b.type==JXG.OBJECTT_TYPE_POLYGON){this.setObjectFillColor(b,a,c)}else{if(b.elementClass==JXG.OBJECT_CLASS_POINT){this.setObjectFillColor(b,a,c)}else{this.setObjectFillColor(b,"none",0)}this.setObjectStrokeColor(b,a,c);this.setObjectStrokeWidth(b,b.board.options.elements.draft.strokeWidth)}};JXG.AbstractRenderer.prototype.removeDraft=function(a){if(a.type==JXG.OBJECT_TYPE_POLYGON){this.setObjectFillColor(a,a.visProp.fillColor,a.visProp.fillColorOpacity)}else{if(a.type==JXG.OBJECT_CLASS_POINT){this.setObjectFillColor(a,a.visProp.fillColor,a.visProp.fillColorOpacity)}this.setObjectStrokeColor(a,a.visProp.strokeColor,a.visProp.strokeColorOpacity);this.setObjectStrokeWidth(a,a.visProp.strokeWidth)}};JXG.AbstractRenderer.prototype.highlight=function(b){var a;if(b.visProp.draft==false){if(b.type==JXG.OBJECT_CLASS_POINT){this.setObjectStrokeColor(b,b.visProp.highlightStrokeColor,b.visProp.highlightStrokeOpacity);this.setObjectFillColor(b,b.visProp.highlightStrokeColor,b.visProp.highlightStrokeOpacity)}else{if(b.type==JXG.OBJECT_TYPE_POLYGON){this.setObjectFillColor(b,b.visProp.highlightFillColor,b.visProp.highlightFillOpacity);for(a=0;a=JXG.Math.eps){a=(c*b+s*q)/r;m=c*c+s*s-a*(c*b+s*q)}else{a=0;m=c*c+s*s}if(a<0){m=c*c+s*s}else{if(a>1){c=u[1]-v[1];s=u[2]-v[2];m=c*c+s*s}}if(m>n){n=m;l=e}}return[Math.sqrt(n),l]};JXG.AbstractRenderer.prototype.RDP=function(f,e,d,b,c){var a=this.findSplit(f,e,d);if(a[0]>b){this.RDP(f,e,a[1],b,c);this.RDP(f,a[1],d,b,c)}else{c.push(f[d])}};JXG.AbstractRenderer.prototype.RamenDouglasPeuker=function(f,b){var d=[],e,c,a;a=f.length;e=0;while(ee&&isNaN(f[c].scrCoords[1]+f[c].scrCoords[2])){c--}if(e>c||e==a){return[]}d[0]=f[e];this.RDP(f,e,c,b,d);return d};JXG.AbstractRenderer.prototype.setShadow=function(a){};JXG.AbstractRenderer.prototype.updatePathStringPoint=function(c,a,b){};JXG.AbstractRenderer.prototype.eval=function(a){if(typeof a=="function"){return a()}else{return a}};JXG.FileReader=new function(){this.parseFileContent=function(a,b,d){this.request=false;var c;try{this.request=new XMLHttpRequest();if(d.toLowerCase()=="raw"){this.request.overrideMimeType("text/plain; charset=iso-8859-1")}else{this.request.overrideMimeType("text/xml; charset=iso-8859-1")}}catch(c){try{this.request=new ActiveXObject("Msxml2.XMLHTTP")}catch(c){try{this.request=new ActiveXObject("Microsoft.XMLHTTP")}catch(c){this.request=false}}}if(!this.request){alert("AJAX not activated!");return}this.request.open("GET",a,true);if(d.toLowerCase()=="raw"){this.cbp=function(){var e=this.request;if(e.readyState==4){b(e.responseText)}}}else{this.cbp=function(){var e=this.request;if(e.readyState==4){var f="";if(typeof e.responseStream!="undefined"&&e.responseText.slice(0,2)=="PK"){f=(new JXG.Util.Unzip(JXG.Util.Base64.decodeAsArray(BinFileReader(this.request)))).unzip();f=f[0][0]}else{f=e.responseText}this.parseString(f,b,d,false)}}}this.cb=JXG.bind(this.cbp,this);this.request.onreadystatechange=this.cb;try{this.request.send(null)}catch(c){throw new Error("JSXGraph: problems opening "+a+" !")}};this.cleanWhitespace=function(a){var b=a.firstChild;while(b!=null){if(b.nodeType==3&&!/\S/.test(b.nodeValue)){a.removeChild(b)}else{if(b.nodeType==1){this.cleanWhitespace(b)}}b=b.nextSibling}};this.stringToXMLTree=function(b){if(typeof DOMParser=="undefined"){DOMParser=function(){};DOMParser.prototype.parseFromString=function(f,g){if(typeof ActiveXObject!="undefined"){var e=new ActiveXObject("MSXML.DomDocument");e.loadXML(f);return e}}}var c=new DOMParser();var a=c.parseFromString(b,"text/xml");this.cleanWhitespace(a);return a};this.parseString=function(e,c,f,b){var a,d;if(f.toLowerCase()=="cdy"){if(b){e=JXG.Util.Base64.decode(e)}e=JXG.CinderellaReader.readCinderella(e,c);c.xmlString=e;c.afterLoad();return}if(f.toLowerCase()=="graph"){e=JXG.GraphReader.readGraph(e,c);c.afterLoad();return}if(f.toLowerCase()=="geonext"){e=JXG.GeonextReader.prepareString(e)}if(f.toLowerCase()=="geogebra"){e=JXG.GeogebraReader.prepareString(e,b)}if(f.toLowerCase()=="intergeo"){if(b){e=JXG.Util.Base64.decode(e)}e=JXG.IntergeoReader.prepareString(e)}c.xmlString=e;a=this.stringToXMLTree(e);this.readElements(a,c,f)};this.readElements=function(a,b,c){if(c.toLowerCase()=="geonext"){b.suspendUpdate();if(a.getElementsByTagName("GEONEXT").length!=0){JXG.GeonextReader.readGeonext(a,b)}b.unsuspendUpdate()}else{if(a.getElementsByTagName("geogebra").length!=0){JXG.GeogebraReader.readGeogebra(a,b)}else{if(c.toLowerCase()=="intergeo"){JXG.IntergeoReader.readIntergeo(a,b)}}}b.afterLoad()}};if(/msie/i.test(navigator.userAgent)&&!/opera/i.test(navigator.userAgent)){document.write('