Информация о программе и авторе
Методика построения графика функции График изображается в виде ломаной линии, соединяющей точки, лежащие на графике (производится кусочно-линейная аппроксимация кривой графика). Такая аппроксимация дает хороший результат при достаточно малом шаге. Этап 1: вычислить массивы значений аргумента и соответствующих значений функции. Шаг изменения аргумента зависит от выбранного диапазона изменений аргумента и количества точек, и вычисляется по формуле: h=(Xmax-Xmin)/(k-1), Где К – количество точек графика. Параллельно с созданием массивов нужно определить минимальное и максимальное значения функции, что необходимо для проведения масштабирования. Этап 2: определить координаты точек графика, выраженные в экранных координатах с учетом размеров выбранного поля вывода графика (Xn,Yn; Xk,Yk), т.е. нужно провести масштабирование. Масштабирование по каждой из координатных осей производится в соответствии с общей формулой: M = diapNum/diapVal, где diapNum = maxK-minK - диапазон номеров позиций экрана, т.е. разность максимальной и минимальной координат поля вывода; diapVal = maxF-minF - диапазон значений величины, откладываемой по оси абсцисс (ординат), т.е. разность максимального и минимального значений аргумента (функции). Тогда: номер позиции по оси Х точки графика определяется из выражения: coordX[i] = round((X[i] - Xmin)*diapG/diapX))+Xn, где coordX[i] - номер позиции в строке для i-ой точки; X[i] - значение аргумента в i-ой точке; Xmin - минимальное значение аргумента; diapG = Xk-Xn – диапазон позиций вдоль оси Х поля вывода; diapX = Xmax-Xmin - диапазон значений аргумента; номер позиции по оси Y точки графика определяется из выражения: coordY[i] = round((Ymax - Y[i])*diapV/diapY))+Yn, где coordY[i] - номер позиции в столбце для i-ой точки;
Y[i] - значение функции в i-ой точке; Ymax - максимальное значение функции; diapV = Yk-Yn – диапазон позиций вдоль оси Y поля вывода; diapY = Ymax - Ymin - диапазон значений функции. Этап 3: рисование графика. На основе полученных координат (coordX, coordY) точек кривой графика осуществить соединение этих точек отрезками прямых. Этап 4: нанесение координатной сетки. Если ndx - количество интервалов, на которое разбивается поле вывода по оси абсцисс, а ndy – по оси ординат, то разность значений аргумента (функции), соответствующая этому интервалу определяется формулами: dx = (Xmax - Xmin) / ndx dy = (Ymax - Ymin) / ndy. Те же значения, выраженные в экранных координатах: lx = round((Xk - Xn)/ndx) ly = round((Yk - Yn)/ndy). С учетом вычисленных значений нарисовать линии координатной сетки. Этап 5: нанесение соответствующих числовых значений аргумента и функции (оцифровка осей). Для вывода надписей нужно перейти от действительной формы представления значений аргумента и функции к их строковому представлению. Для этого можно использовать стандартную процедуру Str(value:n:m; Var s:string). Следует учесть, что символ занимает (по умолчанию) прямоугольник размером 8х8 пикселей. Тогда, если под запись числа отводится n позиций, m из которых под дробную часть, то начальная позиция вывода значений функции определяется из выражения: Xn – n*8 – 15. Начальная позиция вывода значений аргумента определяется выражением: Xn + lx*(i-1) – (n-m)*8 + 4. Задание №3 – на 3 лабораторной работы. Нарисовать в одном поле вывода графики двух функций (выбирать из предложенного списка с помощью компонента RadioGroup, List или любого другого) от одного аргумента. Рисование осуществить в двух режимах: в одном масштабе (общая для обоих графиков ордината, общая оцифровка) и в разных масштабах (независимые ординаты для графиков, две независимых оцифровки). В любом из режимов обеспечить просмотр графиков влево и вправо от заданного диапазона аргумента с некоторым шагом его изменения. При этом должна изменяться оцифровка обеих осей. Для прокрутки графиков использовать компонент ScrollBar или любой другой.
При очень больших и очень малых значениях аргумента или функции переходить в оцифровке осей к экспоненциальной форме представления числа. При подводке указателя мыши к графику функции высвечивать координаты указанной точки. Создать меню следующей структуры: Параметры - поле вывода - координаты левого верхнего угла поля вывода - размеры поля вывода - диапазон аргумента - сетка (координатная) - выводить - количество вертикальных линий - количество горизонтальных линий - не выводить Рисование графиков - в одном масштабе - в разных масштабах Информация о программе и авторе Выход Необходимые для выполнения графической части задания сведения: Основные понятия Приложение может выводить графику на поверхность объекта – формы или компонента. Существует компонент для вывода готовых изображений (рисунков или фотографий) из графических файлов (компонент Image). Изображения, формируемые приложением, можно выводить на поверхность формы или компонентов Image и PaintBox. Поверхности объекта соответствует свойство Canvas. В свою очередь, свойство Canvas (канва, холст) – это объект класса TСanvas. Методы этого типа обеспечивают вывод графических примитивов (точек, линий, окружностей, прямоугольников и т.д.), а свойства позволяют задать характеристики выводимых графических примитивов (цвет, толщину и стиль линий; цвет и вид заполнения областей; характеристики шрифта при выводе текстовой информации). Канва состоит из отдельных точек – пикселей - и имеет свойство Pixels, которое содержит информацию о цвете каждой точки графической поверхности и представляет собой матрицу класса TColor. Положение пикселя характеризуется его горизонтальной (x) и вертикальной (y) координатами. Система координат канвыимеет началом левый верхний угол компонента или формы (координата x возрастает при перемещении слева направо, а координата y - при перемещении сверху вниз). Значения координат правой нижней точки поверхности вывода зависят от размера холста (рис.1). Его размер можно установить с помощью «Инспектора объектов» или программно, обратившись к свойствам Height и Width компонентов или к свойствам формы: ClientHeight и ClientWidth.
Примечание: клиентская область формы на 8 пикселей по ширине и 32 пикселя по высоте меньше размеров самой формы. Важнейшее свойство пикселя - его цвет (Color). Для описания цвета используется класс TColor. Свойство Color используется практически каждым компонентом. В Turbo Delphi определено множество констант типа TСolor. Одни из них непосредственно определяют цвета (например, clGreen - зеленый), другие определяют цвета элементов окон, которые могут меняться в зависимости от выбранной пользователем палитры цветов Windows (например, clBtnFace - цвет поверхности кнопок).
Рис.1. Координаты точек холста (канвы)
В таблице 1 приведены именованные константы, которые можно использовать в качестве значения свойства Color: Таблица 1
Карандаш и кисть Методы, обеспечивающие вычерчивание на поверхности канвы графических примитивов используют карандаш и кисть. Первый предназначен для вычерчивания линий, вторая – для заливки областей, ограниченных линиями. Карандашу соответствует свойство Pen – перо класса TPen. Это объект, в свою очередь имеющий ряд свойств. Одно из них - уже известное свойство Color - цвет, которым наносится рисунок. Второе свойство - Width (ширина линии), которое задается в пикселях и по умолчанию равно 1 пикселю. Третье свойство Style определяет вид линии. В таблице 2 приведены именованные константы, которые можно использовать в качестве значения свойства Style.
Таблица 2
Примечание. Все пунктирные линии имеют толщину равную 1 пикселю.
По умолчанию линия вычерчивается цветом, определяемым значением свойства Pen.Color.
У канвы имеется свойство PenPos класса TРoint (предопределенный тип TРoint представляет собой запись, поля х и y которой содержат координаты точки). Это свойство определяет в координатах канвы текущую позицию пера. Перемещение пера без прорисовки линии, т.е. изменение PenPos, производится методом канвы MoveTo (x, y). Точка с координатами (x, y) становится текущей и от нее методом LineTo (x, y) можно провести линию в точку с другими координатами (x, y). При этом PenPos определяет уже конечную точку линии, и новый вызов LineTo будет проводить линию из этой новой текущей точки. Кисти соответствует свойство канвы Brush – кисть класса TBrush. Оно определяет фон и цвет заполнения замкнутых фигур. Brush - это объект, имеющий в свою очередь ряд свойств. Свойство Color определяет цвет заполнения фигуры, а свойство Style - шаблон (штриховку). В таблице 3 приведены именованные константы, которые можно использовать в качестве значения свойства Style: Таблица 3
В таблице 4 приведены некоторые методы канвы для рисования фигур: Таблица 4
Примечание. Д ля изображения закрашенной фигуры перед использованием соответствующего метода (Chord, Ellipse, Pie, Polygon и др.) необходимо заказать цвет и стиль её закраски (Brush.Color и Brush.Style). Для заполнения замкнутых областей произвольной формы можно использовать метод FloodFill (x, y: integer; Color: TColor; FillStyle: TFillStyle). Тип TFillStyle определен следующим образом: type TFillStyle = (fsSurface, fsBorder); Точка с координатами (x, y) является произвольной внутренней точкой заполняемой области. Граница этой области определяется сочетанием параметров Color и FillStyle. Параметр Color указывает цвет, который используется при определении границы заполняемой области, а параметр FillStyle определяет, как именно по этому цвету определяется граница. Если FillStyle = fsSurface, то заполняется область, окрашенная цветом Color, а на других цветах метод останавливается. Если FillStyle = Border, то наоборот, заполняется область, окрашенная любыми цветами, не равными Color, а на цвете Color метод останавливается.
Для вывода текста на графическую поверхность используется метод TextOut (x, y: integer; text: string). Для определения параметров выводимого текста используется свойство канвы Font – шрифт класса TFont, которое в свою очередь является объектом и имеет ряд свойств. В таблице 5 приведены свойства объекта Font. Таблица 5
Текст выводится на графическую поверхность в позицию с координатами (x, y) в соответствии с текущими установками шрифта Font. Фон надписи определяется установками текущей кисти Brush (если нет необходимости в фоне для надписи, то перед выводом текста свойству Brush.Style нужно присвоить значение bsClear или задать свойству Brush.Color цвет, совпадающий с цветом поверхности, на которую выводится текст – например, clBtnFace). По завершении метода текущей позицией PenPos пера Pen становится конец выведенного текста. Перечисленные свойства и методы представляют не все графические возможности Delphi. Однако, они обеспечивают около 80% потребностей, обычно возникающих при работе с графикой.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|