matplotlib.bezier#

一个提供一些关于贝塞尔路径操作的实用功能的模块。

matplotlib.bezier。BezierSegment ( control_points ) [来源] #

基地:object

d 维贝塞尔线段。

参数
control_points (N, d) 数组

N个控制点的位置。

axis_aligned_extrema ( ) [来源] #

返回曲线内部极值的尺寸和位置。

极值是沿曲线的点,其中一个偏导数为零。

返回
调暗int 数组

指数\(i\)在每个内部极值处为零的偏导数。

dzeros浮点数组

与dims大小相同。这\(t\)这样\(d/dx_i B(t) = 0\)

属性 控制点#

曲线的控制点。

财产 学位#

多项式的次数。控制点数少一。

属性 维度#

曲线的尺寸。

point_at_t ( t ) [来源] #

在单点评估曲线,返回d个浮点数的元组。

属性 polynomial_coefficients #

贝塞尔曲线的多项式系数。

警告

遵循与 相反的约定numpy.polyval

返回
(n+1, d) 数组

在多项式基础上展开后的系数,其中\(n\) 是贝塞尔曲线的次数和\(d\)它的维度。这些是数字(\(C_j\)) 使得曲线可以写成\(\sum_{j=0}^n C_j t^j\).

笔记

系数计算为

\[{n \choose j} \sum_{i=0}^j (-1)^{i+j} {j \choose i} P_i\]

在哪里\(P_i\)是曲线的控制点。

异常 matplotlib.bezier。NonIntersectingPathException [来源] #

基地:ValueError

matplotlib.bezier。check_if_parallel ( dx1 , dy1 , dx2 , dy2 ,容差= 1e-05 ) [来源] #

检查两条线是否平行。

参数
dx1, dy1, dx2, dy2浮点数

两条线的梯度dy / dx

公差浮动

以弧度为单位的角度公差,线被认为是平行的。

返回
is_parallel
  • 1 如果两条线在同一方向上平行。

  • -1 如果两条线在相反方向平行。

  • 否则为假。

matplotlib.bezier。find_bezier_t_intersecting_with_closedpath ( bezier_point_at_t , inside_closedpath , t0 = 0.0 , t1 = 1.0 , tolerance = 0.01 ) [来源] #

找到贝塞尔曲线与闭合路径的交点。

交点t由两个参数t0t1近似, 使得t0 <= t <= t1

搜索从t0t1开始,并使用简单的二等分算法,因此其中一个端点必须在路径内,而另一个不在。当t0t1参数化的点的距离小于给定的公差时,搜索停止 。

参数
bezier_point_at_t可调用

返回参数t处贝塞尔曲线的 x、y 坐标的函数。它必须有签名:

bezier_point_at_t(t: float) -> tuple[float, float]
inside_closedpath可调用

如果给定点 (x, y) 在闭合路径内,则函数返回 True。它必须有签名:

inside_closedpath(point: tuple[float, float]) -> bool
t0, t1浮动

搜索的启动参数。

公差浮动

最终点之间的最大允许距离。

返回
t0, t1浮动

贝塞尔路径参数。

matplotlib.bezier。find_control_points ( c1x , c1y , mmx , mmy , c2x , c2y ) [来源] #

在参数值 0、0.5 和 1 处查找通过 ( c1x , c1y )、( mmx , mmy ) 和 ( c2x , c2y ) 的 Bezier 曲线的控制点。

matplotlib.bezier。get_cos_sin ( x0 , y0 , x1 , y1 ) [来源] #
matplotlib.bezier。get_intersection ( cx1 , cy1 , cos_t1 , sin_t1 , cx2 , cy2 , cos_t2 , sin_t2 ) [来源] #

返回以角度t1通过 ( cx1 , cy1 ) 的线与以角度t2通过 ( cx2 , cy2 )的线之间的交点。

matplotlib.bezier。get_normal_points ( cx , cy , cos_t , sin_t , length ) [来源] #

对于通过 ( cx , cy ) 并具有角度t的线,返回沿其垂线位于length距离处的两点的位置。

matplotlib.bezier。get_parallels ( bezier2 , width ) [来源] #

给定二次贝塞尔控制点bezier2,返回大致平行于由宽度分隔的给定的二次贝塞尔线的控制点。

matplotlib.bezier。inside_circle ( cx , cy , r ) [来源] #

返回一个函数,该函数检查一个点是否在一个圆心 ( cx , cy ) 和半径为r的圆中。

返回的函数具有签名:

f(xy: tuple[float, float]) -> bool
matplotlib.bezier。make_wedged_bezier2 ( bezier2 ,宽度, w1 = 1.0 , wm = 0.5 , w2 = 0.0 ) [来源] #

与 get_parallels 类似,返回两条二次贝塞尔线的控制点,其宽度大致平行于由 width分隔的给定一条。

matplotlib.bezier。split_bezier_intersecting_with_closedpath ( bezier , inside_closedpath , tolerance = 0.01 ) [source] #

在与闭合路径的交叉点处将贝塞尔曲线一分为二。

参数
贝塞尔(N, 2) 类数组

贝塞尔线段的控制点。见BezierSegment

inside_closedpath可调用

如果给定点 (x, y) 在闭合路径内,则函数返回 True。另请参阅find_bezier_t_intersecting_with_closedpath

公差浮动

交点的容差。另请参阅 find_bezier_t_intersecting_with_closedpath

返回
左右

两个贝塞尔线段的控制点列表。

matplotlib.bezier。split_de_casteljau ( beta , t ) [来源] #

将由其控制点beta定义的 Bezier 线段拆分为在t处划分的两个单独的线段,并返回它们的控制点。

matplotlib.bezier。split_path_inout (路径,内部,容差= 0.01 , reorder_inout = False ) [来源] #

在变为 False的点将路径分成两段。inside(x, y)