mirror of https://github.com/axmolengine/axmol.git
Merge branch 'point_math' of https://github.com/moadib/cocos2d-x
This commit is contained in:
commit
0738f751d1
|
@ -59,7 +59,7 @@ namespace cocos2d {
|
||||||
@since v0.7.2
|
@since v0.7.2
|
||||||
*/
|
*/
|
||||||
static inline CCPoint
|
static inline CCPoint
|
||||||
ccpNeg(const CCPoint v)
|
ccpNeg(const CCPoint& v)
|
||||||
{
|
{
|
||||||
return ccp(-v.x, -v.y);
|
return ccp(-v.x, -v.y);
|
||||||
}
|
}
|
||||||
|
@ -69,7 +69,7 @@ ccpNeg(const CCPoint v)
|
||||||
@since v0.7.2
|
@since v0.7.2
|
||||||
*/
|
*/
|
||||||
static inline CCPoint
|
static inline CCPoint
|
||||||
ccpAdd(const CCPoint v1, const CCPoint v2)
|
ccpAdd(const CCPoint& v1, const CCPoint& v2)
|
||||||
{
|
{
|
||||||
return ccp(v1.x + v2.x, v1.y + v2.y);
|
return ccp(v1.x + v2.x, v1.y + v2.y);
|
||||||
}
|
}
|
||||||
|
@ -79,7 +79,7 @@ ccpAdd(const CCPoint v1, const CCPoint v2)
|
||||||
@since v0.7.2
|
@since v0.7.2
|
||||||
*/
|
*/
|
||||||
static inline CCPoint
|
static inline CCPoint
|
||||||
ccpSub(const CCPoint v1, const CCPoint v2)
|
ccpSub(const CCPoint& v1, const CCPoint& v2)
|
||||||
{
|
{
|
||||||
return ccp(v1.x - v2.x, v1.y - v2.y);
|
return ccp(v1.x - v2.x, v1.y - v2.y);
|
||||||
}
|
}
|
||||||
|
@ -89,7 +89,7 @@ ccpSub(const CCPoint v1, const CCPoint v2)
|
||||||
@since v0.7.2
|
@since v0.7.2
|
||||||
*/
|
*/
|
||||||
static inline CCPoint
|
static inline CCPoint
|
||||||
ccpMult(const CCPoint v, const CGFloat s)
|
ccpMult(const CCPoint& v, const CGFloat s)
|
||||||
{
|
{
|
||||||
return ccp(v.x*s, v.y*s);
|
return ccp(v.x*s, v.y*s);
|
||||||
}
|
}
|
||||||
|
@ -99,7 +99,7 @@ ccpMult(const CCPoint v, const CGFloat s)
|
||||||
@since v0.7.2
|
@since v0.7.2
|
||||||
*/
|
*/
|
||||||
static inline CCPoint
|
static inline CCPoint
|
||||||
ccpMidpoint(const CCPoint v1, const CCPoint v2)
|
ccpMidpoint(const CCPoint& v1, const CCPoint& v2)
|
||||||
{
|
{
|
||||||
return ccpMult(ccpAdd(v1, v2), 0.5f);
|
return ccpMult(ccpAdd(v1, v2), 0.5f);
|
||||||
}
|
}
|
||||||
|
@ -109,7 +109,7 @@ ccpMidpoint(const CCPoint v1, const CCPoint v2)
|
||||||
@since v0.7.2
|
@since v0.7.2
|
||||||
*/
|
*/
|
||||||
static inline CGFloat
|
static inline CGFloat
|
||||||
ccpDot(const CCPoint v1, const CCPoint v2)
|
ccpDot(const CCPoint& v1, const CCPoint& v2)
|
||||||
{
|
{
|
||||||
return v1.x*v2.x + v1.y*v2.y;
|
return v1.x*v2.x + v1.y*v2.y;
|
||||||
}
|
}
|
||||||
|
@ -119,7 +119,7 @@ ccpDot(const CCPoint v1, const CCPoint v2)
|
||||||
@since v0.7.2
|
@since v0.7.2
|
||||||
*/
|
*/
|
||||||
static inline CGFloat
|
static inline CGFloat
|
||||||
ccpCross(const CCPoint v1, const CCPoint v2)
|
ccpCross(const CCPoint& v1, const CCPoint& v2)
|
||||||
{
|
{
|
||||||
return v1.x*v2.y - v1.y*v2.x;
|
return v1.x*v2.y - v1.y*v2.x;
|
||||||
}
|
}
|
||||||
|
@ -129,7 +129,7 @@ ccpCross(const CCPoint v1, const CCPoint v2)
|
||||||
@since v0.7.2
|
@since v0.7.2
|
||||||
*/
|
*/
|
||||||
static inline CCPoint
|
static inline CCPoint
|
||||||
ccpPerp(const CCPoint v)
|
ccpPerp(const CCPoint& v)
|
||||||
{
|
{
|
||||||
return ccp(-v.y, v.x);
|
return ccp(-v.y, v.x);
|
||||||
}
|
}
|
||||||
|
@ -139,7 +139,7 @@ ccpPerp(const CCPoint v)
|
||||||
@since v0.7.2
|
@since v0.7.2
|
||||||
*/
|
*/
|
||||||
static inline CCPoint
|
static inline CCPoint
|
||||||
ccpRPerp(const CCPoint v)
|
ccpRPerp(const CCPoint& v)
|
||||||
{
|
{
|
||||||
return ccp(v.y, -v.x);
|
return ccp(v.y, -v.x);
|
||||||
}
|
}
|
||||||
|
@ -149,7 +149,7 @@ ccpRPerp(const CCPoint v)
|
||||||
@since v0.7.2
|
@since v0.7.2
|
||||||
*/
|
*/
|
||||||
static inline CCPoint
|
static inline CCPoint
|
||||||
ccpProject(const CCPoint v1, const CCPoint v2)
|
ccpProject(const CCPoint& v1, const CCPoint& v2)
|
||||||
{
|
{
|
||||||
return ccpMult(v2, ccpDot(v1, v2)/ccpDot(v2, v2));
|
return ccpMult(v2, ccpDot(v1, v2)/ccpDot(v2, v2));
|
||||||
}
|
}
|
||||||
|
@ -159,7 +159,7 @@ ccpProject(const CCPoint v1, const CCPoint v2)
|
||||||
@since v0.7.2
|
@since v0.7.2
|
||||||
*/
|
*/
|
||||||
static inline CCPoint
|
static inline CCPoint
|
||||||
ccpRotate(const CCPoint v1, const CCPoint v2)
|
ccpRotate(const CCPoint& v1, const CCPoint& v2)
|
||||||
{
|
{
|
||||||
return ccp(v1.x*v2.x - v1.y*v2.y, v1.x*v2.y + v1.y*v2.x);
|
return ccp(v1.x*v2.x - v1.y*v2.y, v1.x*v2.y + v1.y*v2.x);
|
||||||
}
|
}
|
||||||
|
@ -169,7 +169,7 @@ ccpRotate(const CCPoint v1, const CCPoint v2)
|
||||||
@since v0.7.2
|
@since v0.7.2
|
||||||
*/
|
*/
|
||||||
static inline CCPoint
|
static inline CCPoint
|
||||||
ccpUnrotate(const CCPoint v1, const CCPoint v2)
|
ccpUnrotate(const CCPoint& v1, const CCPoint& v2)
|
||||||
{
|
{
|
||||||
return ccp(v1.x*v2.x + v1.y*v2.y, v1.y*v2.x - v1.x*v2.y);
|
return ccp(v1.x*v2.x + v1.y*v2.y, v1.y*v2.x - v1.x*v2.y);
|
||||||
}
|
}
|
||||||
|
@ -179,7 +179,7 @@ ccpUnrotate(const CCPoint v1, const CCPoint v2)
|
||||||
@since v0.7.2
|
@since v0.7.2
|
||||||
*/
|
*/
|
||||||
static inline CGFloat
|
static inline CGFloat
|
||||||
ccpLengthSQ(const CCPoint v)
|
ccpLengthSQ(const CCPoint& v)
|
||||||
{
|
{
|
||||||
return ccpDot(v, v);
|
return ccpDot(v, v);
|
||||||
}
|
}
|
||||||
|
@ -188,19 +188,19 @@ ccpLengthSQ(const CCPoint v)
|
||||||
@return CGFloat
|
@return CGFloat
|
||||||
@since v0.7.2
|
@since v0.7.2
|
||||||
*/
|
*/
|
||||||
CGFloat CC_DLL ccpLength(const CCPoint v);
|
CGFloat CC_DLL ccpLength(const CCPoint& v);
|
||||||
|
|
||||||
/** Calculates the distance between two points
|
/** Calculates the distance between two points
|
||||||
@return CGFloat
|
@return CGFloat
|
||||||
@since v0.7.2
|
@since v0.7.2
|
||||||
*/
|
*/
|
||||||
CGFloat CC_DLL ccpDistance(const CCPoint v1, const CCPoint v2);
|
CGFloat CC_DLL ccpDistance(const CCPoint& v1, const CCPoint& v2);
|
||||||
|
|
||||||
/** Returns point multiplied to a length of 1.
|
/** Returns point multiplied to a length of 1.
|
||||||
@return CCPoint
|
@return CCPoint
|
||||||
@since v0.7.2
|
@since v0.7.2
|
||||||
*/
|
*/
|
||||||
CCPoint CC_DLL ccpNormalize(const CCPoint v);
|
CCPoint CC_DLL ccpNormalize(const CCPoint& v);
|
||||||
|
|
||||||
/** Converts radians to a normalized vector.
|
/** Converts radians to a normalized vector.
|
||||||
@return CCPoint
|
@return CCPoint
|
||||||
|
@ -212,7 +212,7 @@ CCPoint CC_DLL ccpForAngle(const CGFloat a);
|
||||||
@return CGFloat
|
@return CGFloat
|
||||||
@since v0.7.2
|
@since v0.7.2
|
||||||
*/
|
*/
|
||||||
CGFloat CC_DLL ccpToAngle(const CCPoint v);
|
CGFloat CC_DLL ccpToAngle(const CCPoint& v);
|
||||||
|
|
||||||
|
|
||||||
/** Clamp a value between from and to.
|
/** Clamp a value between from and to.
|
||||||
|
@ -223,12 +223,12 @@ float CC_DLL clampf(float value, float min_inclusive, float max_inclusive);
|
||||||
/** Clamp a point between from and to.
|
/** Clamp a point between from and to.
|
||||||
@since v0.99.1
|
@since v0.99.1
|
||||||
*/
|
*/
|
||||||
CCPoint CC_DLL ccpClamp(CCPoint p, CCPoint from, CCPoint to);
|
CCPoint CC_DLL ccpClamp(const CCPoint& p, const CCPoint& from, const CCPoint& to);
|
||||||
|
|
||||||
/** Quickly convert CCSize to a CCPoint
|
/** Quickly convert CCSize to a CCPoint
|
||||||
@since v0.99.1
|
@since v0.99.1
|
||||||
*/
|
*/
|
||||||
CCPoint CC_DLL ccpFromSize(CCSize s);
|
CCPoint CC_DLL ccpFromSize(const CCSize& s);
|
||||||
|
|
||||||
/** Run a math operation function on each point component
|
/** Run a math operation function on each point component
|
||||||
* absf, fllorf, ceilf, roundf
|
* absf, fllorf, ceilf, roundf
|
||||||
|
@ -237,7 +237,7 @@ CCPoint CC_DLL ccpFromSize(CCSize s);
|
||||||
* ccpCompOp(p,floorf);
|
* ccpCompOp(p,floorf);
|
||||||
@since v0.99.1
|
@since v0.99.1
|
||||||
*/
|
*/
|
||||||
CCPoint CC_DLL ccpCompOp(CCPoint p, float (*opFunc)(float));
|
CCPoint CC_DLL ccpCompOp(const CCPoint& p, float (*opFunc)(float));
|
||||||
|
|
||||||
/** Linear Interpolation between two points a and b
|
/** Linear Interpolation between two points a and b
|
||||||
@returns
|
@returns
|
||||||
|
@ -246,30 +246,30 @@ CCPoint CC_DLL ccpCompOp(CCPoint p, float (*opFunc)(float));
|
||||||
otherwise a value between a..b
|
otherwise a value between a..b
|
||||||
@since v0.99.1
|
@since v0.99.1
|
||||||
*/
|
*/
|
||||||
CCPoint CC_DLL ccpLerp(CCPoint a, CCPoint b, float alpha);
|
CCPoint CC_DLL ccpLerp(const CCPoint& a, const CCPoint& b, float alpha);
|
||||||
|
|
||||||
|
|
||||||
/** @returns if points have fuzzy equality which means equal with some degree of variance.
|
/** @returns if points have fuzzy equality which means equal with some degree of variance.
|
||||||
@since v0.99.1
|
@since v0.99.1
|
||||||
*/
|
*/
|
||||||
bool CC_DLL ccpFuzzyEqual(CCPoint a, CCPoint b, float variance);
|
bool CC_DLL ccpFuzzyEqual(const CCPoint& a, const CCPoint& b, float variance);
|
||||||
|
|
||||||
|
|
||||||
/** Multiplies a nd b components, a.x*b.x, a.y*b.y
|
/** Multiplies a nd b components, a.x*b.x, a.y*b.y
|
||||||
@returns a component-wise multiplication
|
@returns a component-wise multiplication
|
||||||
@since v0.99.1
|
@since v0.99.1
|
||||||
*/
|
*/
|
||||||
CCPoint CC_DLL ccpCompMult(CCPoint a, CCPoint b);
|
CCPoint CC_DLL ccpCompMult(const CCPoint& a, const CCPoint& b);
|
||||||
|
|
||||||
/** @returns the signed angle in radians between two vector directions
|
/** @returns the signed angle in radians between two vector directions
|
||||||
@since v0.99.1
|
@since v0.99.1
|
||||||
*/
|
*/
|
||||||
float CC_DLL ccpAngleSigned(CCPoint a, CCPoint b);
|
float CC_DLL ccpAngleSigned(const CCPoint& a, const CCPoint& b);
|
||||||
|
|
||||||
/** @returns the angle in radians between two vector directions
|
/** @returns the angle in radians between two vector directions
|
||||||
@since v0.99.1
|
@since v0.99.1
|
||||||
*/
|
*/
|
||||||
float CC_DLL ccpAngle(CCPoint a, CCPoint b);
|
float CC_DLL ccpAngle(const CCPoint& a, const CCPoint& b);
|
||||||
|
|
||||||
/** Rotates a point counter clockwise by the angle around a pivot
|
/** Rotates a point counter clockwise by the angle around a pivot
|
||||||
@param v is the point to rotate
|
@param v is the point to rotate
|
||||||
|
@ -278,7 +278,7 @@ float CC_DLL ccpAngle(CCPoint a, CCPoint b);
|
||||||
@returns the rotated point
|
@returns the rotated point
|
||||||
@since v0.99.1
|
@since v0.99.1
|
||||||
*/
|
*/
|
||||||
CCPoint CC_DLL ccpRotateByAngle(CCPoint v, CCPoint pivot, float angle);
|
CCPoint CC_DLL ccpRotateByAngle(const CCPoint& v, const CCPoint& pivot, float angle);
|
||||||
|
|
||||||
/** A general line-line intersection test
|
/** A general line-line intersection test
|
||||||
@param p1
|
@param p1
|
||||||
|
@ -301,8 +301,8 @@ CCPoint CC_DLL ccpRotateByAngle(CCPoint v, CCPoint pivot, float angle);
|
||||||
the hit point also is p1 + s * (p2 - p1);
|
the hit point also is p1 + s * (p2 - p1);
|
||||||
@since v0.99.1
|
@since v0.99.1
|
||||||
*/
|
*/
|
||||||
bool CC_DLL ccpLineIntersect(CCPoint p1, CCPoint p2,
|
bool CC_DLL ccpLineIntersect(const CCPoint& p1, const CCPoint& p2,
|
||||||
CCPoint p3, CCPoint p4,
|
const CCPoint& p3, const CCPoint& p4,
|
||||||
float *s, float *t);
|
float *s, float *t);
|
||||||
|
|
||||||
}//namespace cocos2d
|
}//namespace cocos2d
|
||||||
|
|
|
@ -32,19 +32,19 @@ namespace cocos2d {
|
||||||
#define kCCPointEpsilon FLT_EPSILON
|
#define kCCPointEpsilon FLT_EPSILON
|
||||||
|
|
||||||
CGFloat
|
CGFloat
|
||||||
ccpLength(const CCPoint v)
|
ccpLength(const CCPoint& v)
|
||||||
{
|
{
|
||||||
return sqrtf(ccpLengthSQ(v));
|
return sqrtf(ccpLengthSQ(v));
|
||||||
}
|
}
|
||||||
|
|
||||||
CGFloat
|
CGFloat
|
||||||
ccpDistance(const CCPoint v1, const CCPoint v2)
|
ccpDistance(const CCPoint& v1, const CCPoint& v2)
|
||||||
{
|
{
|
||||||
return ccpLength(ccpSub(v1, v2));
|
return ccpLength(ccpSub(v1, v2));
|
||||||
}
|
}
|
||||||
|
|
||||||
CCPoint
|
CCPoint
|
||||||
ccpNormalize(const CCPoint v)
|
ccpNormalize(const CCPoint& v)
|
||||||
{
|
{
|
||||||
return ccpMult(v, 1.0f/ccpLength(v));
|
return ccpMult(v, 1.0f/ccpLength(v));
|
||||||
}
|
}
|
||||||
|
@ -56,12 +56,12 @@ ccpForAngle(const CGFloat a)
|
||||||
}
|
}
|
||||||
|
|
||||||
CGFloat
|
CGFloat
|
||||||
ccpToAngle(const CCPoint v)
|
ccpToAngle(const CCPoint& v)
|
||||||
{
|
{
|
||||||
return atan2f(v.y, v.x);
|
return atan2f(v.y, v.x);
|
||||||
}
|
}
|
||||||
|
|
||||||
CCPoint ccpLerp(CCPoint a, CCPoint b, float alpha)
|
CCPoint ccpLerp(const CCPoint& a, const CCPoint& b, float alpha)
|
||||||
{
|
{
|
||||||
return ccpAdd(ccpMult(a, 1.f - alpha), ccpMult(b, alpha));
|
return ccpAdd(ccpMult(a, 1.f - alpha), ccpMult(b, alpha));
|
||||||
}
|
}
|
||||||
|
@ -77,21 +77,21 @@ float clampf(float value, float min_inclusive, float max_inclusive)
|
||||||
return value < min_inclusive ? min_inclusive : value < max_inclusive? value : max_inclusive;
|
return value < min_inclusive ? min_inclusive : value < max_inclusive? value : max_inclusive;
|
||||||
}
|
}
|
||||||
|
|
||||||
CCPoint ccpClamp(CCPoint p, CCPoint min_inclusive, CCPoint max_inclusive)
|
CCPoint ccpClamp(const CCPoint& p, const CCPoint& min_inclusive, const CCPoint& max_inclusive)
|
||||||
{
|
{
|
||||||
return ccp(clampf(p.x,min_inclusive.x,max_inclusive.x), clampf(p.y, min_inclusive.y, max_inclusive.y));
|
return ccp(clampf(p.x,min_inclusive.x,max_inclusive.x), clampf(p.y, min_inclusive.y, max_inclusive.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
CCPoint ccpFromSize(CCSize s)
|
CCPoint ccpFromSize(const CCSize& s)
|
||||||
{
|
{
|
||||||
return ccp(s.width, s.height);
|
return ccp(s.width, s.height);
|
||||||
}
|
}
|
||||||
|
|
||||||
CCPoint ccpCompOp(CCPoint p, float (*opFunc)(float)){
|
CCPoint ccpCompOp(const CCPoint& p, float (*opFunc)(float)){
|
||||||
return ccp(opFunc(p.x), opFunc(p.y));
|
return ccp(opFunc(p.x), opFunc(p.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ccpFuzzyEqual(CCPoint a, CCPoint b, float var)
|
bool ccpFuzzyEqual(const CCPoint& a, const CCPoint& b, float var)
|
||||||
{
|
{
|
||||||
if(a.x - var <= b.x && b.x <= a.x + var)
|
if(a.x - var <= b.x && b.x <= a.x + var)
|
||||||
if(a.y - var <= b.y && b.y <= a.y + var)
|
if(a.y - var <= b.y && b.y <= a.y + var)
|
||||||
|
@ -99,12 +99,12 @@ bool ccpFuzzyEqual(CCPoint a, CCPoint b, float var)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
CCPoint ccpCompMult(CCPoint a, CCPoint b)
|
CCPoint ccpCompMult(const CCPoint& a, const CCPoint& b)
|
||||||
{
|
{
|
||||||
return ccp(a.x * b.x, a.y * b.y);
|
return ccp(a.x * b.x, a.y * b.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
float ccpAngleSigned(CCPoint a, CCPoint b)
|
float ccpAngleSigned(const CCPoint& a, const CCPoint& b)
|
||||||
{
|
{
|
||||||
CCPoint a2 = ccpNormalize(a); CCPoint b2 = ccpNormalize(b);
|
CCPoint a2 = ccpNormalize(a); CCPoint b2 = ccpNormalize(b);
|
||||||
float angle = atan2f(a2.x * b2.y - a2.y * b2.x, ccpDot(a2, b2));
|
float angle = atan2f(a2.x * b2.y - a2.y * b2.x, ccpDot(a2, b2));
|
||||||
|
@ -112,7 +112,7 @@ float ccpAngleSigned(CCPoint a, CCPoint b)
|
||||||
return angle;
|
return angle;
|
||||||
}
|
}
|
||||||
|
|
||||||
CCPoint ccpRotateByAngle(CCPoint v, CCPoint pivot, float angle) {
|
CCPoint ccpRotateByAngle(const CCPoint& v, const CCPoint& pivot, float angle) {
|
||||||
CCPoint r = ccpSub(v, pivot);
|
CCPoint r = ccpSub(v, pivot);
|
||||||
float t = r.x;
|
float t = r.x;
|
||||||
float cosa = cosf(angle), sina = sinf(angle);
|
float cosa = cosf(angle), sina = sinf(angle);
|
||||||
|
@ -122,8 +122,8 @@ CCPoint ccpRotateByAngle(CCPoint v, CCPoint pivot, float angle) {
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ccpLineIntersect(CCPoint p1, CCPoint p2,
|
bool ccpLineIntersect(const CCPoint& p1, const CCPoint& p2,
|
||||||
CCPoint p3, CCPoint p4,
|
const CCPoint& p3, const CCPoint& p4,
|
||||||
float *s, float *t){
|
float *s, float *t){
|
||||||
CCPoint p13, p43, p21;
|
CCPoint p13, p43, p21;
|
||||||
float d1343, d4321, d1321, d4343, d2121;
|
float d1343, d4321, d1321, d4343, d2121;
|
||||||
|
@ -161,7 +161,7 @@ bool ccpLineIntersect(CCPoint p1, CCPoint p2,
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
float ccpAngle(CCPoint a, CCPoint b)
|
float ccpAngle(const CCPoint& a, const CCPoint& b)
|
||||||
{
|
{
|
||||||
float angle = acosf(ccpDot(ccpNormalize(a), ccpNormalize(b)));
|
float angle = acosf(ccpDot(ccpNormalize(a), ccpNormalize(b)));
|
||||||
if( fabs(angle) < kCCPointEpsilon ) return 0.f;
|
if( fabs(angle) < kCCPointEpsilon ) return 0.f;
|
||||||
|
|
Loading…
Reference in New Issue