matplotlib.patches.Arc
-
class matplotlib.patches.Arc(xy, width, height, angle=0.0, theta1=0.0, theta2=360.0, **kwargs)[source] -
Bases:
matplotlib.patches.EllipseЭллиптическая дуга, т.е. сегмент эллипса.
Из-за внутренних оптимизаций существуют определённые ограничения на использование Arc:
- Дуга не может быть залита.
- Дуга должна использоваться в экземпляре
Axes— её нельзя добавить напрямую кFigure, так как она оптимизирована для рендеринга только тех сегментов, которые находятся внутри области осей с высоким разрешением.
Параметры: -
xy : (float, float) -
Центр эллипса.
-
width : float -
Длина горизонтальной оси.
-
height : float -
Длина вертикальной оси.
-
angle : float -
Поворот эллипса в градусах (против часовой стрелки).
-
theta1, theta2 : float, optional -
Углы начала и окончания дуги в градусах. Эти значения относятся к angle, например, если angle = 45 и theta1 = 90, абсолютный начальный угол равен 135. По умолчанию theta1 = 0, theta2 = 360, т.е. полный эллипс. Дуга рисуется против часовой стрелки. Углы, большие или равные 360, или меньшие 0, представляются эквивалентным углом в диапазоне [0, 360), взяв входное значение по модулю 360.
Другие параметры: -
**kwargs : Patch properties -
Большинство свойств
Patchподдерживаются в качестве ключевых аргументов, за исключением fill и facecolor, так как заливка не поддерживается.Свойство Описание agg_filterфункция фильтра, которая принимает (m, n, 3) массив чисел с плавающей точкой и значение dpi и возвращает (m, n, 3) массив alphaчисло с плавающей точкой или None animatedbool antialiasedили aaнеизвестно capstyle{'butt', 'round', 'projecting'} clip_boxBboxclip_onbool clip_path[( Path,Transform) |Patch| None]colorцвет containsвызываемый объект edgecolorили ecцвет или None или 'auto' facecolorили fcцвет или None figureFigurefillbool gidстрока hatch{'/', '\', '|', '-', '+', 'x', 'o', 'O', '.', '*'} in_layoutbool joinstyle{'miter', 'round', 'bevel'} labelобъект linestyleили ls{'-', '--', '-.', ':', '', (offset, on-off-seq), ...} linewidthили lwчисло с плавающей точкой или None path_effectsAbstractPathEffectpickerNone или bool или число с плавающей точкой или вызываемый объект rasterizedbool или None sketch_params(масштаб: число с плавающей точкой, длина: число с плавающей точкой, случайность: число с плавающей точкой) snapbool или None transformTransformurlстрока visiblebool zorderчисло с плавающей точкой
-
draw(self, renderer)[source] -
Отрисовка дуги в заданном renderer.
Примечания
Эллипсы обычно отрисовываются с помощью аппроксимации, использующей восемь кубических сплайнов Безье. Погрешность этой аппроксимации составляет 1.89818e-6, согласно этому неподтвержденному источнику:
Lancaster, Don. Приближение окружности или эллипса с использованием четырех кубических сплайнов Безье.
http://www.tinaja.com/glib/ellipse4.pdf
Существует случай, когда очень большие эллипсы должны быть отрисованы с высокой точностью, и слишком дорого обходится отрисовка всего эллипса с достаточным количеством сегментов (либо сплайнами, либо отрезками прямых). Поэтому, в случае, когда любой из радиусов эллипса достаточно большой, чтобы погрешность аппроксимации сплайном была заметна (больше, чем смещение на один пиксел от идеального значения), используется другой метод.
В этом случае отрисовываются только видимые части эллипса, причём для каждой видимой дуги используется фиксированное количество сегментов сплайна (8). Алгоритм выполняется следующим образом:
-
Определяются точки пересечения эллипса с рамкой области отображения осей координат. (Это делается путём выполнения обратного преобразования на рамку области отображения осей координат таким образом, что она относительна к единичной окружности — это делает вычисление пересечения намного проще, чем непосредственное вычисление пересечения эллипса, повернутого на определённый угол).
Для этого используется алгоритм "пересечения прямой и окружности" из:
Vince, John. Геометрия для компьютерной графики: формулы, примеры и доказательства. Лондон: Springer-Verlag, 2005.
- Вычисляются углы каждой из точек пересечения.
- Проходя против часовой стрелки, начиная с положительного направления оси X, каждая из видимых дуговых сегментов между парами вершин отрисовывается с использованием техники аппроксимации дуги Безье, реализованной в
matplotlib.path.Path.arc().
-
-
Примеры использования matplotlib.patches.Arc
© 2012–2018 Matplotlib Development Team. All rights reserved.
Licensed under the Matplotlib License Agreement.
https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.patches.Arc.html