API Docs for: 1.0.0
Show:

File: src\fork\box2d\common\math\b2Math.js

/*
* Copyright (c) 2006-2007 Erin Catto http:
*
* This software is provided 'as-is', without any express or implied
* warranty.  In no event will the authors be held liable for any damages
* arising from the use of this software.
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* 2. Altered source versions must be plainly marked, and must not be
* misrepresented the original software.
* 3. This notice may not be removed or altered from any source distribution.
*/


/**
 * @class b2Math
 * @constructor
 */
var b2Math = function () {};
b2Math.prototype = {

	/*static public function b2InvSqrt(x)
	{
		float32 xhalf = 0.5f * x;
		int32 i = *(int32*)&x;
		i = 0x5f3759df - (i >> 1);
		x = *(float32*)&i;
		x = x * (1.5f - xhalf * x * x);
		return x;
	}*/

	// A * B

	// A^T * B

	// b2Math.b2Random number in range [-1,1]

	/*inline float32 b2Math.b2Random(float32 lo, float32 hi)
	{
		float32 r = (float32)rand();
		r /= RAND_MAX;
		r = (hi - lo) * r + lo;
		return r;
	}*/

	// "Next Largest Power of 2
	// Given a binary integer value x, the next largest power of 2 can be computed by a SWAR algorithm
	// that recursively "folds" the upper bits into the lower bits. This process yields a bit vector with
	// the same most significant 1, but all 1's below it. Adding 1 to that value yields the next
	// largest power of 2. For a 32-bit value:"



	// Temp vector functions to reduce calls to 'new'
	/*static public var tempVec = new b2Vec2();


	static public var tempAABB = new b2AABB();	*/
};

b2Math.b2IsValid = function(x)
{
	return isFinite(x);
};
b2Math.b2Dot = function(a, b)
{
	return a.x * b.x + a.y * b.y;
};
b2Math.b2CrossVV = function(a, b)
{
	return a.x * b.y - a.y * b.x;
};
b2Math.b2CrossVF = function(a, s)
{
	var v = new b2Vec2(s * a.y, -s * a.x);
	return v;
};
b2Math.b2CrossFV = function(s, a)
{
	var v = new b2Vec2(-s * a.y, s * a.x);
	return v;
};
b2Math.b2MulMV = function(A, v)
{
	var u = new b2Vec2(A.col1.x * v.x + A.col2.x * v.y, A.col1.y * v.x + A.col2.y * v.y);
	return u;
};
b2Math.b2MulTMV = function(A, v)
{
	var u = new b2Vec2(b2Math.b2Dot(v, A.col1), b2Math.b2Dot(v, A.col2));
	return u;
};
b2Math.AddVV = function(a, b)
{
	var v = new b2Vec2(a.x + b.x, a.y + b.y);
	return v;
};
b2Math.SubtractVV = function(a, b)
{
	var v = new b2Vec2(a.x - b.x, a.y - b.y);
	return v;
};
b2Math.MulFV = function(s, a)
{
	var v = new b2Vec2(s * a.x, s * a.y);
	return v;
};
b2Math.AddMM = function(A, B)
{
	var C = new b2Mat22(0, b2Math.AddVV(A.col1, B.col1), b2Math.AddVV(A.col2, B.col2));
	return C;
};
b2Math.b2MulMM = function(A, B)
{
	var C = new b2Mat22(0, b2Math.b2MulMV(A, B.col1), b2Math.b2MulMV(A, B.col2));
	return C;
};
b2Math.b2MulTMM = function(A, B)
{
	var c1 = new b2Vec2(b2Math.b2Dot(A.col1, B.col1), b2Math.b2Dot(A.col2, B.col1));
	var c2 = new b2Vec2(b2Math.b2Dot(A.col1, B.col2), b2Math.b2Dot(A.col2, B.col2));
	var C = new b2Mat22(0, c1, c2);
	return C;
};
b2Math.b2Abs = function(a)
{
	return a > 0.0 ? a : -a;
};
b2Math.b2AbsV = function(a)
{
	var b = new b2Vec2(b2Math.b2Abs(a.x), b2Math.b2Abs(a.y));
	return b;
};
b2Math.b2AbsM = function(A)
{
	var B = new b2Mat22(0, b2Math.b2AbsV(A.col1), b2Math.b2AbsV(A.col2));
	return B;
};
b2Math.b2Min = function(a, b)
{
	return a < b ? a : b;
};
b2Math.b2MinV = function(a, b)
{
	var c = new b2Vec2(b2Math.b2Min(a.x, b.x), b2Math.b2Min(a.y, b.y));
	return c;
};
b2Math.b2Max = function(a, b)
{
	return a > b ? a : b;
};
b2Math.b2MaxV = function(a, b)
{
	var c = new b2Vec2(b2Math.b2Max(a.x, b.x), b2Math.b2Max(a.y, b.y));
	return c;
};
b2Math.b2Clamp = function(a, low, high)
{
	return b2Math.b2Max(low, b2Math.b2Min(a, high));
};
b2Math.b2ClampV = function(a, low, high)
{
	return b2Math.b2MaxV(low, b2Math.b2MinV(a, high));
};
b2Math.b2Swap = function(a, b)
{
	var tmp = a[0];
	a[0] = b[0];
	b[0] = tmp;
};
b2Math.b2Random = function()
{
	return Math.random() * 2 - 1;
};
b2Math.b2NextPowerOfTwo = function(x)
{
	x |= (x >> 1) & 0x7FFFFFFF;
	x |= (x >> 2) & 0x3FFFFFFF;
	x |= (x >> 4) & 0x0FFFFFFF;
	x |= (x >> 8) & 0x00FFFFFF;
	x |= (x >> 16)& 0x0000FFFF;
	return x + 1;
};
b2Math.b2IsPowerOfTwo = function(x)
{
	var result = x > 0 && (x & (x - 1)) == 0;
	return result;
};

b2Math.tempVec2 = new b2Vec2();
b2Math.tempVec3 = new b2Vec2();
b2Math.tempVec4 = new b2Vec2();
b2Math.tempVec5 = new b2Vec2();
b2Math.tempMat = new b2Mat22();