|
- Math = math
-
- Math.E = 2.718281828459045 -- 自然数
- Math.LN2 = 0.6931471805599453 -- 2的自然对数
- Math.LN10 = 2.302585092994046 -- 10的自然对数
- Math.LOG2E = 1.4426950408889634 -- log 2 为底的自然数
- Math.LOG10E = 0.4342944819032518 -- log 10 为底的自然数
- Math.PI = 3.141592653589793 -- π
- Math.HALF_PI = 1.57079632679489661923 -- 1/2 π
- Math.SQRT1_2 = 0.7071067811865476 -- 1/2的平方根
- Math.SQRT2 = 1.4142135623730951 -- 2的平方根
- -- p, q is on the same of line 1
- function Math.isSame(line1, p, q)
- local dx = line1.endPoint.x - line1.startPoint.x;
- local dy = line1.endPoint.y - line1.startPoint.y;
-
- local dx1 = p.x - line1.startPoint.x;
- local dy1 = p.y - line1.startPoint.y;
- local dx2 = q.x - line1.endPoint.x;
- local dy2 = q.y - line1.endPoint.y;
-
-
- return (dx*dy1-dy*dx1)*(dx*dy2-dy*dx2) > 0;
- end
-
- -- 2 line segments (s1, s2) are intersect?
- function Math.isIntersect(line1, line2)
- local b1 = Math.isSame(line1, line2.startPoint, line2.endPoint);
- local b2 = Math.isSame(line2, line1.startPoint, line1.endPoint);
-
- return not b1 and not b2;
- end
-
- function Math.round(num)
- return math.floor(num + 0.5)
- end
-
- function Math.angle2Radian(angle)
- return angle*math.pi/180
- end
-
- function Math.radian2Angle(radian)
- return radian/math.pi*180
- end
-
- -- 从球面坐标系(半径,经度,纬度)转换到笛卡尔坐标系(XYZ)
- -- 半径,离原点的距离,一般是一个正数
- -- 经度,0~2PI,0代表正前方,PI代表正后方
- -- 纬度,HALF_PI代表水平位置,+PI代表底,0代表顶
- function Math.SphericalToCartesian(sphericalPos)
- return {
- x = sphericalPos.x * math.cos(sphericalPos.y) * math.sin(sphericalPos.z);
- z = sphericalPos.x * math.sin(sphericalPos.y) * math.sin(sphericalPos.z);
- y = sphericalPos.x * math.cos(sphericalPos.z);
- }
- end
-
- -- 从笛卡尔坐标系(XYZ)转换到球面坐标系(半径,经度,纬度)
- function Math.CartesianToSpherical(cartesianPos)
- local r = math.sqrt(cartesianPos.x * cartesianPos.x + cartesianPos.y * cartesianPos.y + cartesianPos.z * cartesianPos.z)
- local lon = math.atan2(cartesianPos.z, cartesianPos.x)
- local lat = math.acos(cartesianPos.y / r)
- return cc.vec3(r, lon, lat)
- end
|