Иногда для того, чтобы подчеркнуть некий переходный процесс или наличие размытой границы, на рисунках бывает полезным использовать градиенты (ну а кому-то интересны рюшечки). Поскольку большинство рисунков в своей работе я выполняю с использованием PSTricks, прямо не выходя из LaTeX (о рисовании примитивов уже было написано), то в данной заметке я опишу как создавать градиенты с помощью PSTricks.
Простые градиенты
Нам понадобится пакет pst-grad. Чтобы создать градиент, необходимо нарисовать требуемую физуру, а в качестве заливки в поле для дополнительных опций указать fillstyle=gradient. После этого нам окажутся доступны следующие параметры (из названий всё понятно):
- gradbegin — начальный цвет.
- gradend — конечный цвет.
- gradlines — количество линий, используемых для рисования. градиента. Чем больше - тем ровнее, но страдает время отрисовки. По умолчанию 500.
- gradangle — направление вектора градиента. На самом деле, перпендикуляра к вектору градиента (специально это так сделано, или нет - мне не понятно) .
- gradmidpoint — обозначает положение средней точки градиента (от 0 до 1). Понять что это такое можно, взглянув на рисунок, который можно создать следующим кодом.
\documentclass[a4paper]{article} \usepackage[utf8]{inputenc} \usepackage[noxcolor]{pstricks} \usepackage{pst-grad} \begin{document} \begin{pspicture}(-2,-1)(2,10) % рисуем прямоуголник с градиентом \psframe[fillstyle=gradient, gradbegin=green, gradend=blue, gradlines=500, gradmidpoint=1, gradangle=10](-2,-1)(2,1) % вставляем подпись \uput[90](0,1){gradmidpoint=1} % повторяем то же, но со смещением относительно начальной точки \rput(0,3){ \psframe[fillstyle=gradient, gradbegin=green, gradend=blue, gradlines=500, gradmidpoint=0, gradangle=10](-2,-1)(2,1) \uput[90](0,1){gradmidpoint=0} } \rput(0,6){ \psframe[fillstyle=gradient, gradbegin=green, gradend=blue, gradlines=500, gradmidpoint=0.3, gradangle=10](-2,-1)(2,1) \uput[90](0,1){gradmidpoint=0.3} } \rput(0,9){ \psframe[fillstyle=gradient, gradbegin=green, gradend=blue, gradlines=500, gradmidpoint=0.9, gradangle=10](-2,-1)(2,1) \uput[90](0,1){gradmidpoint=0.9, default} } \end{pspicture}

Цвета можно задавать исходя из стандартных имён, или в RGB формате. Для этого подключим пакет color и определим цвет посредством definecolor:
\usepackage{color} ... \begin{document} \begin{pspicture}(-2,-1)(2,11) \definecolor{mycolor}{rgb}{1,0.5,0.1} % а потом можем использовать цвет mycolor как захотим \end{pspicture} \end{document}
Радиальные градиенты
С помощью пакета pst-grad не удаётся создать радиальных градиентов. К примеру, если мы попытаемся использовать градиентную заливку в круге, то получим следующее:
\begin{pspicture}(-2,-2)(2,2) \definecolor{gradbegin}{rgb}{0.4,0.6,0.9} \definecolor{gradend}{rgb}{1,0.45,0.83} \pscircle[fillstyle=gradient,gradlines=1000,gradmidpoint=0](0,0){2} \end{pspicture}

То есть, обычный плоский градиент.
Для создания радиальных градиентов можно использовать пакет pst-slpe. В данном случае используется fillstyle=ccslope, а аргументы, задающие цвета, аналогичные: slopebegin, slopeend.
Особое внимание стоит уделить опции sloperadius. Из иллюстрации ниже должно быть понятно что к чему.
\begin{pspicture}(-2,-8)(8,4) \uput[90](0,3){red,yellow} \pscircle[fillstyle=ccslope,slopebegin=red, slopeend=yellow, sloperadius=1](0,0){2} \uput[90](0,2){sloperadius=1} \uput[90](5,3){yellow,blue} \rput(5,0){ \pscircle[fillstyle=ccslope,slopebegin=yellow, slopeend=blue, sloperadius=1](0,0){2} \uput[90](0,2){sloperadius=1} } \rput(0,-5){ \pscircle[fillstyle=ccslope,slopebegin=red, slopeend=yellow, sloperadius=2](0,0){2} \uput[90](0,2){sloperadius=2} } \rput(5,-5){ \pscircle[fillstyle=ccslope,slopebegin=yellow, slopeend=blue, sloperadius=3](0,0){2} \uput[90](0,2){sloperadius=3} } \end{pspicture}

Стоит отметить, точку отсчёта градиента можно смещать.
\begin{pspicture}(-2,-2)(2,3) \pscircle[fillstyle=ccslope,slopebegin=yellow, slopeend=blue, slopecenter=0.1 0.3](0,0){2} \uput[90](0,2){slopecenter=0.1 0.3} \end{pspicture}

Более того, с помощью pst-slpe, можно создавать и такие вещи:
\begin{pspicture}(-2,-2)(2,2) \pscircle[fillstyle=radslope,slopebegin=yellow, slopeend=blue](0,0){2} \uput[90](0,2){fillstyle=radslope} \end{pspicture}

Напоследок могу посоветовать почитать документацию по пакетам pstricks
(/usr/share/doc/texlive-pstricks-doc/generic/pstricks
) и pst-slpe
(/usr/share/doc/texlive-pstricks-doc/generic/pst-slpe
).
Добрый день. Не замечал ваш блог на планете runix.org
ОтветитьУдалитьНе могли бы вы добавиться туда? Привык почитывать планету вместо отдельных блогов.
--
С уважением, фанат свободного ПО и GNU Emacs.
Las Vegas casino near me - DrmCD
ОтветитьУдалитьLas Vegas casino near me · 5. Las 천안 출장마사지 Vegas 시흥 출장마사지 Casino. 1 Las 세종특별자치 출장샵 Vegas Blvd South, Las Vegas, 구리 출장안마 NV 89109. · (702) 770-1000 · Toll Free: 800-522-4700 인천광역 출장마사지 · Casino · Golf Courses: 11.