Опубликован: 27.12.2010 | Уровень: специалист | Доступ: платный
Лекция 2:

Графика: основные принципы

Директивы

Директивы непосредственного управления цветом

В Mathematica цвет задается разными способами. Кроме названий стандартных цветов и четырех основных оттенков серого (тут мы пользуемся упомянутым выше примитивом \text{\tt Raster} )

\tt
In[27]:=\\
\phantom{In}colors = \{Red, Green, Blue, Cyan, Magenta, Yellow, Brown,\\
\phantom{Incol}Orange, Pink, Purple,\\
\phantom{Incol}LightRed, LightGreen, LightBlue, LightCyan, LightMagenta,\\
\phantom{Incol}LightYellow, LightBrown, LightOrange, LightPink,\\
\phantom{Incol}LightPurple\}; \\
\phantom{In}cl = Partition[Map[Apply[List, \#] &, colors], 10];\\
\phantom{In}Graphics[Raster[cl]]


In[30]:=Graphics[Raster[{Map[\#[\!\![1]\!\!] &, \{Black, White, Gray, LightGray\}]\}]]

которыми мы уже пользовались выше, есть возможность задавать цвет в форматах \text{\tt RGB, CMYK, Hue} и, кроме того, \text{\tt GrayLevel} для оттенков серого. В первых двух результирующий цвет представлен как сумма монохромных слагаемых (\text{\tt Red} - красный, \text{\tt Green} - зеленый, \text{\tt Blue} - синий) и (\text{\tt Cyan} - голубой, \text{\tt Magenta} - фиолетовый, \text{\tt Yellow} - желтый, \text{\tt blacK} - черный), принимающих значения от нуля до единицы, что проиллюстрировано в следующих примерах:

\tt
In[31]:=
\phantom{In}Manipulate[\\
\phantom{InM}Graphics[\{RGBColor[r, g, b], Rectangle[\{0, 0\}, \{1, 1/3\}]\}],\\
\phantom{InM}\{r, 0, 1, Appearance $\to$ "Labeled"\ \!\!\!\!\!\! \},\\
\phantom{InM}\{g, 0, 1, Appearance $\to$ "Labeled"\ \!\!\!\!\!\! \},\\
\phantom{InM}\{b, 0, 1, Appearance $\to$ "Labeled"\ \!\!\!\!\!\! \}]

\tt
In[32]:=\\
\phantom{In}Manipulate[\\
\phantom{InM}Graphics[\{CMYKColor[c, m, y, k], Rectangle [\{0, 0\}, \{1, 1/3\}]\}],\\
\phantom{InM}\{c, 0, 1, Appearance $\to$ "Labeled"\ \!\!\!\!\!\! \},\\
\phantom{InM}\{m, 0, 1, Appearance $\to$ "Labeled"\ \!\!\!\!\!\! \},\\
\phantom{InM}\{m, 0, 1, Appearance $\to$ "Labeled"\ \!\!\!\!\!\! \},\\
\phantom{InM}\{k, 0, 1, Appearance $\to$ "Labeled"\ \!\!\!\!\!\! \}]

Управление с помощью функции \text{\tt Hue} может быть как однопараметрическим (от красного к фиолетовому и обратно), так и трех- и четырех параметрическим (\text{\tt Hue, Saturation, Brightness, Opacity} ):


In[33]:=\\
\phantom{In}Manipulate[Graphics[\{Hue[t], Rectangle[\{0, 0\}, \{1, 1/3\}]\}],\\
\phantom{InM}\{t, 0, 2, Appearance $\to$ "Labeled"\ \!\!\!\!\!\! \}]

\tt
In[34]:=\\
\phantom{In}Craphics[Table[\{Hue[h], Edgeform[Gray], Rectangle[\{32h, 0\}]\},\\
\phantom{InGr}\{h, 0, 1, 1/32\}]]

Также однопараметрически оттенки серого задаются с помощью функции \text{\tt GrayLevel}:

\tt 
In[35]:=Manipulate[\\
\phantom{In[35]:=M}Graphics[\{GrayLevel[t], Rectangle[\{0, 0\}, \{1, 1/3\}]\}],\\
\phantom{In[35]:=M}\{t, 0, 1\}]

Директивы, управляющие размерами. Абсолютные и относительные характеристики

Pазмеры составляющих рисунок примитивов можно задавать как в абсолютных единицах, так и в относительных. Абсолютная единица размера точки равна 1/72 дюйма (т. е. та самая точка - \text{\tt point} старого матричного принтера). Относительная единица - это доля от размера рисунка.

Размер точки

\tt
In[36]:=Graphics[
\phantom{In[35]:=G}Table[\{Hue[1/i], AbsolutePointSize[i], Point[\{i,0\}]\},\\
\phantom{In[35]:=MT}\{i, 1, 20\}]]

\tt
In[37]:=\\
\phantom{In}Graphics[Table[\{PointSize[1/2^{i-1}], Hue[1/i], Point[\{0, 0\}]\},\\
\phantom{InGr}\{i, 1, 5\}]]

Сплошная или пунктирная линия, размер черточек и пробелов

Директива \text{\tt AbsoluteDashing[\{d1, d2, ..\}]} - последующие линии рисуются пунктиром с циклически повторяющимися интервалами абсолютных длин \text{\tt d1, d2, ...}, видимо, в пикселях. Директива \text{\tt Dashing[\{d1, d2, ..\}]} - то же, но размеры в долях ширины всей картинки.

Чтобы почувствовать разницу между \text{\tt AbsoluteDashing} и просто \text{\tt Dashing}, полезно поменять мышкой размер рисунка. При этом не меняется длина абсолютных \text{\tt dash}-ей (большая окружность и отрезок, идущий вправо вверх) и количество относительных \text{\tt dash}-ей (все остальные линии).

\tt 
In[38]:=\\
\phantom{In}Graphics[\{AbsoluteDashing[\{1, 5, 10\}], Line[\{\{0, 0\}, \{1, 1\}\}],\\
\phantom{InGr}Circle[], Dashing[\{.1, .2\}], Line[\{\{0, 0\}, \{1, -1\}\}],\\
\phantom{InGr}Circle[\{0, 0\}, 1/2]\}]

Возможны сокращенные версии этих абсолютных директив: \text{\tt Dotted, Dashed, DotDashed}:

\tt
In[39]:=\\
\phantom{In}Graphics[\{Dotted, Line[\{\{0, 0\}, \{1, 1\}\}], Dashed, Circle[],\\
\phantom{InGr}DotDashed, Line[\{\{0, 0\}, \{1, -1\}\}]\}]

Толщина линии Аналогично, имеются команды, управляющие толщиной линии:

\tt
In[40]:=AbsoluteThickness[r](*абсолютная толщина*) \\
\phantom{In[40]:=}Thickness[r](*относительная толщина*) \\
\phantom{In}Thin \\
\phantom{In}Thick \\ \\
Out[40]=AbsoluteThickness[r] \\ \\
Out[41]=Thickness[r] \\ \\
Out[42]=Thickness[Tiny] \\ \\
Out[43]=Thickness{Large] \\ \\
In[44]:= \\
\phantom{In}Graphics[{AbsoluteThickness[5], Line[\{\{0, 0\}, \{1, 1\}\}], \\
\phantom{In}Thickness[0.05], Circle[], Thin, Line[\{\{0, 0\}, \{1, -1\}\}]\}]

Снова поменяйте мышкой размер рисунка. Толщина абсолютных линий не меняется. Относительные линии меняют абсолютную толщину вместе с рисунком.

Светлана Петрова
Светлана Петрова
Украина
Марина Семенова
Марина Семенова
Россия, г. Чебоксары