You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Тем не~менее, поскольку все наши типы и функции размещены в~отдельном пространстве имён, следует просто уточнить, что мы имеем в~виду класс \code{Graph\_lib::Rectangle}.
\noindent которые будут подробно рассмотрены в~последующих \textbookref{главах} учебника. Классы этой библиотеки предоставляют нам сравнительно небольшой набор графических возможностей, реализованных на~основе библиотеки \name{FLTK}.
65
65
66
66
Система сборки \name{CMake} имеет механизмы поиска <<внешних>> библиотек в~системе. Это позволяет уменьшить зависимость описания проекта от~платформы, оставляя при~этом возможность вручную задать конкретные пути к~ним в~процессе конфигурации. Для поиска библиотеки \name{FLTK}, а также её зависимости "--- библиотеки более низкого уровня \name{OpenGL}, нужно добавить следующие строки:
\noindent Флаг \code{REQUIRED} указывает, что без~данного компонента невозможна успешная сборка проекта. Таким образом, мы получаем более раннюю диагностику в~виде ошибки на~этапе конфигурирования.
71
71
72
72
\todo{\ldots добавить дальнейшее описание\ldots}
73
73
74
-
%Пути, дополнительные библиотеки и флаги компилятора зависят от платформы. Чтобы компилятор <<увидел>> заголовки (как правило, в угловых скобках), например:
75
-
%
76
-
%\begin{cppcode*}{linenos=false}
77
-
%#include <FL/Fl.H>
78
-
%#include <Graph_lib/Graph.h>
79
-
%\end{cppcode*}
80
-
%
81
-
%\noindent необходимо добавить пути (абсолютные или относительно проектного файла) к ним в стандартные пути поиска компилятора:
%Заметим, что путь к заголовкам \name{FLTK} добавлен в системные пути. Дело в том, что иногда <<вылезают>> предупреждения компилятора, которые относятся к файлам сторонних библиотек, например, о неиспользуемых параметрах в функциях. Изменение внешнего кода является зачастую плохим решением (почему?). Если есть такое желание, следует внести вклад в разработку данной библиотеки. Современная система глобальной коммуникации легко позволяет оказать помощь разработчикам. Примером, могут служить проекты в \name{GitLab} или \name{GitHub}. Альтернатива "--- просто сообщить компилятору, что код подключается из внешней (системной) библиотеки. Тогда он не станет выдавать нам предупреждения, которые относятся к этим файлам.
88
-
%
89
-
%Аналогично, чтобы компоновщик смог найти дополнительные библиотеки, которые мы перечислили, необходимо добавить пути к ним, если они располагаются вне стандартных каталогов, как в нашем случае:
%Инструкции читаются при условии, что целевая платформа "--- это \name{Linux}.
134
-
%
135
-
%Поправьте пути и имена библиотек в соответствии с версией \name{FLTK} на вашем компьютере. Ниже показано, как посмотреть флаги компилятора (\code{cxxflags}, \code{ldflags}), которые использует \name{FLTK}.
Изменение координат точки при вращении можно выразить через поворот самой системы координат:
133
+
134
+
\noindent
135
+
\parbox[c]{0.65\textwidth}{%
183
136
\[
184
137
\left\{\begin{array}{l}
185
-
x\prime = \phantom{-}x\cos\alpha+ y\sin\alpha, \\
186
-
y\prime = -x\sin\alpha + y\cos\alpha.
138
+
x = x\prime\cos\alpha- y\prime\sin\alpha, \\
139
+
y = x\prime\sin\alpha + y\prime\cos\alpha.
187
140
\end{array}\right.
188
141
\]
189
-
Используя эти соотношения, функция \code{rotated()} выполняет поворот точки \code{point} на угол \code{angle} относительно центра вращения \code{center} и возвращает новую точку. По умолчанию центр вращения расположен в начале координат.
142
+
Используя эти соотношения, функция \code{rotated()} выполняет поворот точки \code{point} на угол \code{angle} относительно центра вращения \code{center} (положительный угол отмеряется против часовой стрелки) и возвращает новую точку. По умолчанию центр вращения расположен в начале координат.
190
143
}\hfill\parbox[c]{0.35\textwidth}{%
191
144
\begin{center}\begin{tikzpicture}[>=Stealth, very thick]
Контейнер \code{std::list} представляет собой двусвязный список. Обойти его элементы можно используя итераторы "--- обобщённый аналог указателей. Они будут рассмотрены в \textbookref{главе~20} учебника. Список передаётся по rvalue-ссылке, которая позволяет избежать ненужного копирования объекта. Подробнее об этих ссылках и перемещении (\code{std::move}) мы узнаем в \textbookref{главе~18} учебника.
261
214
262
215
Вариант рисования снежинки Коха на базе правильного \code{n}-угольника в окне шириной~\code{w} средствами нашей библиотеки \code{Graph\_lib} можно записать так:
Мы добавили текстовую метку в центре фигуры, показывающую номер шага алгоритма. И также учли, что дальнейшее измельчение кривой бессмысленно, если длина ребра становится менее~\(1\) пикселя. Функцию \code{max\_edge\_length()} предлагаем реализовать самостоятельно.
267
220
268
221
\textbf{NB!} Обратите особое внимание, что замкнутая ломаная создаётся в теле цикла каждый раз заново. Дело в том, что \code{Graph\_lib} не предоставляет удобного способа добавления новых точек в середину кривой. Мы вынуждены откреплять нашу кривую от окна в конце итерации, чтобы избежать отрисовки несуществующего объекта.
Покажем лишь ключевой фрагмент кода. Напомним, что функция \code{regular\_polygon()} вычисляет вершины правильного многоугольника и была представлена ранее в~разделе~\ref{sect:geomelems}.
Класс \code{Vector\_ref} рассматривается в~\textbookref{главе~13} и удобен для~хранения множества неименованных объектов. Многоугольники рисуются с~использованием вращательной симметрии и раскрашиваются в~оттенки пурпурного (см. диаграмму цветов из~\textbookref{главы~13}). Результат работы программы показан на~рисунке~\ref{fig:regpoly}.
Мы уверены, что вы сможете самостоятельно добавить текстовые метки (подписи) к~кривым и раскрасить их, например, как на~рисунке~\ref{fig:superellipse}.
0 commit comments