cocos2d-x:懒人数学函数

做游戏开发,要用到比较多的数学计算,对于程序员来说,还是用一种懒一点的方法,cocos2d-x方便开发者投机取巧...提供了很多方便的的数学函数,方便我们的数学计算。以下是在网上收集到的一些常用的数学方法,分享给大家!

数学函数:

[c++]

ccp(x, y); // 以坐标x,y创建一个向量  
 
ccpFromSize(s); // 以size s的width为x,height为y创建一个向量 
 
ccp(x, y); // 以坐标x,y创建一个向量

ccpFromSize(s); // 以size s的width为x,height为y创建一个向量
 
  CCPoint的加减乘除运算运算

[c++]
ccpAdd(v1, v2); // 等价 ccp(v1.x+v2.x, v1.y+v2.y);  
 
ccpSub(v1, v2); // 等价 ccp(v1.x-v2.x, v1.y-v2.y);  
 
ccpNeg(v) // 等价 ccp(-v.x, -v.y);  
 
ccpMult(v, s); //等价 ccp(v.x * s, v.y * s); s是个浮点数 
ccpAdd(v1, v2); // 等价 ccp(v1.x+v2.x, v1.y+v2.y);

ccpSub(v1, v2); // 等价 ccp(v1.x-v2.x, v1.y-v2.y);

ccpNeg(v) // 等价 ccp(-v.x, -v.y);

ccpMult(v, s); //等价 ccp(v.x * s, v.y * s); s是个浮点数

取中点:

[c++]
ccpMidpoint(v1, v2); // 等价 ccp( (v1.x + v2.x)/2, (v1.y + v2.y)/2 ); 
ccpMidpoint(v1, v2); // 等价 ccp( (v1.x + v2.x)/2, (v1.y + v2.y)/2 );

点乘、叉乘、投影:

[c++]
 
ccpDot(v1, v2); // 等价 v1.x * v2.x + v1.y * v2.y;  
 
ccpCross(v1, v2); // 等价 v1.x * v2.y - v1.y * v2.x;  
 
ccpProject(v1, v2) // 返回的是向量v1在向量v2上的投影向量 
 
ccpDot(v1, v2); // 等价 v1.x * v2.x + v1.y * v2.y;

ccpCross(v1, v2); // 等价 v1.x * v2.y - v1.y * v2.x;

ccpProject(v1, v2) // 返回的是向量v1在向量v2上的投影向量

求长度、距离和各自的平方值:

[c++]
ccpLength(v) // 返回向量v的长度,即点v到原点的距离  
 
ccpLengthSQ(v) // 返回向量v的长度的平方,即点v到原点的距离的平方  
 
ccpDistance(v1, v2) // 返回点v1到点v2的距离  
 
ccpDistanceSQ(v1, v2) // 返回点v1到点v2的距离的平方  
 
ccpNormalize(v) // 返回v的标准化向量,就是长度为1 
ccpLength(v) // 返回向量v的长度,即点v到原点的距离

ccpLengthSQ(v) // 返回向量v的长度的平方,即点v到原点的距离的平方

ccpDistance(v1, v2) // 返回点v1到点v2的距离

ccpDistanceSQ(v1, v2) // 返回点v1到点v2的距离的平方

ccpNormalize(v) // 返回v的标准化向量,就是长度为1

旋转、逆时针90度、顺时针90度:

[c++]
ccpRotate(v1, v2); // 向量v1旋转过向量v2的角度并且乘上向量v2的长度。当v2是一个长度为1的标准向量时就是正常的旋转了,可以配套地用ccpForAngle  
 
ccpPerp(v); // 等价于 ccp(-v.y, v.x); (因为opengl坐标系是左下角为原点,所以向量v是逆时针旋转90度)  
 
ccpRPerp(v); // 等价于 ccp(v.y, -v.x); 顺时针旋转90度 
ccpRotate(v1, v2); // 向量v1旋转过向量v2的角度并且乘上向量v2的长度。当v2是一个长度为1的标准向量时就是正常的旋转了,可以配套地用ccpForAngle

ccpPerp(v); // 等价于 ccp(-v.y, v.x); (因为opengl坐标系是左下角为原点,所以向量v是逆时针旋转90度)

ccpRPerp(v); // 等价于 ccp(v.y, -v.x); 顺时针旋转90度

配套的有向量和弧度的转换向量,还有一些角度相关的:

