• 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之间的随机浮点数

  • 相关阅读:
    人工智能背后的故事
    idea 开发插件。
    安卓工作室 Android studio 或 Intellij IDEA 美化 修改 汉化 酷炫 装逼 Android studio or Intellij IDEA beautify modify Chinesization cool decoration
    安卓工作室 android studio文件和代码模板,以及汉化出错问题
    安卓工作室 android studio 汉化后,报错。 设置界面打不开。Can't find resource for bundle java.util.PropertyResourceBundle, key emmet.bem.class.name.element.separator.label
    android studio的汉化 教程 及解析
    安卓工作室Android Studio 快捷键
    安卓工作室 android studio 的 汉化 美化 定制 Android studio's Chinesization beautification customization
    VR开发 VR development
    Lakeshore 中文开发界面,示例项目,飞机大战 等 Lakeshore Chinese development interface, sample project, aircraft war, etc
  • 原文地址:https://www.cnblogs.com/xiaonanxia/p/5783353.html
Copyright © 2020-2023  润新知