русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

ГРАФИКА


Дата добавления: 2014-11-28; просмотров: 645; Нарушение авторских прав


Графический режим ПК зависят от типа монитора и видиоадаптера. Мы будем использовать лучший доступный режим: VGA, максимальное разрешение 640х480 точек (пискселей), 16 цветов. Соответствующий драйвер находится в файле EgaVga.bgi. Графический режим определяет команда

InitGraph(драйвер,мода,путь к файлу драйвера)

здесь: драйвер – номер драйвера (для VGA это 9), мода – номер режима (для 640х480 это 2), путь к файлу драйвера на диске. Если файл находится в директории Паскаля, путь можно не указывать, а ввести пустые кавычки. Параметры драйвер и мода можно не задавать. Тогда они будут определены автоматически.

Возврат в текстовый режим экрана:

CloseGraph.

Отсчет экранных координат начинается с левого верхнего угла: Х – вправо, Y – вниз.

Паскаль располагает функциями, позволяющими осуществлять элементарные графические построения:

GetMaxY Вертикальный размер экрана по оси Y (в режиме VGA =479, поскольку отсчет точек от 0).
GetMaxX Горизонтальный размер экрана по оси Х (в режиме VGA =639, поскольку отсчет от 0).
MoveTo(x,y) Переместит курсор в позицию x,y.
MoveRel(dx,dy) Переместит курсор от текущей точки на расстояние dx,dy.
ClearDevice Очищает экран.
PutPixel(x,y,цвет) Выводит заданным цветом точку в координатах x,y.
Line(x1,y1,x2,y2) Проводит прямую от точки с координатами x1,y1 до x2,y2.
LineTo(x,y) Проводит прямую от текущей точки до точки с координатами x,y.
LineRel(dx,dy) Проводит прямую от текущей точки на расстояние dx,dy.
Rectangle(x1,y1,x2,y2) Строит контур прямоугольника с координатами левого верхнего (x1,y1) и правого нижнего (x2,y2) углов.
Bar(x1,y1,x2,y2) Закрашивает прямоугольную область с координатами левого верхнего (x1,y1) и правого нижнего (x2,y2) углов, установленным командой SetFillStyle, цветом.
Cyrcle(x,y,r) Строит круг с центром в точке x,y и радиусом r.
Ellipse(x,y,угол1, угол2,Rx,Ry) Строит эллиптическую дугу с центром в точке x,y от начального угла1 (в градусах) до угла2. Rx и Ry задают горизонтальный и вертикальный радиусы эллипса.
PieSlice(x,y,угол1, угол2,r) Строит сектор круга с центров в точке х,у радиусом r от угла1 (в целых градусах) до угла2. Заполнение и закрашивание секторов осуществляется функцией SetFillStyle.
SetFillStyle( заполнение,цвет) Определяет тип заполнения (0 нет, 1 сплошное, 2 горизонтальное, 3 штриховка /, 4 толстая штриховка / ,5 толстая штриховка \, 6 штриховка \, 7 +, 8 x, 9 клетка, 10 точки, 11 частые точки) и цвет заполнения фигур.
SetColor(цвет) Устанавливает текущий цвет линий и символов: Black – 0, Blue – 1, Green – 2, Cyan – 3, Red – 4, Magenta – 5, Brown – 6, LightGray 7, DarkGray – 8, LightBlue – 9, LightGreen – 10, LightCyan – 11, LightRed – 12, LightMagenta – 13, Yellow – 14, White – 15.
SetBkColor(цвет) Устанавливает текущий цвет фона.
SetLineStile(тип, вид, толщина) Устанавливает стиль линий. Тип: 0 – сплошная линия, 1– точечная, 2 – штрих-пунктир, 3 – пунктир. Вид: 0. Толщина: 1 или 3 пикселя.

Задача 11-1. Нарисовать на экране: 1). Две диагонали, пересекающиеся в центре. 2) Четыре концентрических окружности с центрами в центре экрана и радиусами 50, 100, 150, 200.



