matplotlib.bezier

提供有关贝塞尔路径操作的一些实用函数的模块。

class matplotlib.bezier.BezierSegment(control_points)[源代码]

基类:object

d维贝塞尔段。

参数:
control_points(N,d)数组

设备的位置 N 控制点。

axis_aligned_extrema()[源代码]

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

极值是曲线上一个偏导数为零的点。

返回:
dimsint,数组类型

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

dzeros浮点数,数组形式

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

property control_points

曲线的控制点。

property degree

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

property dimension

曲线的尺寸。

point_at_t(t)[源代码]

在单点处计算曲线 t . 返回元组 [float*d] .

property polynomial_coefficients

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

警告

遵循与之相反的惯例 numpy.polyval .

返回:
float,(n+1,d)数组u-like

多项式基展开后的系数,其中 \(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\u i\]

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

exception matplotlib.bezier.NonIntersectingPathException[源代码]

基类:ValueError

matplotlib.bezier.check_if_parallel(dx1, dy1, dx2, dy2, tolerance=1e-05)[源代码]

检查两条线是否平行。

参数:
dx1,dy1,dx2,dy2浮动

梯度 dy / dx 两条线中的一条。

tolerance浮动

以弧度表示的角公差,在该公差范围内,直线被认为是平行的。

返回:
is_parallel
  • 如果两条线在同一方向上平行,则为1。
  • -如果两条线在相反方向上平行,则为1。
  • 否则为假。
matplotlib.bezier.concatenate_paths(paths)[源代码]

[Deprecated] 将路径列表连接到单个路径中。

笔记

3.3 版后已移除.

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可赎回的

返回Bezier at参数的x,y坐标的函数 t . 必须有签名:

bezier_point_at_t(t: float) -> Tuple[float, float]
inside_closedpath可赎回的

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

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

开始搜索的参数。

tolerance浮动

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

返回:
t0、t1浮动

贝塞尔路径参数。

matplotlib.bezier.find_control_points(c1x, c1y, mmx, mmy, c2x, c2y)[源代码]

寻找贝塞尔曲线通过的控制点( c1xc1ymmxmmy ),和( c2xc2y ),参数值为0、0.5和1。

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)[源代码]

返回通过的线之间的交点( cx1cy1 )角度 t1 还有那条线( cx2cy2 )角度 t2 .

matplotlib.bezier.get_normal_points(cx, cy, cos_t, sin_t, length)[源代码]

一条线穿过( cxcy )有个角度 t ,返回沿其垂直线位于 长度 .

matplotlib.bezier.get_parallels(bezier2, width)[源代码]

给定二次Bezier控制点 贝塞尔2 ,返回二次贝塞尔线的控制点,这些控制点大致平行于用 宽度 .

matplotlib.bezier.inside_circle(cx, cy, r)[源代码]

返回一个函数,该函数检查一个点是否在具有圆心的圆中( cxcy )和半径 r .

返回的函数具有以下签名:

f(xy: Tuple[float, float]) -> bool
matplotlib.bezier.make_path_regular(p)[源代码]

[Deprecated] If the codes attribute of Path p is None, return a copy of p with codes set to (MOVETO, LINETO, LINETO, ..., LINETO); otherwise return p itself.

笔记

3.3 版后已移除.

matplotlib.bezier.make_wedged_bezier2(bezier2, width, w1=1.0, wm=0.5, w2=0.0)[源代码]

类似于get_parallels,返回两条二次Bezier线的控制点,这两条线的宽度大致平行于给定的一条线,由 宽度 .

matplotlib.bezier.split_bezier_intersecting_with_closedpath(bezier, inside_closedpath, tolerance=0.01)[源代码]

在具有闭合路径的交点处将贝塞尔曲线拆分为两条。

参数:
bezier类数组(N,2)

贝塞尔段的控制点。看到了吗 BezierSegment .

inside_closedpath可赎回的

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

tolerance浮动

交叉点的公差。另请参见 find_bezier_t_intersecting_with_closedpath .

返回:
左、右

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

matplotlib.bezier.split_de_casteljau(beta, t)[源代码]

分割由其控制点定义的贝塞尔线段 beta 分成两个分开的部分 t 返回他们的控制点。

matplotlib.bezier.split_path_inout(path, inside, tolerance=0.01, reorder_inout=False)[源代码]

把一条路分成两段 inside(x, y) 变成假的。