Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы / Labs 2004 / LABOR1 / LABOR_1.DOC
Скачиваний:
33
Добавлен:
16.04.2013
Размер:
390.66 Кб
Скачать

Московский институт электронной техники

Кафедра ИПОВС

Лабораторная работа

«Создание программ построения графиков в DOS и Windows»

Построение графика функции.

Для построения графика функции необходимо иметь массив значений аргументаxи массив соответствующих значений функцииy. Каждой паре чисел из этих массивов на графике будет соответствовать очка. Высветив все точки графика, получим совокупность точек – точечный график. На практике мы привыкли иметь дело с графиками, изображенными в виде непрерывной кривой.

Поэтому отдельные точки графика требуется соединить кривой. Для этого можно использовать различные методы аппроксимации. Рассмотрим кусочно-линейную аппроксимацию, при которой, отдельные точки графика соединяются отрезками. В результате рисование кривой сводится к рисованию отдельных отрезков, аппроксимирующих кривую. При малом шаге изменения аргумента кусочно-линейная аппроксимация дает хорошее приближение кривой.

При отображении точек графика на экране необходимо перейти от реальных величин, в которых измеряются значения аргумента и функции к безразмерным величинам – координатам течек растра экрана. Необходимо сопоставить каждой точке реального графика в мировых координатах (x, y) точку на экране в физических или экранных координатах (n, m).

Начало экранной системы координат (0, 0) располагается в левом верхнем углу экрана. Ось nнаправлена слева направо, осьm– сверху вниз Рис.1. В качестве единицы длины в данной системе координат используется пиксель.

Рис.1

При создании графика нельзя ограничиваться только кривой графика. Требуется провести координатные оси, произвести их разметку и сделать надписи. При необходимости можно нанести координатную сетку, состоящую из прямых линий, параллельных координатным осям.

Следует также учесть, что график будет располагаться в пределах поля вывода, размеры которого обычно меньше размеров экрана. Размеры поля вывода зададим в мировых координатах (x, y) и в экранных координатах (n, m). В мировой системе координат поле вывода можно определить, задав координаты левого нижнего угла (xLeft, yBottom) и координаты правого верхнего угла (xRight, yTop). В экранных координатах поле вывода определяется аналогично, координатами левого нижнего угла (nLeft, mBottom) и координатами правого верхнего угла (nRight, mTop) как показано на Рис.2.

ось y

Ось x

Рис.2

В этом случае мировые координаты (x, y) точкиAбудут изменяться в пределах

Экранные координаты (n, m) точкиAбудут изменяться соответственно в пределах

Необходимо получить связь между мировыми (x, y) и экранными (n, m) координатами точкиA. Это достигается с помощью соотношений

n = (x - xLeft)/(xRight - xLeft)*(nRight - nLeft) + nLeft;

m = (y - yBottom)/(yTop - yBottom)*(mTop - mBottom) + mBottom;

Удобно эти соотношения оформить в виде inline- функций. Приведем соответствующий фрагмент кода на языке программирования С++.

double xLeft, xRight, yBottom, yTop;

int nLeft, nRight, mBottom, mTop;

//переход от координаты xк пикселюn

inline int xn(double x){

return (x - xLeft)/(xRight - xLeft)*(nRight - nLeft) + nLeft; }

//переход от координаты yк пикселюm

inline int ym(double y){

return (y - yBottom)/(yTop - yBottom)*(mTop - mBottom) + mBottom; }

Для примера построим график синуса . Выберем следующие размеры поля вывода

Графическая библиотека BC++ под MS-DOS.

Графические средства в языке C++ и в его предшественнике – вCполностью отсутствуют. Все возможности для работы с графикой компиляторыC++ представляют в виде дополнительных библиотек графических функций, если программа работает подMS‑DOS. Если программа работает подWindows, то компилятор использует функции графического интерфейсаGDI(GraphicDeviceInterface– интерфейс графических устройств), которые предоставляет ему системаWindows. В качестве инструмента для работы с графикой будем использовать графическую библиотеку подMS‑DOSкомпилятораBC++ 3.1 фирмыBorland.

Для работы с графической библиотекой необходимо включить в программу заголовочный файл graphics.h.

#include <graphics.h>

Затем нужно инициализировать графическую систему. Фрагмент кода показывает, как это сделать

int mode, res, driver = DETECT;

initgraph(&driver, &mode,"c:\\borlandc\\bgi");

if((res = graphresult()) != grOk)

{

printf("\nGraphics error: %s\n", grapherrormsg(res));

exit(1);

}

Здесь предполагается, что компилятора BC++ 3.1 находится в каталогеc:\borlandc. В конце работы графическая система отключается вызовом функции.

closegraph();

Заметим также что, необходимо настроить компилятора BC++ 3.1 для работы с графикой. Откройте основное менюIDE(IntegratedDevelopmentEnvironment- интегрированная среда разработки)BC++ 3.1. Выберете пункт менюOptions. Пройдитесь по цепочке:OptionsCompiler - Code generation, и поставьте точку передModel Large. Затем пройдитесь по другой цепочке:OptionsCompiler - Entry/Exit Code, и поставьте точку передDOS standard. Следующая цепочка этоOptionsLinkerSettings, где надо поставить точку передStandard DOS EXE. Наконец, последняя цепочкаOptionsLinkerLibraries, где ставим крестик передGraphics Library. В этом случае подключается графическая библиотека компилятораBorlandC++ 3.1. Сохраните установки компилятора следующей цепочкойOptionsSave.

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

Соседние файлы в папке LABOR1