| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455 | 
							- module.exports = {
 
-     Timer: class{
 
-         constructor(second) {
 
-             this.interval = second * 1000;
 
-             this.nextTiming();
 
-         }
 
-         get isDue(){
 
-             return new Date().getTime() - this.date.getTime() >= this.interval;
 
-         }
 
-         nextTiming(){
 
-             this.date = new Date();
 
-         }
 
-         tryNextTiming(){
 
-             if(!this.isDue){
 
-                 return false;
 
-             }
 
-             this.nextTiming();
 
-             return true;
 
-         }
 
-     },
 
-     FixedTimer:class{
 
-         constructor(fps) {
 
-             this.fps = fps;
 
-             this.updateInterval = 1000.0/fps;
 
-             this.remainder = 0;
 
-             this.nextTiming();
 
-         }
 
-         nextTiming(){
 
-             this.date = new Date();
 
-         }
 
-         fixedUpdateTimes(){
 
-             var newTime = new Date();
 
-             var interval = newTime.getTime() - this.date.getTime() + this.remainder;
 
-             this.date = newTime;
 
-             this.remainder = interval % this.updateInterval;
 
-             return parseInt(interval / this.updateInterval);
 
-         }
 
-     },
 
-     FixedTimerDT:class{
 
-         constructor(fps) {
 
-             this.fps = fps;
 
-             this.updateInterval = 1000.0/fps;
 
-             this.remainder = 0;
 
-         }
 
-         fixedUpdateTimes(dt){//time in second
 
-             var interval = dt*1000 + this.remainder;
 
-             this.remainder = interval % this.updateInterval;
 
-             //cc.log(parseInt(interval / this.updateInterval));
 
-             return parseInt(interval / this.updateInterval);
 
-         }
 
-     },
 
-     QuadraticEquation: class{
 
-         constructor(x1,y1,x2,y2,x3,y3){
 
-             this.a = y1 / (x1 - x2) / (x1 - x3) + y2 / (x2 - x1) / (x2 - x3) + y3 / (x3 - x1) / (x3 - x2);
 
-             this.b = -y1 * (x2 + x3) / (x1 - x2) / (x1 - x3) - y2 * (x1 + x3) / (x2 - x1) / (x2 - x3) - y3 * (x1 + x2) / (x3 - x1) / (x3 - x2);
 
-             this.c = y1 * x2 * x3 / (x1 - x2) / (x1 - x3) + y2 * x1 * x3 / (x2 - x1) / (x2 - x3) + y3 * x1 * x2 / (x3 - x1) / (x3 - x2);
 
-         }
 
-         y(x){
 
-             //console.log(this.a+" "+this.b+" "+this.c);
 
-             return this.a*x*x +this.b*x +this.c;
 
-         }
 
-     },
 
-     Vector2: class{
 
-         constructor() {
 
-             switch(arguments.length) {
 
-                 default:
 
-               case 1:
 
-               this.x = arguments[0].x;
 
-               this.y = arguments[0].y;
 
-                 break;
 
-               case 2:
 
-               this.x = arguments[0];
 
-               this.y = arguments[1];
 
-                 break;
 
-             }
 
-         }
 
-         get length(){
 
-             if(this.x == 0 && this.y == 0)
 
-                 return 0;
 
-             return Math.sqrt(this.x*this.x+this.y*this.y);
 
-         }/** */
 
-         get mod(){
 
-             var length = this.length;
 
-             return new this.constructor(this.x/length,this.y/length);
 
-         }/**/
 
-         radian(anotherVector){//都必须是长度为1的vector
 
-             return Math.asin(Math.sqrt(Math.pow(this.x - anotherVector.x,2)+Math.pow(this.y - anotherVector.y,2))/2)*2; 
 
-         }
 
-         angle(anotherModVector){
 
-             return this.radian(anotherModVector)/Math.PI*180; 
 
-         }
 
-         rotate(radian){
 
-             var cosRadian = Math.cos(radian);
 
-             var sinRadian = Math.sin(radian);
 
-             return new this.constructor(this.x * cosRadian + this.y * sinRadian, this.y * cosRadian - this.x * sinRadian);
 
-         }
 
-         rotateAngle(angle){
 
-             return this.rotate(angle / 180 * Math.PI);
 
-         }
 
-         plus(anotherVector){
 
-             return new this.constructor(this.x + anotherVector.x, this.y + anotherVector.y);
 
-         }
 
-         minus(anotherVector){
 
-             return new this.constructor(this.x - anotherVector.x, this.y - anotherVector.y);
 
-         }
 
-         multiply(num){
 
-             return new this.constructor(this.x * num, this.y * num);
 
-         }
 
-         toLength(length){
 
-             var mod = this.mod;
 
-             return new this.constructor(mod.x * length, mod.y * length);
 
-         }
 
-     },
 
-     Line2:class{
 
-         constructor() {
 
-             switch(arguments.length) {
 
-                 default:
 
-               case 1:
 
-               this.a = arguments[0].a;
 
-               this.b = arguments[0].b;
 
-                 break;
 
-               case 2:
 
-               this.a = arguments[0];
 
-               this.b = arguments[1];
 
-                 break;
 
-               case 4:
 
-               this.a = new module.exports.Vector2(arguments[0],arguments[1]);
 
-               this.b = new module.exports.Vector2(arguments[2],arguments[3]);
 
-                 break;
 
-             }
 
-         }
 
-         vertex(index){
 
-             switch(index){
 
-                 default:
 
-                 case 0:
 
-                     return this.a;
 
-                 case 1:
 
-                     return this.b;
 
-             }
 
-         }
 
-         get vector(){
 
-             return this.b.minus(this.a);
 
-         }
 
-         get length(){
 
-             return this.vector.length;
 
-         }
 
-     },
 
-     Rect:class{
 
-         constructor() {
 
-             switch(arguments.length) {
 
-                 default:
 
-               case 1:
 
-               this.position = arguments[0].position;
 
-               this.size = arguments[0].size;
 
-                 break;
 
-               case 2:
 
-               this.position = arguments[0];
 
-               this.size = arguments[1];
 
-                 break;
 
-               case 4:
 
-               this.position = new module.exports.Vector2(arguments[0],arguments[1]);
 
-               this.size = new module.exports.Vector2(arguments[2],arguments[3]);
 
-                 break;
 
-             }
 
-         }
 
-         vertex(index){
 
-             switch(index){
 
-                 default:
 
-                 case 0:
 
-                     return this.position;
 
-                 case 1:
 
-                     return new module.exports.Vector2(this.position.x,this.position.y+this.size.y);
 
-                 case 2:
 
-                     return this.position.plus(this.size);
 
-                 case 3:
 
-                     return new module.exports.Vector2(this.position.x+this.size.x,this.position.y);
 
-             }
 
-         }//Clockwise
 
-         edge(index){
 
-             switch(index){
 
-                 default:
 
-                 case 0:
 
-                     return new module.exports.Line2(this.vertex(0),this.vertex(1));
 
-                 case 1:
 
-                     return new module.exports.Line2(this.vertex(1),this.vertex(2));
 
-                 case 2:
 
-                     return new module.exports.Line2(this.vertex(2),this.vertex(3));
 
-                 case 3:
 
-                     return new module.exports.Line2(this.vertex(3),this.vertex(0));
 
-             }
 
-         }//Clockwise
 
-         get vertexs(){
 
-             var edges = [];
 
-             for(var i = 0;i<4;++i){
 
-                 edges.push(this.vertex(i));
 
-             }
 
-             return edges;
 
-         }
 
-         get edges(){
 
-             var edges = [];
 
-             for(var i = 0;i<4;++i){
 
-                 edges.push(this.edge(i));
 
-             }
 
-             return edges;
 
-         }
 
-         get pos(){
 
-             return this.position;
 
-         }
 
-         set pos(value){
 
-             this.position = value;
 
-         }
 
-         get x(){
 
-             return this.position.x;
 
-         }
 
-         set x(value){
 
-             this.position.x = value;
 
-         }
 
-         get y(){
 
-             return this.position.y;
 
-         }
 
-         set y(value){
 
-             this.position.y = value;
 
-         }
 
-         get width(){
 
-             return this.size.x;
 
-         }
 
-         set width(value){
 
-             this.size.x = value;
 
-         }
 
-         get height(){
 
-             return this.size.y;
 
-         }
 
-         set height(value){
 
-             this.size.y = value;
 
-         }
 
-     },
 
-     Vector3: class{
 
-         constructor() {
 
-             switch(arguments.length) {
 
-                 default:
 
-                 case 1:
 
-                     this.x = arguments[0].x;
 
-                     this.y = arguments[0].y;
 
-                     this.z = arguments[0].z;
 
-                     break;
 
-                 case 3:
 
-                     this.x = arguments[0];
 
-                     this.y = arguments[1];
 
-                     this.z = arguments[2];
 
-                     break;
 
-             }
 
-         }
 
-         get length(){
 
-             if(this.x == 0 && this.y == 0 && this.z == 0)
 
-                 return 0;
 
-             return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z);
 
-         }/** */
 
-         get mod(){
 
-             var length = this.length;
 
-             return new this.constructor(this.x/length,this.y/length,this.z/length);
 
-         }
 
-         plus(anotherVector){
 
-             return new this.constructor(this.x + anotherVector.x, this.y + anotherVector.y, this.z + anotherVector.z);
 
-         }
 
-         minus(anotherVector){
 
-             return new this.constructor(this.x - anotherVector.x, this.y - anotherVector.y, this.z - anotherVector.z);
 
-         }
 
-         multiply(num){
 
-             return new this.constructor(this.x * num, this.y * num, this.z * num);
 
-         }
 
-         toLength(length){
 
-             var mod = this.mod;
 
-             return new this.constructor(mod.x * length, mod.y * length, mod.z * length);
 
-         }
 
-     },
 
