数学类主要有Vec2(坐标向量)、Size(尺寸)、Rect(矩形)。

创建

在Lua中创建的 Vec2、Size、Rect 都是一个table类型。

其中只有相应的成员变量,没有相关的函数运算。

cc.p(x, y) -- 构造 Vec2
cc.size(width, height) -- 构造 Size
cc.rect(x, y, width, height) -- 构造 Rect

坐标向量运算

Lua中常用的向量运算如下:

返回值为bool

-- 直线AB与直线CD是否相交
cc.pIsLineIntersect(pA, pB, pC, pD,float,float)

-- 线段AB与线段CD是否相交
cc.pIsSegmentIntersect(pA, pB, pC, pD)

返回值为float

cc.pDot(p1, p2) -- 点积
cc.pCross(p1, p2) -- 叉积
cc.pProject(p1, p2) -- 投影: 前point在后point上的投影

cc.pGetLength(p) -- 向量长度
cc.pLengthSQ(p) -- 向量长度平方

cc.pGetDistance(p1, p2) -- 坐标距离
cc.pDistanceSQ(p1, p2) -- 坐标距离平方

cc.pGetAngle(p1, p2) -- 向量夹角:弧度

返回值为point_table

cc.p(x, y) -- 构造坐标point
cc.pAdd(p1, p2) -- 相加
cc.pSub(p1, p2) -- 相减
cc.pMidpoint(p1, p2) -- 两向量的中点
cc.pNormalize(p1) -- 标准化向量

cc.pGetClampPoint(minp, maxp, p) -- 将p值限制在[minp,maxp]区间内

cc.pForAngle(float) -- 返回坐标 x=cos(a) , y=sin(a)

cc.pPerp(p) -- 逆时针旋转90度(-y, x)
cc.RPerp(p) -- 顺时针旋转90度(y, -x)

-- 绕p1向量旋转
-- 返回向量: 角度 this.getAngle() +other.getAngle()
-- 长度 this.getLength()*other.getLength()
cc.pRotate(p1, p2)

-- 绕p1向量旋转前的向量值
-- 返回向量: 角度 this.getAngle() -other.getAngle();
-- 长度 this.getLength()*other.getLength();
cc.pUnrotate(p1, p2)

-- 直线AB与直线CD的交点
cc.pGetIntersectPoint(pA, pB, pC, pD)

矩形运算

Lua中常用的矩形运算如下:

cc.rectGetMinX(rect) -- rect.x
cc.rectGetMidX(rect) -- (rect.x + rect.width) / 2
cc.rectGetMaxX(rect) -- rect.x + rect.width

cc.rectGetMinY(rect) -- rect.y
cc.rectGetMidY(rect) -- (rect.y + rect.height) / 2
cc.rectGetMaxY(rect) -- rect.y + rect.height

-- 判断是否与rect相同. 原点相同,尺寸相同.
cc.rectEqualToRect(rect1, rect2)

-- 判断point是否包含在矩形内
cc.rectContainsPoint(rect, point)

-- 判断矩形是否相交. 常常用作碰撞检测.
cc.rectIntersectsRect(rect1, rect2)

-- 两矩形合并
cc.rectUnion(rect1, rect2)

随机数

根据系统时间初始化随机数种子,让后续的 math.random() 返回更随机的值

math.newrandomseed()

对数值进行四舍五入,如果不是数值则返回 0

math.round(value)

角度转弧度

math.angle2radian(angle)

弧度转角度
math.radian2angle(radian)

原文转载自Cocos之_从C++过渡到Lua