[c++]
ccpForAngle(a); // 返回一个角度为弧度a的标准向量  
 
ccpToAngle(v); // 返回向量v的弧度   
 
ccpAngle(a, b); // 返回a,b向量指示角度的差的弧度值  
 
ccpRotateByAngle(v, pivot, angle) // 返回向量v以pivot为旋转轴点,按逆时针方向旋转angle弧度 
ccpForAngle(a); // 返回一个角度为弧度a的标准向量

ccpToAngle(v); // 返回向量v的弧度

ccpAngle(a, b); // 返回a,b向量指示角度的差的弧度值

ccpRotateByAngle(v, pivot, angle) // 返回向量v以pivot为旋转轴点,按逆时针方向旋转angle弧度

线段相交的检测:

[c++]
ccpLineIntersect(p1, p2, p3, p4, &s, &t); // 返回p1为起点p2为终点线段1所在直线和p3为起点p4为终点线段2所在的直线是否相交,如果相交,参数s和t将返回交点在线段1、线段2上的比例  
// 得到s和t可以通过 p1 + s * (p2 - p1) 或 p3 + t * (p4 - p3) 求得交点。  
 
ccpSegmentIntersect(A, B C, D) // 返回线段A-B和线段C-D是否相交  
 
ccpIntersectPoint(A, B, C, D) // 返回线段A-B和线段C-D的交点 
ccpLineIntersect(p1, p2, p3, p4, &s, &t); // 返回p1为起点p2为终点线段1所在直线和p3为起点p4为终点线段2所在的直线是否相交,如果相交,参数s和t将返回交点在线段1、线段2上的比例
// 得到s和t可以通过 p1 + s * (p2 - p1) 或 p3 + t * (p4 - p3) 求得交点。

ccpSegmentIntersect(A, B C, D) // 返回线段A-B和线段C-D是否相交

ccpIntersectPoint(A, B, C, D) // 返回线段A-B和线段C-D的交点

其他有用的:

[c++]
CC_RADIANS_TO_DEGREES(a);  // 弧度转角度  
CC_DEGREES_TO_RADIANS(a);  // 角度转弧度  
 
CCRANDOM_0_1();     // 产生0到1之间的随机浮点数  
CCRANDOM_MINUS1_1(); // 产生-1到1之间的随机浮点数 
CC_RADIANS_TO_DEGREES(a);  // 弧度转角度
CC_DEGREES_TO_RADIANS(a);  // 角度转弧度

CCRANDOM_0_1();     // 产生0到1之间的随机浮点数
CCRANDOM_MINUS1_1(); // 产生-1到1之间的随机浮点数

时间: 2024-08-23 12:10:17

cocos2d-x:懒人数学函数的相关文章

大道至简第二章—懒人的方法

大道至简第二章—懒人的方法 僰道有故蜀王兵阑亦有神,作大滩江中.其崖崭峻,不可凿:乃积薪烧之.故其处悬崖有赤白五色. ----华阳国志卷三-蜀志 在第一章中作者引用愚公移山的典故向我们介绍了编程的精义,以愚公为例向我们介绍了个编程人员应具备的素质.而在第二章,作者通过蜀郡太守李冰烧石破山建造都江堰的故事告诉我们我们只是勤奋是不够的.如果李冰像愚公那样日复一日的敲石碎山,就不会有空闲时间去观察,去思考了.那也不会有“积薪烧之”的事情了.所以李冰乃是闲人一枚. 人的精力是有限的.愚公而愚公可以多吃点

大道至简——做个懒人

懒人有懒法 ——读<大道至简>第二章“是懒人创造了方法”有感 愚公移山靠的是坚持不懈,然而随着事物的进化,李冰凿山也不再是坚持不懈的凿山了,而是选择“积薪烧之”了.李冰会烧而不是凿原因是什么呢?如果他和愚公一样一味的督促团队凿石开山,那他就没有时间学习观察了,就一定不会发现烧的这种方法.他却不是这样的,他应该是个闲人,有时间看火烧石头的闲人.而闲人懒人也一定有自己的懒方法,愚公可以拼命努力,让今天的工作量超出一倍,但是毕竟人的精力有限,再怎么努力也不可能很快完成,有个好方法就可以事半功倍.所以

《大道至简》第二章读后感--是懒人造就了方法

