贝塞尔曲线

与贝塞尔曲线相关的实用函数。

函数

bezier(points)[source]

贝塞尔曲线的经典实现。

Parameters:

points (Sequence[Point3D] | Point3D_Array) – 定义所需贝塞尔曲线的点。

Returns:

  • 描述贝塞尔曲线的函数。

  • 您可以传递一个介于0和1之间的t值来获取曲线上的对应点。

Return type:

可调用[[float], Point3D]

diag_to_matrix(l_and_u, diag)[source]

将行表示矩阵对角线元素的数组转换为矩阵本身。 参见 scipy.linalg.solve_banded

Parameters:
  • l_and_u (元组[整数, 整数])

  • diag (ndarray[Any, dtype[Any]])

Return type:

ndarray[Any, dtype[Any]]

get_quadratic_approximation_of_cubic(a0, h0, h1, a1)[source]
Parameters:
Return type:

贝塞尔点

get_smooth_cubic_bezier_handle_points(points)[source]
Parameters:

(Point3D_Array)

Return type:

元组[BezierPoints, 贝塞尔点]

get_smooth_handle_points(points)[source]

给定一些锚点(points),计算控制点以使生成的贝塞尔曲线平滑。

Parameters:

(贝塞尔点) – 锚点。

Returns:

计算处理。

Return type:

元组[np.ndarray, np.ndarray]

integer_interpolate(start, end, alpha)[source]

这是interpolate的一个变体,它返回一个整数和余数

Parameters:
  • start (float) – 范围的起始值

  • end (float) – 范围的结束

  • alpha (float) – 一个介于0和1之间的浮点数。

Returns:

这将返回一个介于开始和结束(包括)之间的整数,表示它们之间的适当插值,以及一个“余数”,表示返回的整数与列表中下一个整数之间的新比例。

Return type:

元组[int, float]

示例

>>> integer, residue = integer_interpolate(start=0, end=10, alpha=0.46)
>>> np.allclose((integer, residue), (4, 0.6))
True
interpolate(start: float, end: float, alpha: float) float[source]
interpolate(start: Point3D, end: Point3D, alpha: float) Point3D
inverse_interpolate(start: float, end: float, value: float) float[source]
inverse_interpolate(start: float, end: float, value: Point3D) Point3D
inverse_interpolate(start: Point3D, end: Point3D, value: Point3D) Point3D

执行逆插值以确定在给定startend值或点的情况下,会产生指定value的alpha值。

Parameters:
  • start – 插值的起始值或点。

  • end – 插值的结束值或点。

  • value – 应确定alpha值的值或点。

Returns:

  • 生成给定输入的alpha值

  • startend之间进行插值时。

示例

>>> inverse_interpolate(start=2, end=6, value=4)
0.5

>>> start = np.array([1, 2, 1])
>>> end = np.array([7, 8, 11])
>>> value = np.array([4, 5, 5])
>>> inverse_interpolate(start, end, value)
array([0.5, 0.5, 0.4])
is_closed(points)[source]
Parameters:

(Point3D_Array)

Return type:

布尔

match_interpolate(new_start: float, new_end: float, old_start: float, old_end: float, old_value: float) float[来源]
match_interpolate(new_start: float, new_end: float, old_start: float, old_end: float, old_value: Point3D) Point3D

将值从旧范围插值到新范围。

Parameters:
  • new_start – 新范围的开始。

  • new_end – 新范围的结束。

  • old_start – 旧范围的开始。

  • old_end – 旧范围的结束。

  • old_value – 旧范围内的值,其对应的新范围内的值(具有相同的alpha值)是所需的。

Return type:

新范围内的插值。

示例

>>> match_interpolate(0, 100, 10, 20, 15)
50.0
mid(start: float, end: float) float[source]
mid(start: Point3D, end: Point3D) Point3D

返回两个值之间的中点。

Parameters:
  • start – 第一个值

  • end – 第二个值

Return type:

两个值之间的中点

partial_bezier_points(points, a, b)[source]

