数学#

arcade.math.clamp(a, low: float, high: float) float[源代码]#

在一个范围内夹住一个数字。

arcade.math.get_angle_degrees(x1: float, y1: float, x2: float, y2: float) float[源代码]#

获取两点之间的角度(以度为单位)。

参数:
  • x1 -- 第一个点的X坐标

  • y1 -- 第一个点的Y坐标

  • x2 -- 第二个点的X坐标

  • y2 -- 第二个点的Y坐标

arcade.math.get_angle_radians(x1: float, y1: float, x2: float, y2: float) float[源代码]#

获取两点之间的角度(以弧度为单位)。

参数:
  • x1 -- 第一个点的X坐标

  • y1 -- 第一个点的Y坐标

  • x2 -- 第二个点的X坐标

  • y2 -- 第二个点的Y坐标

arcade.math.get_distance(x1: float, y1: float, x2: float, y2: float) float[源代码]#

求出两点之间的距离。

参数:
  • x1 -- 第一个点的X坐标

  • y1 -- 第一个点的Y坐标

  • x2 -- 第二个点的X坐标

  • y2 -- 第二个点的Y坐标

返回:

两点之间的距离

arcade.math.lerp(v1: float, v2: float, u: float) float[源代码]#

在两个值之间线性内插

arcade.math.lerp_2d(v1: Vec2 | Tuple[float, float] | List[float], v2: Vec2 | Tuple[float, float] | List[float], u: float) Tuple[float, float][源代码]#
arcade.math.lerp_3d(v1: Vec3 | Tuple[float, float, float] | List[float], v2: Vec3 | Tuple[float, float, float] | List[float], u: float) Tuple[float, float, float][源代码]#
arcade.math.lerp_angle(start_angle: float, end_angle: float, u: float) float[源代码]#

按照最短路径在两个角度之间以度为单位进行线性内插。

参数:
  • start_angle -- 起始角

  • end_angle -- 终点角度

  • u -- 插值值

返回:

插补角度

arcade.math.quaternion_rotation(axis: Tuple[float, float, float], vector: Tuple[float, float, float], angle: float) Tuple[float, float, float][源代码]#

绕三维单位长度向量顺时针旋转任意长度的三维向量。

这种矢量旋转方法不受旋转锁定的影响,但寻找旋转轴比寻找3个旋转角要稍微费力一些。参考:https://danceswithcode.net/engineeringnotes/quaternions/quaternions.html.

参数:
  • axis -- 将围绕其旋转的单位长度矢量

  • vector -- 要旋转的三维向量

  • angle -- 向量顺时针旋转的角度(以度为单位)

返回:

与自变量向量长度相同的旋转三维向量。

arcade.math.rand_angle_360_deg() float[源代码]#

返回以度为单位的随机角度。

arcade.math.rand_angle_spread_deg(angle: float, half_angle_spread: float) float[源代码]#

返回给定角度范围内的随机角度(以度为单位)。

参数:
  • angle -- 传播的角度

  • half_angle_spread -- 半角展开

返回:

以度为单位的随机角度

arcade.math.rand_in_circle(center: Tuple[float, float], radius: float) Tuple[float, float][源代码]#

在圆中生成点,或者可以将其视为指向随机方向的矢量,其随机幅度<=半径。

参考文献:https://stackoverflow.com/a/30564123

备注

此算法返回圆心周围较集中的点

参数:
  • center -- 圆的中心

  • radius -- 圆的半径

返回:

圆周上的任意点

arcade.math.rand_in_rect(bottom_left: Tuple[float, float], width: float, height: float) Tuple[float, float][源代码]#

计算矩形中的任意点。

参数:
  • bottom_left -- 矩形的左下角

  • width -- 矩形的宽度

  • height -- 矩形的高度

返回:

矩形中的任意点

arcade.math.rand_on_circle(center: Tuple[float, float], radius: float) Tuple[float, float][源代码]#

在圆上生成点。

参数:
  • center -- 圆的中心

  • radius -- 圆的半径

返回:

圆上的任意点

arcade.math.rand_on_line(pos1: Tuple[float, float], pos2: Tuple[float, float]) Tuple[float, float][源代码]#

给定定义一条直线的两个点,返回该直线上的任意点。

参数:
  • pos1 -- 第一点

  • pos2 -- 第二点

返回:

线上的任意点

arcade.math.rand_vec_magnitude(angle: float, lo_magnitude: float, hi_magnitude: float) Tuple[float, float][源代码]#

返回给定角度范围内的随机向量。

参数:
  • angle -- 传播的角度

  • lo_magnitude -- 较低的震级

  • hi_magnitude -- 震级越高

返回:

随机向量

arcade.math.rand_vec_spread_deg(angle: float, half_angle_spread: float, length: float) Tuple[float, float][源代码]#

返回给定角度范围内的随机向量。

参数:
  • angle -- 传播的角度

  • half_angle_spread -- 半角展开

  • length -- 向量的长度

返回:

随机向量

arcade.math.rotate_point(x: float, y: float, cx: float, cy: float, angle_degrees: float) Tuple[float, float][源代码]#

绕中心旋转点。

参数:
  • x -- 要旋转的点的X值

  • y -- 要旋转的点的Y值

  • cx -- 要绕其旋转的中心点的X值

  • cy -- 要绕其旋转的中心点的Y值

  • angle_degrees -- 旋转的角度,以度为单位

返回:

返回旋转的(x,y)对

arcade.math.round_fast(value: float, precision: int) float[源代码]#

这是一个高性能版本的Python的内置round()函数。

备注

此函数不如内置的ROUND()函数准确。但在某些情况下就足够了。

示例::

>>> round(3.5662457892, 1)
3.6
>>> round(3.5662457892, 2)
3.57
>>> round(3.5662457892, 3)
3.566
>>> round(3.5662457892, 4)
3.5662
参数:
  • value -- 要舍入的值

  • precision -- 要舍入到的小数位数

返回:

四舍五入的值