matplotlib.bezier
Модуль, предоставляющий некоторые служебные функции для работы с кривыми Безье.
- classmatplotlib.bezier.BezierSegment(control_points)[source]
-
Базовый класс:
objectД-мерный сегмент кривой Безье.
- Параметры:
-
- control_points(N, d) массив
-
Расположение N контрольных точек.
- axis_aligned_extrema()[source]
-
Возвращает размерность и положение экстремумов кривой, выровненных по осям.
Экстремумы — это точки вдоль кривой, где одна из её частных производных равна нулю.
- Возвращает:
-
- dimsмассив целых чисел
-
Индекс \(i\) частной производной, которая равна нулю в каждом внутреннем экстремуме.
- dzerosмассив чисел с плавающей точкой
-
Аналогичный по размеру dims. Параметр \(t\) такой, что \(d/dx_i B(t) = 0\)
- propertycontrol_points
-
Контрольные точки кривой.
- propertydegree
-
Степень многочлена. На единицу меньше числа контрольных точек.
- propertydimension
-
Размерность кривой.
- point_at_t(t)[source]
-
Вычисляет значение кривой в одной точке, возвращая кортеж из d чисел с плавающей точкой.
- propertypolynomial_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[source]
-
Базовый класс:
ValueError
- matplotlib.bezier.check_if_parallel(dx1, dy1, dx2, dy2, tolerance=1e-05)[source]
-
Проверяет, являются ли две линии параллельными.
- Параметры:
-
- dx1, dy1, dx2, dy2float
-
Градиенты dy/dx двух линий.
- tolerancefloat
-
Угловая погрешность в радианах, до которой линии считаются параллельными.
- Возвращает:
-
- is_parallel
-
- 1, если две линии параллельны в одном направлении.
- -1, если две линии параллельны в противоположных направлениях.
- False в противном случае.
- matplotlib.bezier.find_bezier_t_intersecting_with_closedpath(bezier_point_at_t, inside_closedpath, t0=0.0, t1=1.0, tolerance=0.01)[source]
-
Находит пересечение кривой Безье с замкнутой траекторией.
Точка пересечения t приближается двумя параметрами t0, t1, такими что t0 <= t <= t1.
Поиск начинается с t0 и t1 и использует простой алгоритм деления пополам, поэтому одна из конечных точек должна находиться внутри траектории, а другая — нет. Поиск останавливается, когда расстояние между точками, параметризованными t0 и t1, становится меньше заданной tolerance.
- Параметры:
-
- bezier_point_at_tвызываемая функция
-
Функция, возвращающая координаты x и y кривой Безье в параметре t. Она должна иметь сигнатуру:
bezier_point_at_t(t: float) -> tuple[float, float]
- inside_closedpathвызываемая функция
-
Функция, возвращающая True, если заданная точка (x, y) находится внутри замкнутой траектории. Она должна иметь сигнатуру:
inside_closedpath(point: tuple[float, float]) -> bool
- t0, t1float
-
Начальные параметры поиска.
- tolerancefloat
-
Максимальное допустимое расстояние между конечными точками.
- Возвращает:
-
- t0, t1float
-
Параметры кривой Безье.
- matplotlib.bezier.find_control_points(c1x, c1y, mmx, mmy, c2x, c2y)[source]
-
Находит контрольные точки кривой Безье, проходящей через (c1x, c1y), (mmx, mmy) и (c2x, c2y) в параметрических значениях 0, 0,5 и 1.
- matplotlib.bezier.get_cos_sin(x0, y0, x1, y1)[source]
- matplotlib.bezier.get_intersection(cx1, cy1, cos_t1, sin_t1, cx2, cy2, cos_t2, sin_t2)[source]
-
Возвращает точку пересечения прямой, проходящей через (cx1, cy1) под углом t1, и прямой, проходящей через (cx2, cy2) под углом t2.
- matplotlib.bezier.get_normal_points(cx, cy, cos_t, sin_t, length)[source]
-
Для прямой, проходящей через (cx, cy) под углом t, возвращает координаты двух точек, расположенных вдоль перпендикулярной ей прямой на расстоянии length.
- matplotlib.bezier.get_parallels(bezier2, width)[source]
-
Принимая на вход контрольные точки квадратичной кривой Безье bezier2, возвращает контрольные точки двух квадратичных кривых Безье, примерно параллельных заданной, разделённых расстоянием width.
- matplotlib.bezier.inside_circle(cx, cy, r)[source]
-
Возвращает функцию, проверяющую, находится ли точка внутри круга с центром (cx, cy) и радиусом r.
Возвращаемая функция имеет следующую сигнатуру:
f(xy: tuple[float, float]) -> bool
- matplotlib.bezier.make_wedged_bezier2(bezier2, width, w1=1.0, wm=0.5, w2=0.0)[source]
-
Аналогично функции
get_parallels, возвращает контрольные точки двух квадратичных кривых Безье, имеющих ширину примерно параллельную заданной, разделённых расстоянием width.
- matplotlib.bezier.split_bezier_intersecting_with_closedpath(bezier, inside_closedpath, tolerance=0.01)[source]
-
Разделяет кривую Безье на две части в точке пересечения с замкнутой областью.
- Параметры:
-
- bezier(N, 2) массив-подобный объект
-
Контрольные точки сегмента Безье. См.
BezierSegment. - inside_closedpathвызываемая функция
-
Функция, возвращающая True, если заданная точка (x, y) находится внутри замкнутой области. См. также
find_bezier_t_intersecting_with_closedpath. - toleranceвещественное число
-
Погрешность для пересечения. См. также
find_bezier_t_intersecting_with_closedpath.
- Возвращаемое значение:
-
- left, right
-
Списки контрольных точек для двух сегментов Безье.
- matplotlib.bezier.split_de_casteljau(beta, t)[source]
-
Разделяет сегмент Безье, определённый его контрольными точками beta, на два отдельных сегмента, разделённых на t, и возвращает их контрольные точки.
- matplotlib.bezier.split_path_inout(path, inside, tolerance=0.01, reorder_inout=False)[source]
-
Делит путь на два сегмента в точке, где
inside(x, y)становится False.
© 2012–2023 Matplotlib Development Team. All rights reserved.
Licensed under the Matplotlib License Agreement.
https://matplotlib.org/3.8.4/api/bezier_api.html