cocos2d-x 关于CCpoint的一些算法或者说扩展

<a target=_blank href="http://t.cn/RhfSa04">static inline CCPoint  
ccpNeg(const CCPoint v)    //计算关于原点的对称点  
{  
    return ccp(-v.x, -v.y);  
}  
  
/** Calculates sum of two points. 
 @return CCPoint 
 @since v0.7.2 
 */  
static inline CCPoint  
ccpAdd(const CCPoint v1, const CCPoint v2)//计算两个向量的和  
{  
    return ccp(v1.x + v2.x, v1.y + v2.y);  
}  
  
/** Calculates difference of two points. 
 @return CCPoint 
 @since v0.7.2 
 */  
static inline CCPoint  
ccpSub(const CCPoint v1, const CCPoint v2)// 计算两个向量的差  
{  
    return ccp(v1.x - v2.x, v1.y - v2.y);  
}  </a>
  
/** Returns point multiplied by given factor. 
 @return CCPoint 
 @since v0.7.2 
 */  
static inline CCPoint  
ccpMult(const CCPoint v, const CGFloat s)// 给定一个因子,算向量的倍数  
{  
    return ccp(v.x*s, v.y*s);  
}  
  
/** Calculates midpoint between two points. 
 @return CCPoint 
 @since v0.7.2 
 */  
static inline CCPoint  
ccpMidpoint(const CCPoint v1, const CCPoint v2)// 计算两个点得中心点  
{  
    return ccpMult(ccpAdd(v1, v2), 0.5f);  
}  
  
/** Calculates dot product of two points. 
 @return CGFloat 
 @since v0.7.2 
 */  
static inline CGFloat  
ccpDot(const CCPoint v1, const CCPoint v2)// 计算两个向量的点乘积  
{  
    return v1.x*v2.x + v1.y*v2.y;  
}  
  
/** Calculates cross product of two points. 
 @return CGFloat 
 @since v0.7.2 
 */  
static inline CGFloat  
ccpCross(const CCPoint v1, const CCPoint v2)// 计算两个向量的叉乘积  
{  
    return v1.x*v2.y - v1.y*v2.x;  
}  
  
/** Calculates perpendicular of v, rotated 90 degrees counter-clockwise -- cross(v, perp(v)) >= 0 
 @return CCPoint 
 @since v0.7.2 
 */  
static inline CCPoint  
ccpPerp(const CCPoint v)// 向量逆时针旋转后的点坐标  
{  
    return ccp(-v.y, v.x);  
}  
  
/** Calculates perpendicular of v, rotated 90 degrees clockwise -- cross(v, rperp(v)) <= 0 
 @return CCPoint 
 @since v0.7.2 
 */  
static inline CCPoint  
ccpRPerp(const CCPoint v)// 向量顺时针旋转后的点坐标  
{  
    return ccp(v.y, -v.x);  
}  
  
/** Calculates the projection of v1 over v2. 
 @return CCPoint 
 @since v0.7.2 
 */  
static inline CCPoint  
ccpProject(const CCPoint v1, const CCPoint v2)// 计算向量V1在向量V2上的投影点  
{  
    return ccpMult(v2, ccpDot(v1, v2)/ccpDot(v2, v2));  
}  
  
/** Rotates two points. 
 @return CCPoint 
 @since v0.7.2 
 */  
static inline CCPoint  
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);  
}  
  
/** Unrotates two points. 
 @return CCPoint 
 @since v0.7.2 
 */  
static inline CCPoint  
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);  
}  
  
/** Calculates the square length of a CCPoint (not calling sqrt() ) 
 @return CGFloat 
 @since v0.7.2 
 */  
static inline CGFloat  
ccpLengthSQ(const CCPoint v)// 计算一个向量长度的平方值  
{  
    return ccpDot(v, v);  
}  
  
/** Calculates distance between point an origin 
 @return CGFloat 
 @since v0.7.2 
 */  
CGFloat ccpLength(const CCPoint v);// 计算点和原点的距离,但不知道函数体在哪里  
  
/** Calculates the distance between two points 
 @return CGFloat 
 @since v0.7.2 
 */  
CGFloat ccpDistance(const CCPoint v1, const CCPoint v2);// 两点间距离  
  