-     isSameSign:function(a,b){
 
-         if((a>=0&&b>=0)||(a<=0&&b<=0)){
 
-             return true;
 
-         }
 
-         return false;
 
-     },
 
-     distance2:function(a,b){
 
-         var distance = Math.sqrt(Math.pow(a.x-b.x,2)+Math.pow(a.y-b.y,2));
 
-         switch(arguments.length) {
 
-             default:
 
-             case 2:
 
-                 return distance;
 
-             case 3:
 
-                 var vector = arguments[2];//vector must be in same line with a b
 
-                 if(module.exports.isSameSign(b.x - a.x,vector.x)&&module.exports.isSameSign(b.y - a.y,vector.y)){
 
-                     return distance;
 
-                 }else{
 
-                     return -distance;
 
-                 }
 
-         }
 
-     },
 
-     maxLengthLine2:function(vertexs){
 
-         if(vertexs.length==0){
 
-             return null;
 
-         }
 
-         if(vertexs.length==1){
 
-             return new module.exports.Line2(vertexs[0],vertexs[0]);
 
-         }
 
-         var maxLengthLine = null;
 
-         var maxLength = -1;
 
-         for(var i = 0;i<vertexs.length-1;++i){            
 
-             for(var j = i+1;j<vertexs.length;++j){
 
-                 var newLine = new module.exports.Line2(vertexs[i],vertexs[j]);
 
-                 var newLength = newLine.length;
 
-                 if(maxLength < newLength){
 
-                     maxLength = newLength;
 
-                     maxLengthLine = newLine;
 
-                 }
 
-             }
 
-         }
 
-         return maxLengthLine;
 
-     },
 
