本文来自http://blog.csdn.net/runaying ,引用必须注明出处!
cocos2d-x节点(b2Math.h)API
温馨提醒:为了大家能更好学习,强烈推荐大家看看本人的这篇博客 Cocos2d-X权威指南笔记
//Box2d的公共模块中,包含的一个小巧而简便的向量矩阵的数学库。
//主要由以下内容:
//a)、向量,包括二维列向量和三维列向量
//b)、矩阵,包括2X2矩阵和3X3矩阵
//c)、旋度、扫描、和变换的实现
//d)、其他部分的实现
///cocos2d-x-3.0alpha0/external/Box2D/Common
//Box2d的公共模块中,包含的一个小巧而简便的向量矩阵的数学库。
//主要由以下内容:
//a)、向量,包括二维列向量和三维列向量
//b)、矩阵,包括2X2矩阵和3X3矩阵
//c)、旋度、扫描、和变换的实现
//d)、其他部分的实现
#ifndef B2_MATH_H
#define B2_MATH_H
#include <Box2D/Common/b2Settings.h>
#include <cmath>
#ifndef SHP
#include <cfloat>
#else
#include <float.h>
#endif
#include <cstddef>
#include <limits>
using namespace std;
/// 用来确保一个浮点数不是一个NaN或无穷大
//* 参数说明: x :数值
//* 返 回 值: true :有效
//false: 无效
inline bool b2IsValid(float32 x)
{
if (x != x)
{
// NaN.
return false;
}
float32 infinity = std::numeric_limits<float32>::infinity();
return -infinity < x && x < infinity;
}
//一个近似且快速的平方根倒数算法[x^ (-1/2) ]
//可以参照 http://zh.wikipedia.org/wiki/平方根倒数速算法
//或 http://en.wikipedia.org/wiki/Fast_inverse_square_root
//* 参数说明: x :数值
//* 返 回 值: 平方根倒数
inline float32 b2InvSqrt(float32 x)
{
union
{
float32 x;
int32 i;
} convert;
convert.x = x;
float32 xhalf = 0.5f * x;
convert.i = 0x5f3759df - (convert.i >> 1);
x = convert.x;
x = x * (1.5f - xhalf * x * x); //第一次牛顿迭代
return x;
}
//平方根宏
#define b2Sqrt(x) std::sqrt(x)
//对于任意不同时等于0的实参数x和y,
//atan2(y,x)所表达的意思是坐标原点为起点,
//指向(y,x)的射线在坐标平面上与x轴正方向之间的角的角度度
//参照 http://zh.wikipedia.org/wiki/Atan2
#define b2Atan2(y, x) std::atan2(y, x)
///2d列向量
struct b2Vec2
{
/// 构造函数,不做任何事,仅仅为了性能
b2Vec2() {}
///构造函数,构建使用的坐标
b2Vec2(float32 x, float32 y) : x(x), y(y) {}
/// 将向量置0
void SetZero() { x = 0.0f; y = 0.0f; }
/// 将向量设置成指定的坐标
void Set(float32 x_, float32 y_) { x = x_;