Задача 11-2. Вывести на кран функцию f(x)=sin(x)*x вместе с координатными осями. Аргумент Х изменяется от начального значения Xn=0 до конечного Xk=20 с шагом dx=0.01. Главная проблема зак­лючается в масштабировании исходной “натуральной” функции F в ее экранный вид Fэ: F(X)ðFэ(Xэ). Здесь следует учесть, что экранные координаты расположены (рис. 11-2) не так как мы привыкли. Точка 0э,0э находится в его верхнем левом углу (а не в центре), ось Yэ идет вниз (а не вверх), ось Xэ – идет вправо. Т.о. для адекватного отображения графика на экране нам понадобится реализовать три действия:

1. Масштабировать диапазоны D изменения натуральных Х и Y к желаемым экранным, т.е. привести DХ и DY к DХэ и DYэ соответственно с помощью масштабных коэффициентов Mx=DХэ/Dx и My=DYэ/DY.

2. Перенести координаты так, чтобы максимум Yэ приходился на верхнюю границу экранной области, а начальное значение X – на левую ее границу.

3. Перевернуть направление графика. Поскольку направление экранной оси ординат противоположно натуральному, знак изменения Yэ должен быть противоположен знаку Y.

Программа имеет следующую структуру. 1). Описывается функция вычисления f(x). 2). Выясняются размеры экрана, параметры аргумента, проводится вертикальная координата. 3).Находятся максимальные значения Y. 4). Выполняется масштабирование переменных (msy и msx). Эти значения указывают, сколько пикселей приходится на единицу изме­нения Y и Х соответственно. 5). Выполняется собственно рисование кривой. Здесь оно выполнено двумя способами – точками и отрезками линий. Проверьте результат в обоих случаях, поочередно убрав одну из них. 6). Проводится ось Х.

program P11_2;

uses graph;

var d,m,rx,ry:integer;

x,y,xn,xk,ymin,ymax,dx:real; msy,msx:real;

function f(x:real):real;{вычисление функции}

begin f:=sin(x)*x end;

Begin

initgraph(d,m,'');{переход в графический режим}

ry:=getmaxy+1; rx:=getmaxx+1;{размер экрана}

line(0,0,0,ry);{ось Y}

xn:=0; xk:=60; dx:=0.01;{параметры аргумента}

x:=xn; {начальное Х}

ymin:=f(x); ymax:=f(x);

while x<=xk do begin{поиск максимума и минимума Y}

y:=f(x);

if y>ymax then ymax:=y;

if y<ymin then ymin:=y;

x:=x+dx;{изменяем Х}

end;

msy:=ry/abs(ymax-ymin);{масштаб по Y}

msx:=rx/abs(xk-xn);{масштаб по X}

x:=xn;{начальное Х}

while x<=xk do begin{рисование}

y:=f(x);

putpixel(round((x-xn)*msx),-round((y-ymax)*msy),2);{точки}

lineto(round((x-xn)*msx),-round((y-ymax)*msy));{отрезки}

x:=x+dx;{изменяем Х}

end;

line(0,-round(-ymax*msy),rx,-round(-ymax*msy)); {ось Х}

readln;{пауза для просмотра картинки}

closegraph;

End.

Задания.

а). Решить аналогичную задачу, но ось Y направить горизонтально, а Х – вертикально.

б). Известна зарплата (массив zar[1..5]) работников (N=5) бригады. Построить диаграмму из вертикальных линий.

в). Условие то же, но диаграмма столбиковая. Замечание. Ширина столбца определяется делением ширины экрана на число рабочих. Однако, если ширина столбца не кратна размеру экрана, крайний столбец будет отображен не полностью. При программировании следует учесть этот фактор, уменьшив ширину столбца.

г). Известна зарплата (массив zar[1..5]) и премия (массив p[1..5]) каждого из N=5 работников бригады. Построить совмещенную столбиковую диаграмму (на столбике зарплаты стоит столбик премии). Премия должна быть заштрихована командой SetFillStyle.

д). Для той же задачи построить секторную диаграмму зарплат. Подсказка. Сначала следует найти сумму всех зарплат s. Затем перевести зарплату каждого работника в градусы его сектора на диаграмме zar[i]/s*360 и запомнить ее в массиве zar[1..5]. Далее вычислить начальный и конечный угол каждого радиуса каждого сектора, нарисовать диаграмму командой PieSlice и раскрасить ее.



<== предыдущая лекция | следующая лекция ==>
M,i,j,k:integer; | Кафедра «Информационные технологии»


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.061 сек.