Опубликован: 27.12.2010 | Доступ: свободный | Студентов: 833 / 131 | Оценка: 5.00 / 5.00 | Длительность: 18:38:00
ISBN: 978-5-9556-0117-5
Специальности: Математик
Лекция 2:

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

Аннотация: В предыдущей лекции мы уже использовали простейшие графические возможности пакета. Теперь поговорим о них более подробно.
Ключевые слова: абсолютные размеры

В Mathematica существует всего два основных типа графических объектов: \text{\tt Graphics} и \text{\tt Graphics3D}. Имеется ДВА ОСНОВНЫХ СПОСОБА создавать графические объекты. Первый способ (и на самом деле основной) предназначен для создания графики, состоящей из набора простых графических элементов (так называемых примитивов), которые описываются явно (скажем, точки задаются своими координатами, сфера - своими центром и радиусом). При использовании второго способа соответствующие примитивы порождаются самим пакетом исходя из заданной функции, списка или другого объекта, подлежащего визуализации, с помощью специальных команд, таких как \text{\tt Plot, ParametricPlot} и т. п.

Изображение графических примитивов

Общий формат команды, изображающей на экране графические объекты, составленные из примитивов, таков:

\tt
Graphics[< primitives >, < options >] (* для 2-мерной графики *) 
Graphics3D[< primitives >, < options >](* для 3-мерной графики *)

Например,

\tt
In[1]:=Graphics[Circle[]] \\
\phantom{In[1]:=}Graphics3D[Sphere[]] \\
\phantom{In[1]:=}g=Graphics[Disk[]];

Отметим, что точка с запятой после команды, как и положено, подавляет вывод на экран, хотя операция все равно выполняется и ее результат сохраняется. Увидеть полученное можно обратившись к результату операции:

\tt In[4]:=g

Двумерные примитивы

Список основных двумерных примитивов

Вот список основных двумерных графических примитивов (элементарных кирпичиков, из которых складывается любая картинка) в алфавитном порядке (напомним, что (* комментарии *) обрамляются скобками со звездочками):

