数学函数由 FunctionMath 提供,无需命名空间,直接调用即可。
数学常量
| 名称 | 类型 | 说明 |
|---|
PI | double | 圆周率常量 Math.PI。 |
E | double | 自然常数 Math.E。 |
print(&PI) # => 3.141592653589793
print(&E) # => 2.718281828459045
比较与范围
| 函数 | 签名 | 说明 |
|---|
min | min(a, b) | 返回较小的一个参数,支持可比较类型。 |
max | max(a, b) | 返回较大的一个参数,支持可比较类型。 |
clamp | clamp(value, min, max) | 将数值限制在 [min, max] 区间内,并尽量保持原始数值类型。 |
min(1, 2) # => 1
max(1.5, 0.5) # => 1.5
clamp(10, 0, 5) # => 5
clamp(-5, 0, 100) # => 0
绝对值与取整
| 函数 | 签名 | 说明 |
|---|
abs | abs(x) | 绝对值,自动根据参数类型返回 int / long / float / double。 |
round | round(x) | 四舍五入到最接近的整数,返回整型数值。 |
floor | floor(x) | 向下取整,如 3.9 -> 3。 |
ceil | ceil(x) | 向上取整,如 3.1 -> 4。 |
sign | sign(x) | 符号函数,正数返回 1,负数返回 -1,零返回 0。 |
abs(-3) # => 3
round(3.5) # => 4
floor(3.9) # => 3
ceil(3.1) # => 4
sign(-42) # => -1
sign(0) # => 0
sign(100) # => 1
三角函数
所有三角函数接受弧度值作为输入:
| 函数 | 签名 | 说明 |
|---|
sin | sin(x) | 正弦函数。 |
cos | cos(x) | 余弦函数。 |
tan | tan(x) | 正切函数。 |
asin | asin(x) | 反正弦,要求 x 在 [-1, 1] 范围内,否则抛出异常。 |
acos | acos(x) | 反余弦,要求 x 在 [-1, 1] 范围内,否则抛出异常。 |
atan | atan(x) | 反正切。 |
atan2 | atan2(y, x) | 两参数反正切,返回从正 x 轴到点 (x, y) 的角度(弧度)。 |
sin(PI / 2) # => 1.0
cos(0) # => 1.0
atan2(1, 1) # => 0.7853981633974483(即 PI/4)
指数、对数与幂
| 函数 | 签名 | 说明 |
|---|
exp | exp(x) | 计算 e^x。 |
log | log(x) | 自然对数,要求 x > 0,否则抛出异常。 |
log10 | log10(x) | 以 10 为底的对数,要求 x > 0。 |
pow | pow(base, exponent) | 幂运算;当指数与结果均为整数且有限时,尽量返回整数类型。 |
sqrt | sqrt(x) | 平方根,要求 x >= 0,否则抛出异常。 |
cbrt | cbrt(x) | 立方根,支持负数输入。 |
hypot | hypot(x, y) | 计算斜边长度 sqrt(x^2 + y^2),避免中间结果溢出。 |
pow(2, 10) # => 1024
sqrt(9) # => 3.0
cbrt(27) # => 3.0
cbrt(-8) # => -2.0
log10(100) # => 2.0
hypot(3, 4) # => 5.0
幂运算也可以使用 ^ 运算符:2 ^ 10 等价于 pow(2, 10)。
随机数
random 根据参数个数的不同,具有三种调用形式:
| 调用 | 说明 |
|---|
random() | 返回 [0.0, 1.0) 之间的双精度随机数。 |
random(end) | 若 end 为整数类型,则返回 [0, end) 内的整数;若为浮点,则返回 [0.0, end)。end 必须为正数。 |
random(start, end) | 在 [start, end) 区间生成随机数;若两端均为整数,则返回区间内整数,否则返回浮点数。要求 start < end。 |
random() # => 0.0 到 1.0 之间
random(10) # => 0 到 9 之间的整数
random(5, 10) # => 5 到 9 之间的整数
random(0.0, 1.0) # => 0.0 到 1.0 之间的浮点数
角度与插值
| 函数 | 签名 | 说明 |
|---|
rad | rad(deg) | 将角度转换为弧度。 |
deg | deg(rad) | 将弧度转换为角度。 |
lerp | lerp(start, end, t) | 线性插值,计算 start + (end - start) * t。 |
rad(180) # => 3.141592653589793(即 PI)
deg(PI) # => 180.0
lerp(0, 10, 0.25) # => 2.5
lerp(0, 100, 0.5) # => 50.0
相关链接