/** Returns point multiplied to a length of 1. 
 @return CCPoint 
 @since v0.7.2 
 */  
CCPoint ccpNormalize(const CCPoint v);  
  
/** Converts radians to a normalized vector. 
 @return CCPoint 
 @since v0.7.2 
 */  
CCPoint ccpForAngle(const CGFloat a);  
  
/** Converts a vector to radians. 
 @return CGFloat 
 @since v0.7.2 
 */  
CGFloat ccpToAngle(const CCPoint v);  
  
  
/** Clamp a value between from and to. 
 @since v0.99.1 
 */  
float clampf(float value, float min_inclusive, float max_inclusive);  
  
/** Clamp a point between from and to. 
 @since v0.99.1 
 */  
CCPoint ccpClamp(CCPoint p, CCPoint from, CCPoint to);  
  
/** Quickly convert CGSize to a CCPoint 
 @since v0.99.1 
 */  
CCPoint ccpFromSize(CGSize s);  
  
/** Run a math operation function on each point component 
 * absf, fllorf, ceilf, roundf 
 * any function that has the signature: float func(float); 
 * For example: let's try to take the floor of x,y 
 * ccpCompOp(p,floorf); 
 @since v0.99.1 
 */  
CCPoint ccpCompOp(CCPoint p, float (*opFunc)(float));  
  
/** Linear Interpolation between two points a and b 
 @returns 
    alpha == 0 ? a 
    alpha == 1 ? b 
    otherwise a value between a..b 
 @since v0.99.1 
 */  
CCPoint ccpLerp(CCPoint a, CCPoint b, float alpha);  
  
  
/** @returns if points have fuzzy equality which means equal with some degree of variance. 
 @since v0.99.1 
 */  
BOOL ccpFuzzyEqual(CCPoint a, CCPoint b, float variance);  
  
  
/** Multiplies a nd b components, a.x*b.x, a.y*b.y 
 @returns a component-wise multiplication 
 @since v0.99.1 
 */  
CCPoint ccpCompMult(CCPoint a, CCPoint b);  
  
/** @returns the signed angle in radians between two vector directions 
 @since v0.99.1 
 */  
float ccpAngleSigned(CCPoint a, CCPoint b);  
  
/** @returns the angle in radians between two vector directions 
 @since v0.99.1 
*/  
float ccpAngle(CCPoint a, CCPoint b);  
  
/** Rotates a point counter clockwise by the angle around a pivot 
 @param v is the point to rotate 
 @param pivot is the pivot, naturally 
 @param angle is the angle of rotation cw in radians 
 @returns the rotated point 
 @since v0.99.1 
 */  
CCPoint ccpRotateByAngle(CCPoint v, CCPoint pivot, float angle);  
  
/** A general line-line intersection test 
 @param p1  
    is the startpoint for the first line P1 = (p1 - p2) 
 @param p2  
    is the endpoint for the first line P1 = (p1 - p2) 
 @param p3  
    is the startpoint for the second line P2 = (p3 - p4) 
 @param p4  
    is the endpoint for the second line P2 = (p3 - p4) 
 @param s  
    is the range for a hitpoint in P1 (pa = p1 + s*(p2 - p1)) 
 @param t 
    is the range for a hitpoint in P3 (pa = p2 + t*(p4 - p3)) 
 @return bool  
    indicating successful intersection of a line 
    note that to truly test intersection for segments we have to make  
    sure that s & t lie within [0..1] and for rays, make sure s & t > 0 
    the hit point is        p3 + t * (p4 - p3); 
    the hit point also is    p1 + s * (p2 - p1); 
 @since v0.99.1 
 */  
BOOL ccpLineIntersect(CCPoint p1, CCPoint p2,   
                      CCPoint p3, CCPoint p4,  
                      float *s, float *t);  
  
/* 
 ccpSegmentIntersect returns YES if Segment A-B intersects with segment C-D 
 @since v1.0.0 
 */  
BOOL ccpSegmentIntersect(CCPoint A, CCPoint B, CCPoint C, CCPoint D);  
  
/* 
 ccpIntersectPoint returns the intersection point of line A-B, C-D 
 @since v1.0.0 
 */  
CCPoint ccpIntersectPoint(CCPoint A, CCPoint B, CCPoint C, CCPoint D);  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值