| var M = { co : function(x) {
 return Math.cos(2*Math.PI*x);
 }
 ,
 prime : function() {
 var s = 'rgba(220,220,220,1)';
 var t = 'rgba(180,180,180,1)';
 var n = 120;
 var u = 5;
 var m = 20;
 var i,j,k;
 var a = new Array();
 for(i=0; i<=n; i++) {
 Q.add(m+u*i,m);
 Q.add(m+u*i,m+u*n);
 if(i%12) Q.draw(1,s,'line');
 else Q.draw(1,t,'line');
 }
 for(j=0; j<=n; j++) {
 Q.add(m    ,m+u*j);
 Q.add(m+u*n,m+u*j);
 Q.draw(1,s,'line');
 }
 Q.add(m    ,m+2*u);
 Q.add(m+u*n,m+2*u);
 Q.draw(1,t,'line');
 
 for(j=1; j<=n; j++) a[j] = 0;
 for(i=1; i<=n; i++) {
 for(j=i; j<=n; j+=i) {
 Q.c.beginPath();
 Q.c.arc(m+j*u,m+(n-i)*u,2,0,2*Math.PI,false);
 Q.c.fillStyle = 'rgba(0,0,0,1)';
 Q.c.fill();
 a[j]++;
 }
 }
 for(j=1; j<=n; j++) {
 Q.c.beginPath();
 Q.c.arc(m+j*u,m+a[j]*u,2,0,2*Math.PI,false);
 Q.c.fillStyle = 'rgba(255,0,0,1)';
 Q.c.fill();
 }
 for(i=3; i<=n; i++) {
 k = 1;
 for(j=2; j<=i-1; j++) {
 k *= (Math.cos(2*Math.PI*i/j-Math.PI)+1)*j;
 }
 k = Math.round(k);
 Q.c.beginPath();
 Q.c.arc(m+i*u,m+k,2,0,2*Math.PI,false);
 Q.c.fillStyle = 'rgba(0,0,255,1)';
 Q.c.fill();
 }
 }
 ,
 prime2 : function() {
 var s = 'rgba(220,220,220,1)';
 var n = 10;
 var u = 100;
 var m = 20;
 var h = 600;
 var b =2;
 var i,j,k;
 var a = new Array();
 for(i=0; i<=n; i++) {
 Q.add(m+u*i,m);
 Q.add(m+u*i,m+h);
 Q.draw(1,s,'line');
 }
 for(j=0; j<=h; j+=u) {
 Q.add(m    ,m+j);
 Q.add(m+u*n,m+j);
 Q.draw(1,s,'line');
 }
 Q.c.beginPath();
 Q.c.arc(m+2*u,m+h-u,3,0,2*Math.PI,false);
 Q.c.fillStyle = 'rgba(0,0,0,1)';
 Q.c.fill();
 Q.c.beginPath();
 Q.c.arc(m+3*u,m+h-u,3,0,2*Math.PI,false);
 Q.c.fillStyle = 'rgba(0,0,0,1)';
 Q.c.fill();
 Q.c.beginPath();
 Q.c.arc(m+5*u,m+h-u,3,0,2*Math.PI,false);
 Q.c.fillStyle = 'rgba(0,0,0,1)';
 Q.c.fill();
 Q.c.beginPath();
 Q.c.arc(m+7*u,m+h-u,3,0,2*Math.PI,false);
 Q.c.fillStyle = 'rgba(0,0,0,1)';
 Q.c.fill();
 
 
 // graph 1/x
 for(i=10; i<=n*u; i++) {
 x = m+i;
 y = m+h-u-1/(i/u)*u;
 if(y>=m && y<=m+h) Q.add(x,y);
 }
 Q.draw(1,'rgba(0,0,0,1)','line');
 // graph ln(x)
 for(i=5; i<=n*u; i++) {
 x = m+i;
 y = m+h-u-Math.log(i/u)/Math.log(b)*u;
 if(y>=m && y<=m+h) Q.add(x,y);
 if((y-m)%u==0) {
 Q.c.beginPath();
 Q.c.arc(x,y,3,0,2*Math.PI,false);
 Q.c.fillStyle = 'rgba(255,0,0,1)';
 Q.c.fill();
 }
 }
 Q.draw(1,'rgba(0,0,0,1)','line');
 
 // graph co(x)
 for(i=0; i<=n*u; i++) {
 x = m+i;
 y = m+h-u+M.co(i/u)*u-u;
 if(y>=m && y<=m+h) Q.add(x,y);
 }
 Q.draw(1,'rgba(0,0,0,1)','line');
 for(i=0; i<=n*u; i++) {
 x = m+i;
 y = m+h-u+M.co(i/u/2)*u-u;
 if(y>=m && y<=m+h) Q.add(x,y);
 }
 Q.draw(1,'rgba(255,0,0,1)','line');
 for(i=0; i<=n*u; i++) {
 x = m+i;
 y = m+h-u+M.co(i/u/3)*u-u;
 if(y>=m && y<=m+h) Q.add(x,y);
 }
 Q.draw(1,'rgba(255,140,0,1)','line');
 for(i=0; i<=n*u; i++) {
 x = m+i;
 y = m+h-u+M.co(i/u/4)*u-u;
 if(y>=m && y<=m+h) Q.add(x,y);
 }
 Q.draw(1,'rgba(0,128,0,1)','line');
 for(i=0; i<=n*u; i++) {
 x = m+i;
 y = m+h-u+M.co(i/u/5)*u-u;
 if(y>=m && y<=m+h) Q.add(x,y);
 }
 Q.draw(1,'rgba(50,205,50,1)','line');
 for(i=0; i<=n*u; i++) {
 x = m+i;
 y = m+h-u+M.co(i/u/6)*u-u;
 if(y>=m && y<=m+h) Q.add(x,y);
 }
 Q.draw(1,'rgba(0,0,255,1)','line');
 for(i=0; i<=n*u; i++) {
 x = m+i;
 y = m+h-u+M.co(i/u/7)*u-u;
 if(y>=m && y<=m+h) Q.add(x,y);
 }
 Q.draw(1,'rgba(30,144,255,1)','line');
 for(i=0; i<=n*u; i++) {
 x = m+i;
 y = m+h-u+M.co(i/u/8)*u-u;
 if(y>=m && y<=m+h) Q.add(x,y);
 }
 Q.draw(1,'rgba(255,0,255,1)','line');
 for(i=0; i<=n*u; i++) {
 x = m+i;
 y = m+h-u+M.co(i/u/9)*u-u;
 if(y>=m && y<=m+h) Q.add(x,y);
 }
 Q.draw(1,'rgba(220,20,60,1)','line');
 for(i=0; i<=n*u; i++) {
 x = m+i;
 y = m+h-u+M.co(i/u/10)*u-u;
 if(y>=m && y<=m+h) Q.add(x,y);
 }
 Q.draw(1,'rgba(0,139,139,1)','line');
 
 // sum
 for(i=10; i<=n*u; i+=10) {
 x = m+i;
 y = m+h-u;
 k = Math.round(i/10);
 for(j=1; j<=k; j++) {
 y -= M.co(i/10/j)*100;
 }
 if(y>=m && y<=m+h) Q.add(x,y);
 }
 Q.draw(2,'rgba(192,192,192,0)','line');
 }
 ,
 si : function(x) {
 return Math.sin(2*Math.PI*x);
 }
 ,
 triginverse : function() {
 var b,c,i,j,k,x,y;
 var l1 = 350;
 var l2 = 200;
 var l3 = 30;
 var l4 = 550;
 var d = 10;
 var c1 = 'rgba(0,0,0,1)';
 var c2 = 'rgba(128,128,128,1)';
 var c3 = 'rgba(230,230,230,1)';
 var c4 = 'rgba(245,245,245,1)';
 var c5 = 'rgba(192,192,192,1)';
 
 // axes
 Q.add(l3      ,l3+l1);
 Q.add(l3+l2+l4,l3+l1);
 Q.draw(1,c2,'line',15,10,0,0,0);
 Q.add(l3+l2,l3+l2+l1);
 Q.add(l3+l2,l3);
 Q.draw(1,c2,'line',15,10,0,0,0);
 
 b = Math.round((-Math.PI/2)*100);
 Q.add(l3+l2+b,l3+l1+l2);
 Q.add(l3+l2+b,l3);
 Q.draw(1,c3,'line',0,0,0,0,0);
 b = Math.round((1*Math.PI/2)*100);
 Q.add(l3+l2+b,l3+l1+l2);
 Q.add(l3+l2+b,l3);
 Q.draw(1,c3,'line',0,0,0,0,0);
 b = Math.round((2*Math.PI/2)*100);
 Q.add(l3+l2+b,l3+l1+l2);
 Q.add(l3+l2+b,l3);
 Q.draw(1,c3,'line',0,0,0,0,0);
 b = Math.round((3*Math.PI/2)*100);
 Q.add(l3+l2+b,l3+l1+l2);
 Q.add(l3+l2+b,l3);
 Q.draw(1,c3,'line',0,0,0,0,0);
 
 b = -100;
 Q.add(l3+l2+b,l3+l1+l2);
 Q.add(l3+l2+b,l3);
 Q.draw(1,c3,'line',0,0,0,0,0);
 b = 100;
 Q.add(l3+l2+b,l3+l1+l2);
 Q.add(l3+l2+b,l3);
 Q.draw(1,c3,'line',0,0,0,0,0);
 
 b = Math.round((-Math.PI/2)*100);
 Q.add(l3,l3+l1-b);
 Q.add(l3+l2+l4,l3+l1-b);
 Q.draw(1,c3,'line',0,0,0,0,0);
 b = Math.round((1*Math.PI/2)*100);
 Q.add(l3,l3+l1-b);
 Q.add(l3+l2+l4,l3+l1-b);
 Q.draw(1,c3,'line',0,0,0,0,0);
 b = Math.round((2*Math.PI/2)*100);
 Q.add(l3,l3+l1-b);
 Q.add(l3+l2+l4,l3+l1-b);
 Q.draw(1,c3,'line',0,0,0,0,0);
 b = -100;
 Q.add(l3,l3+l1-b);
 Q.add(l3+l2+l4,l3+l1-b);
 Q.draw(1,c3,'line',0,0,0,0,0);
 b = 100;
 Q.add(l3,l3+l1-b);
 Q.add(l3+l2+l4,l3+l1-b);
 Q.draw(1,c3,'line',0,0,0,0,0);
 
 // sine ----------------------------------------
 c = Math.round((-Math.PI/2)*100);
 for(i=-l2; i<=c; i++) {
 x = l3+l2+i;
 y = l3+l1-Math.sin(i/100)*100;
 Q.add(x,y);
 }
 Q.draw(1,'rgba(255,140,0,1)','curve',0,0,0,0,0);
 b = Math.round((-Math.PI/2)*100);
 c = Math.round((Math.PI/2)*100);
 for(i=b; i<=c; i++) {
 x = l3+l2+i;
 y = l3+l1-Math.sin(i/100)*100;
 if(y<l3+l2+l1 && y>l3) Q.add(x,y);
 }
 Q.draw(2,'rgba(255,140,0,1)','curve',0,0,5,2,0);
 b = Math.round((Math.PI/2)*100);
 for(i=b; i<=l4; i++) {
 x = l3+l2+i;
 y = l3+l1-Math.sin(i/100)*100;
 Q.add(x,y);
 }
 Q.draw(1,'rgba(255,140,0,1)','curve',0,0,0,0,0);
 
 // consine -------------------------------------
 for(i=-l2; i<=0; i++) {
 x = l3+l2+i;
 y = l3+l1-Math.cos(i/100)*100;
 Q.add(x,y);
 }
 Q.draw(1,'rgba(30,144,255,1)','curve',0,0,0,0,0);
 b = 0;
 c = Math.round((2*Math.PI/2)*100);
 for(i=b; i<=c; i++) {
 x = l3+l2+i;
 y = l3+l1-Math.cos(i/100)*100;
 if(y<l3+l2+l1 && y>l3) Q.add(x,y);
 }
 Q.draw(2,'rgba(30,144,255,1)','curve',0,0,5,2,0);
 b = Math.round((2*Math.PI/2)*100);
 for(i=b; i<=l4; i++) {
 x = l3+l2+i;
 y = l3+l1-Math.cos(i/100)*100;
 Q.add(x,y);
 }
 Q.draw(1,'rgba(30,144,255,1)','curve',0,0,0,0,0);
 b = -100;
 c = 100;
 for(i=b; i<=c; i++) {
 x = l3+l2+i;
 y = l3+l1-Math.acos(i/100)*100;
 if(y<l3+l2+l1 && y>l3) Q.add(x,y);
 }
 Q.draw(2,'rgba(0,0,255,1)','curve',0,0,0,0,0);
 
 // tangent -------------------------------------
 b = -l2;
 c = Math.round((-Math.PI/2-1/10)*100);
 for(i=b; i<=c; i++) {
 x = l3+l2+i;
 y = l3+l1-Math.tan(i/100)*100;
 if(y<l3+l2+l1 && y>l3) Q.add(x,y);
 }
 Q.draw(1,'rgba(50,205,50,1)','curve',0,0,0,0,0);
 b = Math.round((-Math.PI/2+1/10)*100);
 c = Math.round(( Math.PI/2-1/10)*100);
 for(i=b; i<=c; i++) {
 x = l3+l2+i;
 y = l3+l1-Math.tan(i/100)*100;
 if(y<l3+l2+l1 && y>l3) Q.add(x,y);
 }
 Q.draw(2,'rgba(50,205,50,1)','curve',0,0,5,2,0);
 b = Math.round((  Math.PI/2+1/10)*100);
 c = Math.round((3*Math.PI/2-1/10)*100);
 for(i=b; i<=c; i++) {
 x = l3+l2+i;
 y = l3+l1-Math.tan(i/100)*100;
 if(y<l3+l2+l1 && y>l3) Q.add(x,y);
 }
 Q.draw(1,'rgba(50,205,50,1)','curve',0,0,0,0,0);
 b = Math.round((3*Math.PI/2+1/10)*100);
 c = l4;
 for(i=b; i<=c; i++) {
 x = l3+l2+i;
 y = l3+l1-Math.tan(i/100)*100;
 if(y<l3+l2+l1 && y>l3) Q.add(x,y);
 }
 Q.draw(1,'rgba(50,205,50,1)','curve',0,0,0,0,0);
 
 b = -l2;
 c = l4;
 for(i=b; i<=c; i++) {
 x = l3+l2+i;
 y = l3+l1-Math.atan(i/100)*100;
 if(y<l3+l2+l1 && y>l3) Q.add(x,y);
 }
 Q.draw(2,'rgba(0,128,0,1)','curve',0,0,0,0,0);
 
 // arcsine
 b = -100;
 c = 100;
 for(i=b; i<=c; i++) {
 x = l3+l2+i;
 y = l3+l1-Math.asin(i/100)*100;
 if(y<l3+l2+l1 && y>l3) Q.add(x,y);
 }
 Q.draw(2,'rgba(255,0,0,1)','curve',0,0,0,0,0);
 }
 
 }
 |