-     randomInCircle2:function(){
 
-         var center;//diameter
 
-         var size;//diameter
 
-         switch(arguments.length) {
 
-             default:
 
-             case 1:
 
-                 center = new module.exports.Vector2(0,0);
 
-                 size = arguments[0];
 
-                 break;
 
-             case 2:
 
-                 center = arguments[0];
 
-                 size = arguments[1];
 
-                 break;
 
-         }
 
-         return new module.exports.Vector2(1,0).rotate(Math.random() * Math.PI*2).toLength(Math.sqrt(Math.random()*Math.pow(size/2,2))).plus(center);
 
-     },
 
-     intersectionLineLine2:function(){//for 2D //https://en.wikipedia.org/wiki/Line%E2%80%93line_intersection
 
-         var p11,p12,p21,p22;
 
-         switch(arguments.length) {
 
-             default:
 
-             case 4:
 
-                 p11 = arguments[0];
 
-                 p12 = arguments[1];
 
-                 p21 = arguments[2];
 
-                 p22 = arguments[3];
 
-                 break;
 
-             case 2:
 
-                 p11 = arguments[0].a;
 
-                 p12 = arguments[0].b;
 
-                 p21 = arguments[1].a;
 
-                 p22 = arguments[1].b;
 
-                 break;
 
-         }
 
-         var denominator = (p11.x-p12.x)*(p21.y-p22.y) - (p11.y-p12.y)*(p21.x-p22.x);
 
-         if(denominator == 0){
 
-             return null;
 
-         }
 
-         var t = ((p11.x-p21.x)*(p21.y-p22.y) - (p11.y-p21.y)*(p21.x-p22.x))/denominator;
 
-         var u = ((p11.x-p12.x)*(p11.y-p21.y) - (p11.y-p12.y)*(p11.x-p21.x))/denominator;
 
-         return new module.exports.Vector2(p11.x+t*(p12.x-p11.x),p11.y+t*(p12.y-p11.y));
 
-     },
 
-     arrangeInLine1:function(p1, p2, vector){//1维//vector为正,p1小于p2
 
-         var values = [];
 
-         for(var i =  Math.ceil(p1/vector)*vector;i<=p2;i+=vector){
 
-             values.push(i);
 
-         }
 
-         return values;
 
-     },
 