\tt 
In[5]:=Graphics[\{Arrow[\{\{0, 0\}, \{1, 1\}\}], \\
\phantom{In[5]:=Graphics[\{}Arrow[\{\{0, 1\}, \{0, ?\}, \{1/2, 1/3\}, \{1, 0\}\}], \\
\phantom{In[5]:=Gr}(* Стрелка, прямая или ломаная, \\
\phantom{In[5]:=Gr}заданная набором своих последовательных вершин \\
\phantom{In[5]:=Gra}(точнее - их координат) *) \\
\phantom{In[5]:=Graphics[\{}Circle [{1/2, 1/2}, 1/3], (*окружность, \\
\phantom{In[5]:=Gr}заданная своим центром и радиусом *)\} \\
\phantom{In[5]:=Graphics[\{}Disk [\{1/2, 1/2\}, 1/9], (* заполненный диск, \\
\phantom{In[5]:=Gr}заданный своим центром и радиусом *) \\
\phantom{In[5]:=Graphics[\{}Line[\{\{l/3, 1\}, \{2/3, 1\}\}],
\tt
\phantom{In[5]:=Gr}Line[\{\{l/3, 8/9\}, \{2/3, 8/9\}, \{4/5, 1\}, \{7/8, 1\}, \\
\phantom{In[5]:=Grap}\{1/3, 8/9\}\}], (* Отрезок или ломаная линия, \\
\phantom{In[5]:=Gr}заданные координатами своих последовательных вершин, \\
\phantom{In[5]:=Gr}Listable *) \\
\phantom{In[5]:=Graphics[\{}Point[\{1, 1/2\}], (* точка, \\
\phantom{In[5]:=Gr}заданная своими координатами, Listable *) \\ \\
\tt
\phantom{In[5]:=Gr}Polygon[\{\{l/3, 2/9\}, \{2/3, 2/9\}, \{4/5, 0\}, \{7/8, 0\}, \\
\phantom{In[5]:=GrPo}\{1/3, 2/9\}\}], (*заполненный многоугольник, \\
\phantom{In[5]:=Gr}заданный координатами последовательных вершин*)\} \\
\phantom{In[5]:=Gr}Rectangle [\{0, 1/10\}, \{3/10, 2/10\}], (* прямоугольник, \\
\phantom{In[5]:=Gr}заданный левой нижней и правой верхней вершинами*) \\
\phantom{In[5]:=Gr}Text["На этой картинке очень много всего", \{1, 1/2\}] \\
\phantom{In[5]:=Gr}(* текст, центрованный в заданной точке *)\} \\
\phantom{In[5]:=G}\}]

Конечно, такая картинка сложна для восприятия. Хочется добавить цвета, изменить толщину линий и прочее. Имеется две возможности менять вид рисунка вообще и графических примитивов в частности. Первый способ связан с использованием опций (\text{\tt Options}), которые влияют на рисунок в целом. Мы поговорим о них потом, а сейчас займемся вторым способом, использующим так называемые графические директивы (\text{\tt Directives}). Каждая директива оказывает действие на следующие за ней примитивы в списке:

\tt
In[6]:=Graphics [\{Red, Arrow[\{\{0, 0\}, \{1, 1\}\}], (* Red, очевидно, \\
\phantom{In[6]:=Gr}делает последующий вывод красным *) \\
\phantom{In[6]:=Graphics [\{}Arrow[\{\{0, 1\}, \{0, 1/2\}, \{1/2, 1/3\}, \{1, 0\}\}], \\
\phantom{In[6]:=Graphics [\{}Circle[\{l/2, 1/2\}, 1/3], \\
\phantom{In[6]:=Graphics [\{}Disk [\{1/2, 1/2\}, 1/9], \\
\phantom{In[6]:=Graphics [\{}Green, Line[\{\{l/3, 1\}, \{2/3, 1\}\}], \\
\phantom{In[6]:=Gr}(*Green - зелёным*) \\ \\
\phantom{In[6]:=Gr}Line[\{\{l/3, 8/9\}, \{2/3, 8/9\}, \{4/5, 1\}, \{7/8, 1\}, \\
\phantom{In[6]:=Grap}\{1/3, 8/9\}\}], \\
\phantom{In[6]:=Graphics [\{}Point[\{1, 1/2\}], \\ \\
\phantom{In[6]:=Gr}Polygon[\{\{l/3, 2/9\}, \{2/3, 2/9\}, \{4/5, 0\}, \{7/8, 0\}, \\
\phantom{In[6]:=Grap}\{1/3, 2/9\}\}], \\
\phantom{In[6]:=Gr}Rectangle[\{0, 1/10\}, \{3/10, 2/10\}], \\
\phantom{In[6]:=Gr}Text["На этой картинке очень много всего"\, \{1, 1/2\}] \\
\phantom{In[6]:=G}\}]

Можно ограничивать действие директивы, организуя примитивы в несколько подсписков:

\tt
In[7]:=Graphics[\{\{Red, Arrow[\{\{0, 0\}, \{1, 1\}\}], \\
\phantom{In[7]:=Graphics[\{}Dashing[0.05], \\
\phantom{In[7]:=Gra}Arrow[\{\{0, 1\}, \{0, 1/2\}, \{1/2, 1/3\}, \{1, 0\}\}]\}, \\
\phantom{In[7]:=Graphics[\{}Circle[\{l /2, 1/2\}, 1/3], \\
\phantom{In[7]:=Graphics[\{}\{Green, Disk [\{1/2, 1/2\}, 1/9]\}, \\
\phantom{In[7]:=Graphics[\{}\{Yellow, Line[\{\{l/3, 1\}, \{2/3, 1\}\}]\},
\tt
\phantom{In[7]:=Gr}\{Thick, Line[\{\{l/3, 8/9\}, \{2/3, 8/9\}, \{4/5, 1\}, \\
\phantom{In[7]:=Graph}\{7/8, 1\}, \{1/3, 8/9\}\}]\}, \\
\phantom{In[7]:=Gr}(*Thick указывает на толщину линии*) \\
\phantom{In[7]:=Graphics[\{}\{PointSize[0.1], Red, Point[\{1, 1 /2\}]\},  \\
\phantom{In[7]:=Gr}(* PointSize на относительный размер точки *) \\
\phantom{In[7]:=Graphics[\{}\{Opacity[0.65], EdgeForm[\{Blue, Thick\}], \\
\phantom{In[7]:=Gra}FaceForm[Yellow], (* Прозрачность, \\
\phantom{In[7]:=Gra}св-ва граничной ломаной и заполнения*) \\
\phantom{In[7]:=Gra}Роlуgon[\{\{1/3, 2/9\}, \{2/3, 2/9\}, \{4/5, 0\}, \{7/8, 0\}, \\
\phantom{In[7]:=Graph}\{1/3, 2/9\}\}]\},  \\
\phantom{In[7]:=Gr}Rectangle[\{0, 1 /10\}, \{3/10, 2/10\}], \\
\phantom{In[7]:=Gr}\{Text["Тут очень много всего"\, {1, 1/2}]\} \\
\phantom{In[7]:=G}\}]

Артур Гибадуллин
Артур Гибадуллин
Россия, г. Нижневартовск