Lua 数学类的更多相关文章

  1. Java:日历类、日期类、数学类、运行时类、随机类、系统类

    一:Calendar类 java.util 抽象类Calendar   1.static Calendar getInstance()使用默认时区和语言环境获得一个日历. 2. int get(int ...

  2. 【转】Cocos2d-x 3.x基础学习: 总结数学类Vec2/Size/Rect

    转载:http://www.taikr.com/article/1847 在Cocos2d-x 3.x中,数学类Vec2.Size.Rect,是比较常用的类.比如设置图片位置,图片大小,两图片的碰撞检 ...

  3. lua学习:lua中“类”的实现

    在之前的面试遇到考用lua实现类的题目.现在就补补这块知识点. 我们都知道Lua中的table是一个对象.拥有状态,拥有self,拥有独立于创建者和创建地的生命周期. 一个类就是一个创建对象的模具.L ...

  4. [19/03/18-星期一] 常用类_Math(数学)类&Rondom(随机数)类

    一.Math(数学)类(单独一个Java.Math 包中) java.lang.Math提供了一系列静态方法用于科学计算;其方法的参数和返回值类型一般为double型.如果需要更加强大的数学运算能力, ...

  5. 说说C#的数学类,Math,浮点数(上)

    说说C#的数学类,Math,浮点数 C#语言支持下图所看到的的数值类型,各自是整数,浮点数和小数 可能不是非常清楚,可是细致看看还是能看清楚的. 在一个C#程序中,整数(没有小数点的数)被觉得是一个i ...

  6. cocos2dx[3.2](8) 数学类Vec2/Size/Rect

    数学类Vec2.Size.Rect,是cocos2dx中比较常用的类. 比如设置图片位置,设置图片大小,两图片的碰撞检测等等. 比起2.x版本,在3.x中本质上其实没有太大的变化,主要的变化就是将全局 ...

  7. Math 数学类

    /* Math 数学类, 主要是提供了很多的数学公式. abs(double a) 获取绝对值 ceil(double a) 向上取整 floor(double a) 向下取整 round(float ...

  8. Lua面向对象----类、继承、多继承、单例的实现

    (本文转载)学习之用,侵权立删! 原文地址   http://blog.csdn.net/y_23k_bug/article/details/19965877?utm_source=tuicool&a ...

  9. [Quick-x lua]CCLabel类数字变化动作

    之前写了个C++版本的,现在改成lua的, 两者原理是一样,但是动作的执行方式有些微区别 (因为lua无法继承CCActionInterval类,单纯使用lua的话无法调用action的update方 ...

随机推荐

  1. Appium移动自动化测试(一)--工具软件安装

    Appium移动自动化测试(一)--工具软件安装 详情参考-- http://www.cnblogs.com/fnng/p/4552438.html 第一节  安装node.js Appium 官方网 ...

  2. c#后台读写Cookie

    public class BaseCookies { #region Cookies public static void SetCookieValue(string key, string valu ...

  3. iOS开发之--使用storyboard进行跳转

    iOS开发中使用故事板进行开发是非常高效的一种方式,虽然有这样那样的问题,但是不得不承认,使用sb可以在最短的时间内完成整个项目的布局,节约开发者大量的时间,而且便于修改,非常直观,虽然可能不太灵活, ...

  4. std::mutex

    构造函数,std::mutex不允许拷贝构造,也不允许 move 拷贝,最初产生的 mutex 对象是处于 unlocked 状态的. lock(),调用线程将锁住该互斥量.线程调用该函数会发生下面 ...

  5. [LintCode] 第一个错误的代码版本

    /** * class VersionControl { * public: * static bool isBadVersion(int k); * } * you can use VersionC ...

  6. js 操作对象的引用和操作实际对象的区分

    JavaScript高级程序设计-第3版-中 有这么一段话: 在操作对象时,实际上是在操作对象的引用而不是实际的对象.为此,引用类型的值是按引用访问的①. ① 这种说法不严密,当复制保存着对象的某个变 ...

  7. Hibernate的大对象映射

    1在持久类中直接声明是java.sql.Blob类型 2在.hbm.xml文件中配置一下信息 <!-- 映射大对象 (就是字符长度超过255和图片想转换成二进制的数据)--> <!- ...

  8. 20165330 2017-2018-2 《Java程序设计》第6周学习总结

    课本知识总结 第八章 常用实用类 String类 String对象 构造方法: 使用String类声明对象并创建对象 String s = new String("we are studen ...

  9. kafka Detailed Replication Design V3

    参考,https://cwiki.apache.org/confluence/display/KAFKA/kafka+Detailed+Replication+Design+V3 Major chan ...

  10. 设计模式之——迭代器模式

    设计模式是开发者前辈们给我们后背的一个经验总结.有效的使用设计模式,能够帮助我们编写可复用的类.所谓"可复用",就是指将类实现为一个组件,当一个组件发生改变时,不需要对其他组件进行 ...