var jwindow = new JitterObject("jit.window", "sfighter");    jwindow.rect=[recta,rectb,rectc,rectd]; // window positionvar jrender = new JitterObject("jit.gl.render", "sfighter");    jrender.erase_color = [0,0,0,1]; //background colorvar colorr=0.7; var colorg=0.7; var colorb=0.7; var colora=0.4;//var xpos=0.9;//var ypos=0.2;//var zpos=0.;var counter = 0;var Pcounter = 0;var Ncounter = 0;var texts = " ";var Ntext = 5;// numbers of normal text objectvar Nptext = 10;// numbers of positive text objectvar Nntext = 10;// numbers of negative text object//window frame...need to be improved///////////////////////////////////////////var width=jrender.screentoworld[0];var height=jrender.screentoworld[1];var top=0.75;var right=1.0;var bottom=-0.8;var left=-1.0;//normal texts volicity////////////////////////////////////////////////////////////////var vx = new Array();var vy = new Array();for (var i=0 ; i< Ntext; i++){     vx[i] = 0.01*Math.random();     vy[i] = 0.01*Math.random();    }//positive texts volicity////////////////////////////////////////////////////////////////var Pvx = new Array();var Pvy = new Array();for (var i=0 ; i< Nptext; i++){	 Pvx[i] = 0.01*Math.random();	 Pvy[i] = 0.01*Math.random();	}//positive texts volicity////////////////////////////////////////////////////////////////var Nvx = new Array();var Nvy = new Array();for (var i=0 ; i< Nntext; i++){     Nvx[i] = 0.01*Math.random();     Nvy[i] = 0.01*Math.random();	}/////draw mult points function (audience's position)///////////////////////////////////////////////////var xpos = new Array();var ypos = new Array();var jpoint = new JitterObject("jit.gl.sketch", "sfighter");    jpoint.point(0,0,0);    jpoint.depth_enable = 1;    jpoint.smooth_shading = 1;    jpoint.lighting_enable = 1;var pointsize = 1;var jmatrix = new JitterMatrix();function jit_matrix(name){    jmatrix.name = name;    jmatrix.dim = [jmatrix.dim[0],1]    for(var i=0 ; i<jmatrix.dim[0] ;i++){       for(var j=0 ; j<jmatrix.dim[1] ;j++){       //drawpoint        xpos[i] = (jmatrix.getcell(i,j)[0]/640)*5-1;        ypos[i] = (jmatrix.getcell(i,j)[1]/480)*5-1;        jpoint.point(xpos[i],ypos[i],0.);        //post(jmatrix.getcell(i,j)[0]);        //post(jmatrix.getcell(i,j)[1]);        //post(xpos[i],xpos[i])                       }    }}//init handlevar jhandle = new JitterObject("jit.gl.handle", "sfighter");    jhandle.inherit_transform = 1;//what will be draw ////////////////////////////////////////////////////////////////////var jsphere = new JitterObject("jit.gl.sketch", "sfighter");	//jsphere.sphere(Math.random());	jsphere.depth_enable = 1;	jsphere.smooth_shading = 1;	jsphere.lighting_enable = 1;//init textsobjs////////////////////////////////////////////////////////////////////////var jtext2ds = new Array(0);    //jtext2ds[0] = new JitterObject("jit.gl.text2d", "sfighter");var Pjtext2ds = new Array(0);    //Pjtext2ds[0] = new JitterObject("jit.gl.text2d", "sfighter");var Njtext2ds = new Array(0);    //Njtext2ds[0] = new JitterObject("jit.gl.text2d", "sfighter");   function bang(){   //jhandle.rotatexyz = [handx,handy,handz];   jpoint.point_size = pointsize;     //test positive words///////////////////////////////////////////////////////   for(var i=0 ; i<Pjtext2ds.length; i++){   Pjtext2ds[i].position = [Pjtext2ds[i].position[0]+Pvx[i],Pjtext2ds[i].position[1]+Pvy[i]];      //find boundry   if(Pjtext2ds[i].position[0]>right){      Pjtext2ds[i].position[0]=right;      Pvx[i]*=-1;   }else if(Pjtext2ds[i].position[0]<left){      Pjtext2ds[i].position[0]=left;      Pvx[i]*=-1;   }   if(Pjtext2ds[i].position[1]>top){      Pjtext2ds[i].position[1]=top;      Pvy[i]*=-1;   }else if(Pjtext2ds[i].position[1]<bottom){      Pjtext2ds[i].position[1]=bottom;      Pvy[i]*=-1;   }      //Collision motion   for(var j=0; j<jmatrix.dim[0] ;j++){       var dx = Pjtext2ds[i].position[0] - xpos[j];       var dy = Pjtext2ds[i].position[1] - ypos[j];       var dist = Math.sqrt(dx*dx+dy*dy);      //Collision distance       var minDist = 0.5;      //Collision effect       if(dist < minDist){                  //jtext2ds[i].text(" "); //texts disappear          Pjtext2ds[i].color=[Math.random(),0,Math.random(),1.];          Pjtext2ds[i].size(Math.ceil(60*Math.random()));          //how to erase the text object          //jtext2ds[i].erase();          jsphere.moveto(xpos[j],ypos[j],0);          jsphere.sphere(Math.random()*0.1);          Pjtext2ds[i].position=[-100,-100];          //xpos[j]=-100;          //ypos[j]=-100;                    //post(xpos[j],ypos[j]);          }     }            }   //test negative words///////////////////////////////////////////////////////   for(var i=0 ; i<Njtext2ds.length; i++){   Njtext2ds[i].position = [Njtext2ds[i].position[0]+Nvx[i],Njtext2ds[i].position[1]+Nvy[i]];   //find boundry   if(Njtext2ds[i].position[0]>right){      Njtext2ds[i].position[0]=right;      Nvx[i]*=-1;   }else if(Njtext2ds[i].position[0]<left){      Njtext2ds[i].position[0]=left;      Nvx[i]*=-1;   }   if(Njtext2ds[i].position[1]>top){      Njtext2ds[i].position[1]=top;      Nvy[i]*=-1;   }else if(Njtext2ds[i].position[1]<bottom){      Njtext2ds[i].position[1]=bottom;      Nvy[i]*=-1;   }   //Collision motion   for(var j=0; j<jmatrix.dim[0] ;j++){       var dx = Njtext2ds[i].position[0] - xpos[j];       var dy = Njtext2ds[i].position[1] - ypos[j];       var dist = Math.sqrt(dx*dx+dy*dy);   //Collision distance       var minDist = 0.5;   //Collision effect       if(dist < minDist){                  //jtext2ds[i].text(" "); //texts disappear          Njtext2ds[i].color=[Math.random(),0,Math.random(),1.];          Njtext2ds[i].size(Math.ceil(60*Math.random()));          //how to erase the text object          //jtext2ds[i].erase();          jsphere.moveto(xpos[j],ypos[j],0);          jsphere.sphere(Math.random()*0.1);          Njtext2ds[i].position=[-100,-100];          //xpos[j]=-100;          //ypos[j]=-100;          //post(xpos[j],ypos[j]);          }     }   }   //test normal words///////////////////////////////////////////////////////   for(var i=0 ; i<jtext2ds.length; i++){   jtext2ds[i].position = [jtext2ds[i].position[0]+vx[i],jtext2ds[i].position[1]+vy[i]];   //find boundry   if(jtext2ds[i].position[0]>right){      jtext2ds[i].position[0]=right;      vx[i]*=-1;   }else if(jtext2ds[i].position[0]<left){      jtext2ds[i].position[0]=left;      vx[i]*=-1;   }   if(jtext2ds[i].position[1]>top){      jtext2ds[i].position[1]=top;      vy[i]*=-1;   }else if(jtext2ds[i].position[1]<bottom){      jtext2ds[i].position[1]=bottom;      vy[i]*=-1;   }   //Collision motion   for(var j=0; j<jmatrix.dim[0] ;j++){       var dx = jtext2ds[i].position[0] - xpos[j];       var dy = jtext2ds[i].position[1] - ypos[j];       var dist = Math.sqrt(dx*dx+dy*dy);   //Collision distance       var minDist = 0.5;   //Collision effect       if(dist < minDist){	      //bounce back 	      var angle = Math.atan2(dy,dx);	      var targetX = xpos[j] + Math.cos(angle)*minDist;	      var targetY = ypos[j] + Math.sin(angle)*minDist;	      vx[i] += (targetX-jtext2ds[i].position[0])*.01;	      vy[i] += (targetY-jtext2ds[i].position[1])*.01;	      //jtext2ds[i].text(" "); //texts disappear	      jtext2ds[i].color=[0.3,0.3,0.3,Math.random()];	      jtext2ds[i].size(Math.ceil(30*Math.random()));	      }     }   }     jrender.erase();     jrender.rotate = jhandle.rotate;   jrender.position = jhandle.position;   jhandle.auto_rotate = 1;   jrender.drawswap();   jpoint.reset();   jsphere.reset();   }//once add a new text create a new textobjectfunction settext(t){   	if(counter<Ntext){    jtext2ds.push(new JitterObject("jit.gl.text2d", "sfighter"));	jtext2ds[counter].size(16);    jtext2ds[counter].align=1;    jtext2ds[counter].position = [Math.random(),Math.random()];    jtext2ds[counter].text(t);    jtext2ds[counter].color=[1,1,colorb,colora];    counter++;    }else{	counter=0;	//jtext2ds[counter] = new JitterObject("jit.gl.text2d", "sfighter")	jtext2ds[counter].size(16);    jtext2ds[counter].align=1;    jtext2ds[counter].position = [Math.random(),Math.random()];    jtext2ds[counter].text(t);    jtext2ds[counter].color=[colorr,colorg,colorb,colora];    }}//positive textsfunction setptext(t){   //texts = t;    if(counter<Nptext){    Pjtext2ds.push(new JitterObject("jit.gl.text2d", "sfighter"));	Pjtext2ds[Pcounter].size(16);    Pjtext2ds[Pcounter].align=1;    Pjtext2ds[Pcounter].position = [Math.random(),Math.random()];    Pjtext2ds[Pcounter].text(t);    Pjtext2ds[Pcounter].color=[colorr,colorg,colorb,colora];    Pcounter++;    }else{	Pcounter=0;	Pjtext2ds[Pcounter].size(16);    Pjtext2ds[Pcounter].align=1;    Pjtext2ds[Pcounter].position = [Math.random(),Math.random()];    Pjtext2ds[Pcounter].text(t);    Pjtext2ds[Pcounter].color=[colorr,colorg,colorb,colora];    }}//negative textsfunction setntext(t){   	if(counter<Nntext){    Njtext2ds.push(new JitterObject("jit.gl.text2d", "sfighter"));	Njtext2ds[Ncounter].size(16);    Njtext2ds[Ncounter].align=1;    Njtext2ds[Ncounter].position = [Math.random(),Math.random()];    Njtext2ds[Ncounter].text(t);    Njtext2ds[Ncounter].color=[colorr,colorg,colorb,colora];    Ncounter++;    }else{	Ncounter=0;	Njtext2ds[Ncounter].size(16);    Njtext2ds[Ncounter].align=1;    Njtext2ds[Ncounter].position = [Math.random(),Math.random()];    Njtext2ds[Ncounter].text(t);    Njtext2ds[Ncounter].color=[colorr,colorg,colorb,colora];    }}function setcolor(r,g,b){   colorr=r;   colorg=g;   colorb=b;   colora=0.3}/*function setcolor2(r,g,b){   colorr=r;   colorg=g;   colorb=b;}*/function sethand(x,y,z){   handx=x;   handy=y;   handz=z;}function setpos(x,y){   xpos =x;   ypos =y;   //zpos=z;}function windowrect(a,b,c,d){	recta=a;	rectb=b;	rectc=c;	rectd=d;}