贝塞尔曲线¶
与贝塞尔曲线相关的实用函数。
函数
- 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_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
执行逆插值以确定在给定
start和end值或点的情况下,会产生指定value的alpha值。- Parameters:
start – 插值的起始值或点。
end – 插值的结束值或点。
value – 应确定alpha值的值或点。
- Returns:
生成给定输入的alpha值
在
start和end之间进行插值时。
示例
>>> 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
- point_lies_on_bezier(point, control_points, round_to=1e-06)[来源]¶
检查给定点是否位于具有给定控制点的贝塞尔曲线上。
这是通过将点作为常数项来求解贝塞尔多项式来完成的;如果存在任何实数根,则该点位于贝塞尔曲线上。
- proportions_along_bezier_curve_for_point(point, control_points, round_to=1e-06)[来源]¶
获取与给定点对应的贝塞尔曲线上的比例,给定贝塞尔曲线的控制点。
贝塞尔多项式是使用给定点的坐标以及贝塞尔曲线的控制点构建的。在解决每个维度的多项式时,如果有每个维度共有的根,这些根给出了点沿曲线的比例。如果没有实根,则该点不在曲线上。
- Parameters:
- 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, ...]