matplotlib.patches.Arc
-
class matplotlib.patches.Arc(xy, width, height, angle=0.0, theta1=0.0, theta2=360.0, **kwargs) -
Эллиптическая дуга. Из-за различных оптимизаций она не может быть залита.
Дуга должна использоваться в экземпляре
Axes— её нельзя добавить напрямую вFigure, — так как она оптимизирована для отображения только сегментов, которые находятся внутри области отображения осей с высоким разрешением.Поддерживаются следующие аргументы:
- xy
- центр эллипса
- width
- длина горизонтальной оси
- height
- длина вертикальной оси
- angle
- угол поворота в градусах (против часовой стрелки)
- theta1
- начальный угол дуги в градусах
- theta2
- конечный угол дуги в градусах
Если theta1 и theta2 не указаны, дуга образует полный эллипс.
Допустимые ключевые слова:
Свойство Описание agg_filterнеизвестно alphaчисло с плавающей точкой или None animated[True | False] antialiasedили aa[True | False] или None для значения по умолчанию capstyle[‘butt’ | ‘round’ | ‘projecting’] clip_boxэкземпляр matplotlib.transforms.Bboxclip_on[True | False] clip_path[ ( Path,Transform) |Patch| None ]colorспецификация цвета matplotlib containsфункция-обработчик edgecolorили ecспецификация цвета mpl, None, ‘none’, или ‘auto’ facecolorили fcспецификация цвета mpl или None для значения по умолчанию, или ‘none’ для отсутствия цвета figureэкземпляр matplotlib.figure.Figurefill[True | False] gidстрока-идентификатор hatch[‘/’ | ‘' | ‘|’ | ‘-‘ | ‘+’ | ‘x’ | ‘o’ | ‘O’ | ‘.’ | ‘*’] joinstyle[‘miter’ | ‘round’ | ‘bevel’] labelстрока или любой печатаемый объект с преобразованием ‘%s’ linestyleили ls[‘solid’ | ‘dashed’, ‘dashdot’, ‘dotted’ | (смещение, последовательность отрезков) | '-'|'--'|'-.'|':'|'None'|' '|'']linewidthили lwчисло с плавающей точкой или None для значения по умолчанию path_effectsнеизвестно picker[None|число с плавающей точкой|логическое значение|функция-обработчик] rasterized[True | False | None] sketch_paramsнеизвестно snapнеизвестно transformэкземпляр Transformurlстрока-ссылка visible[True | False] zorderлюбое число -
draw(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–2017 Matplotlib Development Team. All rights reserved.
Licensed under the Matplotlib License Agreement.
http://matplotlib.org/2.1.0/api/_as_gen/matplotlib.patches.Arc.html