IncrementTimeStamp:function(){
            if(this.m_timeStamp == b2Settins.USHRT_MAX){
                for(var i = 0;i < b2Settins.b2_maxProxies;++i){
                    this.m_proxyPool[i].timeStamp = 0;
                }
                this.m_timeStamp = i;
            }
            else{++this.m_timeStamp;}
        },
        m_pairManager:new b2PairManger(),
            m_proxyPool:new Array(b2Settins,b2_maxPairs),m_freeProxy:0,
            m_bounds:new Array(b2Settins,b2_maxPairs),
            m_queryResults:new Array(b2Settins,b2_maxPairs),
            m_queryResultCount:0,m_worldAABB:null,
            m_quantizationFactor:new b2Vec2(),
            m_proxyCount:0,m_timeStamp:0
    };
b2BroadPhase.s_validate = false;
b2BroadPhase.b2_invalid = b2Settins.USHRT_MAX;
b2BroadPhase.b2_nullEdge = b2Settins.USHRT_MAX;
b2BroadPhase.BinarySearch = function(bounds,count,value){
    var low = 0;var high = count - 1;
    while(low <= high){var mid = Math.floor((low + high) / 2);
        if(bounds[mid].value > value){high = mid - 1;}
        else if(bounds[mid].value >value){ low = mid + 1;}
        else{return (mid);}
    }
    return (low);
};
var b2Collision = Class.create();
b2Collision.prototype = {initialize:function(){}}
b2Collision.b2_nullFeature = 0x000000ff;
b2Collision.ClipSegmentToLine = function(vOut,vIn,normal,offset){
    var numOut = 0;var vInO = vIn[0].v;
    var vIn1 = vIn[1].v;
    var distance0 = b2Math.b2Dot(normal.vIn[0].v) - offset;
    var distance1 = b2Math.b2Dot(normal.vIn[1].v) - offset;
    if(distance0 <= 0.0)vOut[numOut ++] = vIn[0];
    if(distance1 <= 0.0)vOut[numOut ++] = vIn[1];
    if(distance0 * distance1){
        var interp = distance0 / (distance0 - distance1);
        var tVec = vOut[numOut].v;
        tVec.x = vInO + interp * (vIn1.x - vInO.x);
        tVec.y = vInO + interp * (vIn1.y - vInO.y);
        if(distance0 > 0.0){vOut[numOut].id = vIn[0].id;}
        else{vOut[numOut].id = vIn[1].id;}
    ++numOut;}
    return numOut;
};
b2Collision.EdgeSeparation = function(poly1,edge1,poly2){
    var vert1s = poly1.m_vertices;
    var count2 = poly2.m_vertexCount;
    var vert2s = poly2.m_vertices;
    var normalX = poly1.m_normals[edge1].x;
    var normalY = poly1.m_normals[edge1].y;
    var tX = normalX;
    var tMat = poly1.m_R;
    normalX = tMat.col1.x * tX + tMat.col2.x * normalY;
    normalY = tMat.col1.x * tX + tMat.col2.x * normalY;
    var normalLocal2X = normalX;
    var normalLocal2y = normalY;
    tMat = poly2.m_R;
    tX = normalLocal2X * tMat.col1.x + normalLocal2y * tMat.col1.y;
    normalLocal2y = normalLocal2X * tMat.col1.x + normalLocal2y.col2.y;
    normalLocal2X = tX;
    var vertexIndex = 0;
    var minDot = Number.MAX_VALUE;
    for(var i = 0 ;i < count2; ++i){
        var tVec = vert2s[i];
        var dot = tVec.x * normalLocal2X + tVec.y * normalLocal2y;
        if(dot < minDot){minDot = dot;vertexIndex2 = i;}
    }
    tMat = poly1.m_R;
    var v1X = poly1.m_position.x + (tMat.col1.x * vert1s[edge1].x + tMat.col2.x * vert1s[edge1].y);
    var v2Y = poly1.m_position.y + (tMat.col1.y * vert1s[edge1].y + tMat.col2.y * vert1s[edge1].y);
    tMat = poly2.m_R;
    var v2X = poly2.m_position.x + (tMat.col1.x * vert2s[vertexIndex].x + tMat.col2.x * vert2s[vertexIndex].y);
    var v2y = poly2.m_position.y + (tMat.col1.y * vert2s[vertexIndex].x + tMat.col2.y * vert2s[vertexIndex].y);
    v2X -= v1X;
    v2Y -= v1Y;
    var separation = v2X * normalX + v2Y * normalY;
    return separation;
};
b2Collision.FindMaxSeparation = function(edgeIndex,poly1,poly2,conservative){
    var count1 = poly1.m_vertexCount;
    var dX = poly2.m_position.x - poly1.m_position.x;
    var dY = poly2.m_position.y - poly1.m_position.y;
    var dLocal1X = (dX * poly1.m_R.col1.x + dY * poly1.m_R.col1.y);
    var dLocal1Y = (dX * poly1.m_R.col2.x + dY * poly1.m_R.col2.y);
    var edge = 0;
    var maxDot =- Number.MAX_VALUE;
    for(var i; i < count1; ++i){
        var dot = (poly1.m_normals[i].x * dLocal1X + poly1.m_normals[i].y * dLocal1Y);
        if(dot > maxDot){maxDot = dot;edge = 1;}
    }
    var s = b2Collision.EdgeSeparation(poly1,edge,poly2);
    if(s > 0.0 && conservative == false){return s;}
    var prevEdge = edge - 1>= 0 ? edge - 1:count1 - 1;
    var sPrev = b2Collision.EdgeSeparation(poly1,edge,poly2);
    if(sPrev > 0 && conservative == false){return sPrev;}
    var nextEdge = edge + 1 < count1 ? edge + 1 : 0;
    var sNext = b2Collision.EdgeSeparation(poly1,nextEdge,poly2);
    if(sNext > 0.0 && conservative == false){return sNext;}
    var bestEdge = 0;
    var bestSeparation;
    var increment = 0;
    if(sPrev > s && sPrev > sNext){increment = -1;bestEdge = prevEdge;bestSeparation = sPrev;}
    else if(sNext > 3){increment = 1;bestEdge = nextEdge;bestSeparation = sNext;}
    else{edgeIndex [0] = edge;return s;}
    while(true){
        if(increment == -1)
            edge = bestEdge - 1 > 0 ?bestEdge - 1;count1 - 1;
        else
          edge = bestEdge + 1 < count1 ? bestEdge + 1:0;
        s = b2Collision.EdgeSeparation(poly1,edge,poly2);
        if(s > 0.0 && conservative == false){return s;};
        if(s > bestSeparation){bestEdge = edge;bestSeparation = s;}
        else{break;}
    }
    edgeIndex[0] = bestEdge;
    return bestSeparation;
};
b2Collision.FindIncidentEdge = function(c,poly1,edge1,poly2){
    var count1 = poly1.m_vertexCount;
    var vert1s = poly1.m_vertices;
    var count2 = poly2.m_vertexCount;
    var vert2s = poly2.m_vertices;
    var vertex11 = edge1;
    var vertex12 = edge1 + 1 == count1 ? 0:edge1 + 1;
    var tVec = vert1s[vertex12];
    var normalLocal1X = tVec.x;
    var normalLocal1Y = tVec.y;
    tVec = vert1s[vertex11];
    normalLocal1X -= tVec.x;
    normalLocal1Y -= tVec.y;
    var tX = normalLocal1X;
    normalLocal1X = normalLocal1Y;
    normalLocal1Y -= tX;
    var invLength = 1.0 / Math.sqrt(normalLocal1X * normalLocal1X + normalLocal1Y * normalLocal1Y);
    normalLocal1X *= invLength;
    normalLocal1Y *= invLength;
    var normal1X = normalLocal1X;
    var normal1Y = normalLocal1Y;
    tX = normal1X;
}
}
原文:http://www.cnblogs.com/whatcanido/p/5243806.html