何为“大道至简”?在周爱民的<大道至简>一书中给出的大道至简的解析是软件工程实践者的思想,它是一种思想,而不是一些招数或者方法. “僰蘭道有蜀王兵,亦有神作大滩江中.其崖崭峻不可破,(冰)乃积薪烧之.” 话说,战国时期有一人叫李冰,他干了一件事情与愚公类似,那就是凿了一座大山,然而凿山的过程却与愚公相去甚远.愚公历代子孙去凿穿了山而李冰以火烧石省去了大量的人力物力.那李冰又是为什么会用“烧”这种方法来碎石的呢?如果李冰也象愚公那样日复一日地督促着他的团队凿石开山,那他一定没有时间来学习.寻找或

数学函数,字符串函数,聚合函数

1. --数学函数;ABS(-8)绝对值.ceiling(3.12) 取上线.floor取下限.power(2,3)几次方.--round()四舍五入--sqrt开平方根.squar平方 --字符串函数--ASCII 返回字符串最左边的字符ascii码select ASCII('name')select ASCII(name)from biao--查看所有人名的首字符的ascii码--char 将ascii码转换成字符select CHAR(70)select CHAR(yuwen)from b

懒人的思考造就了方法

其实在读第二篇文章的过程中我是有很多疑问的,真的是懒人造就了方法的吗?目前我的课程学习基础真的不好,书中提到的好多的只是在我的学习生活中都还没有涉及到,什么Goto语句,Pascal啊什么的我都不了解,就更不要说什么一百万字的代码了.之后,才明白,确实是懒人创造了方法,但是确是聪明的懂得观察和思考的懒人发现! 人的精力是有限的,将有限的精力浪费在无限的工作中是不明智的.愚公是勤劳的,是无私的,他可以将自己剩余的全部时间都用在移山上的坚持的精神可取,但是,如果抽出一部分时间用来思考方法,那么工作起

《大道至简》之第二章:是懒人造就了方法 读后感

我自己是河南济源人,所以从小就对愚公移山的故事非常的熟悉.愚公移山本意并不在于移山或者搬家,他强调的是一种精神,持之以恒的精神,也就是我们常说的毅力.这座山只是象征我们在生活中可能会遇到的某种困难,我们完全可以凭借我们的智力.毅力或者体力去征服它.解决它.我们在做任何一件事情的时候,都需要一个明确的目标然后在坚定不移地为了实现目标而奋斗.但是,<大道至简>里却从另一个角度道出一个道理:是懒人造就了方法. 愚公会凿,李冰会烧.从小,家人给我讲的愚公移山的故事,多在讲它的日积月累.勤奋苦干的精神—

数学函数,字符串函数

--数学函数--ABS绝对值select ABS(-7)--ceiling取上线,select CEILING(3.14)--floor去下线select floor(3.14)--power几次方,select POWER (2,3)--round 四舍五入,select ROUND(3.5,0)--sqrt 开平方根select SQRT(4)--square 平方select SQUARE(4)--ascii 返回字符串最左边的字符的ascii码select ASCII('name')--

《大道至简》第二章——是懒人造就了方法 (读后感)

何为“大道至简”?在周爱民的<大道至简>一书中给出的大道至简的解析是软件工程实践者的思想,它是一种思想,而不是一些招数或者方法. 前几天我把这本书的第一章用伪代码的形式写了一篇读后感,今天我就写写这第二章的读后感吧.第二章的标题是:是懒人造就了方法.为什么是懒人造就了方法呢?作者用战国时期的李冰凿山的例子来说明这个道理. 史记中说是“蜀守冰凿离堆”,是说李冰在成都的时候凿出了离堆.一说是李冰将都江堰附近的玉垒山凿了一个大口子,叫宝瓶口,而凿的石头就堆成了离堆.另一说,则是李的确是凿了一座“(溷

NotRxJava懒人专用指南

NotRxJava懒人专用指南 原文链接 : NotRxJava guide for lazy folks 原文作者 : Yaroslav Heriatovych 译文出自 : 开发技术前线 www.devtf.cn 译者 : Rocko 校对者: Mr.Simple 状态 : 完成校对 如果你是一位 Android 开发者,那么这些天你可能已经听到或看到一些关于 RxJava 满天飞的宣传了.RxJava 是一个能让你摆脱编写一些复杂繁琐的代码去处理异步事件的库.一旦开始在你的项目中使用,你会