-     arrangeInLine2:function(){//3点必须在1线
 
-         //return [];
 
-         var p1, p2, origin, vector;
 
-         switch(arguments.length) {
 
-             default:
 
-             case 4:
 
-                 p1 = arguments[0];
 
-                 p2 = arguments[1];
 
-                 origin = arguments[2];
 
-                 vector = arguments[3];
 
-                 break;
 
-             case 3:
 
-                 if(arguments[0] == null){
 
-                     return [];
 
-                 } 
 
-                 p1 = arguments[0].a;
 
-                 p2 = arguments[0].b;
 
-                 origin = arguments[1];
 
-                 vector = arguments[2];
 
-                 break;
 
-         }
 
-         var begin,end;
 
-         if(module.exports.isSameSign(p2.x - p1.x,vector.x)&&module.exports.isSameSign(p2.y - p1.y,vector.y)){
 
-             begin = p1;
 
-             end = p2;
 
-         }else{
 
-             begin = p2;
 
-             end = p1;
 
-         }
 
-         if(module.exports.isSameSign(begin.x - origin.x,vector.x)&&module.exports.isSameSign(begin.y - origin.y,vector.y)){
 
-             begin = module.exports.distance2(origin,begin);
 
-         }else{
 
-             begin = -module.exports.distance2(origin,begin);
 
-         }
 
-         if(module.exports.isSameSign(end.x - origin.x,vector.x)&&module.exports.isSameSign(end.y - origin.y,vector.y)){
 
-             end = module.exports.distance2(origin,end);
 
-         }else{
 
-             end = -module.exports.distance2(origin,end);
 
-         }
 
-         var points = [];
 
-         var modVector = vector.mod;
 
-         var values = module.exports.arrangeInLine1(begin, end, vector.length);
 
-         for(var i = 0;i<values.length;++i){
 
-             points.push(origin.plus(modVector.multiply(values[i])));
 
-         }
 
-         return points;/** */        
 
-     },
 
-     pointOnLineSegment(line,point){
 
-         var acceptableError = line.length / 1000000;//存在计算误差
 
-         var v1 = line.a.minus(point);
 
-         var v2 = line.b.minus(point);
 
-         if(module.exports.isSameSign(v1.x,v2.x)&&module.exports.isSameSign(v1.y,v2.y)&&v1.length>=acceptableError&&v2.length>=acceptableError){//存在计算误差
 
-             return false;
 
-         }
 
-         return true;
 
-     },
 
-     lineSegmentInRect(rect,line){
 
-         var edge = rect.edges;
 
-         var ip = [];
 
-         for(var i = 0;i<edge.length;++i){
 
-             var newIp = module.exports.intersectionLineLine2(edge[i], line);
 
-             if(newIp != null &&module.exports.pointOnLineSegment(edge[i],newIp)){
 
-                 ip.push(newIp);
 
-             }
 
-         }
 
-         return module.exports.maxLengthLine2(ip);/** */
 
-     },
 
-     arrangeInRect2:function(rect, origin, horizontalVector, verticalVector){
 
-         var ip = [];
 
-         for(var i = 0; i < 4;++i){
 
-             ip.push(module.exports.intersectionLineLine2(origin,origin.plus(verticalVector),rect.vertex(i),rect.vertex(i).plus(horizontalVector)));
 
-         }
 
-         if(module.exports.distance2(ip[0],ip[2]) > module.exports.distance2(ip[1],ip[3])){
 
-             ip = [ip[0],ip[2],ip[1],ip[3]];//verticalBegin;verticalEnd;horizontalBegin;horizontalEnd;
 
-         }else{
 
-             ip = [ip[1],ip[3],ip[0],ip[2]];//verticalBegin;verticalEnd;horizontalBegin;horizontalEnd;
 
-         }
 
-         var pos = [];
 
-         var verticalPoints = module.exports.arrangeInLine2(ip[0],ip[1],origin,verticalVector);
 
-         for(var i = 0; i<verticalPoints.length;++i){
 
-             var lineSegmentInRect = module.exports.lineSegmentInRect(rect,new module.exports.Line2(verticalPoints[i],verticalPoints[i].plus(horizontalVector)));//}/*
 
-             var horizontalPoints = module.exports.arrangeInLine2(lineSegmentInRect,verticalPoints[i],horizontalVector);
 
-             pos = pos.concat(horizontalPoints);
 
-         }
 
-         return pos;/** */
 
-         //return verticalPoints;
 
-     }
 
- };
 
 
  |