给定一个定义贝塞尔曲线的点数组,以及两个数字0<=a

这个算法非常巧妙,也非常复杂。

Parameters:
  • points (BezierPoints) – 定义贝塞尔曲线的点集。

  • a (float) – 所需部分贝塞尔曲线的下界。

  • b (float) – 所需部分贝塞尔曲线的上界。

Returns:

定义部分贝塞尔曲线的点集。

Return type:

np.ndarray

partial_quadratic_bezier_points(points, a, b)[source]
Parameters:
Return type:

QuadraticBezierPoints

point_lies_on_bezier(point, control_points, round_to=1e-06)[来源]

检查给定点是否位于具有给定控制点的贝塞尔曲线上。

这是通过将点作为常数项来求解贝塞尔多项式来完成的;如果存在任何实数根,则该点位于贝塞尔曲线上。

Parameters:
  • (Point3D) – 要检查的点的笛卡尔坐标。

  • control_points (贝塞尔点) – 贝塞尔曲线上有序控制点的笛卡尔坐标,该点可能位于曲线上,也可能不位于曲线上。

  • round_to (float) – 一个浮点数,所有值(如点的坐标)的小数位数将被四舍五入。

Returns:

该点是否位于曲线上。

Return type:

布尔

proportions_along_bezier_curve_for_point(point, control_points, round_to=1e-06)[来源]

获取与给定点对应的贝塞尔曲线上的比例,给定贝塞尔曲线的控制点。

贝塞尔多项式是使用给定点的坐标以及贝塞尔曲线的控制点构建的。在解决每个维度的多项式时,如果有每个维度共有的根,这些根给出了点沿曲线的比例。如果没有实根,则该点不在曲线上。

Parameters:
  • point (Point3D) – 应该获取其参数的点的笛卡尔坐标。

  • control_points (贝塞尔点) – 贝塞尔曲线上的有序控制点的笛卡尔坐标,该点可能位于曲线上,也可能不位于曲线上。

  • round_to (float) – 一个浮点数,所有值(如点的坐标)的小数位数将四舍五入到该浮点数。

Returns:

包含可能参数的列表(沿贝塞尔曲线的比例) 用于给定贝塞尔曲线上的给定点。 这通常只包含一个或零个元素,但如果 点位于闭合循环的开始/结束处,可能会返回 包含多个值的列表,对应于循环的开始和 结束等。

Return type:

np.ndarray[float]

Raises:

ValueError – 当point和控制点的形状不同时。

quadratic_bezier_remap(triplets, new_number_of_curves)[source]

通过分割贝塞尔曲线将曲线数量重新映射到更高的数量

Parameters:
  • triplets (QuadraticBezierPoints_Array) – 要重新映射的二次贝塞尔曲线的三元组,形状为(n, 3, 3)

  • new_number_of_curves (int) – 输出将包含的曲线数量。这个值需要比当前数量高。

Return type:

二次贝塞尔曲线的新三元组。

split_quadratic_bezier(points, t)[source]

在参数 t 处将二次贝塞尔曲线分割为两条二次曲线。

Parameters:
  • points (QuadraticBezierPoints) – 贝塞尔曲线的控制点 形状为 [a1, h1, b1]

  • t (float) – 用于分割贝塞尔曲线的 t

Returns:

  • 两条贝塞尔曲线作为元组列表,

  • 形状为 [a1, h1, b1], [a2, h2, b2]

Return type:

贝塞尔点

subdivide_quadratic_bezier(points, n)[来源]

将一个二次贝塞尔曲线细分为n个具有相同形状的子曲线。

曲线被分割的点位于参数 \(t = i/n\) 处,其中 \(i = 1, ..., n-1\)

Parameters:
  • (QuadraticBezierPoints) – 贝塞尔曲线的控制点,形式为 [a1, h1, b1]

  • n (int) – 将贝塞尔曲线细分的曲线数量

Return type:

贝塞尔曲线的新点形式为 [a1, h1, b1, a2, h2, b2, ...]

../_images/bezier_subdivision_example.png