Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Приложения с GUI и дескрипторная графика.doc
Скачиваний:
49
Добавлен:
01.05.2014
Размер:
699.39 Кб
Скачать

5.7.3. Размещение текста на трехмерных графиках.

При выводе текста на трехмерные графики следует в первых трех входных аргументах функции text указывать три координаты текстового объекта. Построим, например график поверхности, задаваемой функцией peaks, которая используется во многих примерах справочной системы MATLAB, и рядом с точкой максимума поверхности разместим текст "Maximum". Соответственно, подпишем точку минимума "Minimum".

Функция peaks возвращает массив (квадратную матрицу), размеры которой совпадают со значением ее входного аргумента. Запишем этот массив в переменную Z и найдем максимальное M и минимальное m значения в нем при помощи функций max и min, соответственно. Напомним, что для поиска максимума в двумерном массиве следует два раза вызвать функцию max, поскольку результатом функции max является строка, содержащая максимальные элементы в каждом столбце (аналогично и для функции min). Далее используем функцию find для определения строчных и столбцевых индексов максимального и минимального элементов. Строчный и столбцевой индексы максимального элемента запишем в iM и jM, а минимального - в im и jm. Затем построим поверхность, обратившись к функции mesh. Если в функции mesh указан единственный входной аргумент - двумерный массив, то она строит поверхность, определяемую его значениями, при этом на оси абсцисс откладывается значение столбцевого индекса этого массива, а на оси ординат - значение строчного индекса. Останется вызвать функцию text для создания первого текстового объекта с надписью "Maximum" в точке с координатами (jM, iM, M+1) и второго, с надписью "Minimum", в точке с координатами (jm, im, m-1). Здесь в качестве третьей координаты взято M+1 и m-1 для того, чтобы текстовый объект находился на небольшом отдалении от поверхности. Соответствующие команды и результат приведены ниже.

figure

axes

Z = peaks(30);

M = max(max(Z))

[iM, jM] = find(Z == M)

m = min(min(Z))

[im, jm] = find(Z == m)

mesh(Z)

hTM = text(jM, iM, M+1, 'Maximum')

hTm = text(jm, im, m-1, 'Minimum')

5.7.4. Изменение вида текстового объекта.

Текстовый объект допускает выбор любого шрифта, изменение его начертания и цвета, заключение текста в рамку, задание ее размеров, стиля, толщины и цвета линии, заливку рамки цветом, а также поворот текстового объекта. Для этого предназначены следующие свойства текстового объекта:

  • FontAngle - наклон шрифта. Значения: 'normal' (прямой по умолчанию), 'italic' (курсив).

  • FontName - название шрифта. Значения: строка с названием шрифта, установленного на компьютере ('Helvetica ' по умолчанию).

  • FontSize - размер шрифта. Значение в пунктах (по умолчанию 10), или в тех единицах измерения, которые заданы при помощи свойства FontUnits (см. пункт Размещение текстового объекта, определение его размеров и положения).

  • FontWeight - жирность шрифта. Значения: 'normal (обычный, по умолчанию), или 'bold' (жирный).

  • Color - цвет шрифта. Значения: один из предопределенных цветов 'r', 'g', 'b', 'c', 'm', 'y', 'k', 'w', или вектор из трех компонент, задающий цвет в формате RGB (по умолчанию значение [0 0 0], т.е. текст выводится черным шрифтом).

  • EdgeColor - цвет рамки. Значения: 'none' (по умолчанию, поэтому рамки нет), или один из предопределенных цветов 'r', 'g', 'b', 'c', 'm', 'y', 'k', 'w', или вектор из трех компонент, задающий цвет в формате RGB.

  • BackgroundColor - цвет заливки. Значения: 'none' (по умолчанию, поэтому заливки нет), или один из предопределенных цветов 'r', 'g', 'b', 'c', 'm', 'y', 'k', 'w', или вектор из трех компонент, задающий цвет в формате RGB.

  • LineWidth - толщина границы рамки вокруг текстового объекта. Значение: толщина в пунктах (по умолчанию 0.5).

  • LineStyle - стиль линии рамки вокруг текстового объекта. Значения: '-' (по умолчанию, сплошная линия), '--' (штриховая линия), ':' (пунктирная линия), '-.' (штрих-пунктирная линия), 'none' (нет линии).

  • Margin - величина внутренних полей вокруг текста, точнее, расстояние от границ прямоугольника, ограничивающего текст, размеры и положение которого определяется значением свойства Extent текстового объекта (см. раздел Размещение текстового объекта, определение его размеров и положения), до границ рамки. Значение: расстояние в пикселях, большее нуля (по умолчанию 2 пикселя).

  • Rotation - поворот текстового объекта. Значение в градусах, отсчитываемое против часовой стрелки (по умолчанию 0).

Например, для получения такого графика:

достаточно выполнить следующие команды:

figure

axes

fplot('3*x+1', [0 2], [], 'r')

hold on

fplot('0.5*x-1', [0 2], [], 'g')

hT3 = text(1, 4.6, 'y=3x+1')

set(hT3, 'Rotation', 30,...

'FontSize', 14, 'FontWeight', 'bold', 'FontName', 'Arial',...

'Color', 'r', 'EdgeColor', 'k', 'BackgroundColor', 'y',...

'LineWidth', 3, 'LineStyle', ':', 'Margin', 5)

hT05 = text(1, 0, 'y=0.5x-1')

set(hT05, 'Rotation', 6,...

'FontSize', 14, 'FontWeight', 'bold', 'FontName', 'Arial',...

'Color', 'r', 'EdgeColor', 'k', 'BackgroundColor', 'y',...

'LineWidth', 3, 'LineStyle', ':', 'Margin', 5)

Заметим, что перед добавлением текстового объекта на оси, на которых уже есть другие объекты (в нашем примере это график функции), нет необходимости применять команду hold on, которая используется для последовательного вывода нескольких графиков на одни оси. Так происходит потому, что низкоуровневая функция text не проверяет значения свойства NextPlot графического окна и осей, которые как раз и отвечают за способ вывода, а просто выводит текстовый объект на текущие оси. Разумеется, если осей нет вообще, функция text их предварительно создаст. Однако, здесь следует соблюдать осторожность, например при отсутствии осей команда

text(100, 100, 'Outside')

приведет к их созданию, но текста на них не будет, поскольку создаваемые по умолчанию оси имеют пределы [0, 1] по каждой координате, а координаты текста заданы (100, 100). Сам текстовый объект, разумеется, присутствует, в чем несложно убедиться, задав пределы осей, скажем при помощи функции axis

axis([0 200 0 200])

или воспользовавшись свойствами XLim и YLim осей, указатель на которые вернет gca.

Функция text, как и многие другие функции для создания графических объектов, допускает задание свойств текстового объекта прямо при его создании. Для этого следует перечислить пары 'Свойство'-значение в списке входных аргументов после координат текстового объекта и строки с надписью. Так например, для создания первого текстового объекта можно было использовать следующее обращение к функции text:

hT3 = text(1, 4.6, 'y=3x+1', 'Rotation', 30,...

'FontSize', 14, 'FontWeight', 'bold', 'FontName', 'Arial',...

'Color', 'r', 'EdgeColor', 'k', 'BackgroundColor', 'y',...

'LineWidth', 3, 'LineStyle', ':', 'Margin', 5)