Простейшие графические построения

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

Модуль Graph представляет собой мощную библиотеку графических подпрограмм универсального назначения, рассчитанную на работу с графическими адаптерами IBM –совместимых ПК. Подпрограммы модуля Graph обеспечивают различные режимы работы многорежимных адаптеров, полностью используют их цветовые возможности и разрешающую способность. Во время выполнения программы процедура InitGraph автоматически распознает графический адаптер, установленный на ПК, загружает и инициализирует соответствующий графический драйвер, переводит адаптер в графический режим и возвращает управление вызывающей программе. Процедура CloseGraph выгружает драйвер из памяти и восстанавливает текстовый режим работы адаптера. Программы модуля Graph позволяют адресоваться к любому элементу (пикселю) растрового графического экрана и управлять светимостью этого элемента. Для указания пикселя используется следующая система координат: верхний левый угол графического экрана имеет координаты 0,0; горизонтальная координата Х увеличивается слева направо, вертикальная координата Y увеличивается сверху вниз. Например, в режиме 640 х 480 (адаптер VGA) правый нижний угол экрана имеет координаты 639; 479, а центр экрана – координаты 319; 239.

Некоторые графические программы используют понятие текущего указателя. Указатель содержит координаты того пикселя, начиная с которого будет строиться изображение подпрограммами LineTo, LineBel, OutText и др. В этом смысле указатель подобен текстовому курсору, но в отличие от него, не имеет видимого изображения на экране.

В модуле Graph имеются процедуры для рисования элементарных графических фигур – точек, линий, окружностей, дуг и т.д.

При необходимости замкнутые фигуры могут быть закрашены различными цветами и стилями (образцами закраски).

Оглавление - содержание

Простейшие процедуры

PutPixel (x, y: integer; K: Word) – рисует точку с координатами x и y цвета К.

Line (x1, y1, x2, y2: integer) – рисует линию от точки с координатами х1; у1 – до точки с координатами х2; у2.

Circle (х, у; integer; R: Word) – рисует окружность радиуса R, используя х; у как координаты центра.

Ellipse (х, y: integer; StAngle, EndAngle, XR, yR: Word) – рисует эллиптическую дугу от начального угла StAngle к конечному углу EndAngle, используя х, у как координаты центра и XR, YR – как горизонтальный и вертикальный радиусы.

Arc (x, y: integer; StAngle, R: Word) - рисует дугу с радиусом R от начального угла StAngle к конечному EndAngle, используя х и у как координаты центра.

Bar (x1, y1, x2, y2: integer) – рисует полосу заданного размера, используя текущий стиль и цвет.

Rectangle (x1, y1, x2, y2: integer) – рисует прямоугольник, используя текущий цвет и тип линии.

Outtext XY (x, y: integer; Textstring: string) – выводит текст в заданное место экрана.

Оглавление - содержание

Константы цвета

0 (черный) 8 (темносерый)

1 (синий) 9 (яркосиний)

2 (зеленый) 10 (яркозеленый)

3 (голубой) 11 (яркоголубой)

4 (красный) 12 (розовый)

5 (фиолетовый) 13 (малиновый)

6 (коричневый) 14 (желтый)

7 (светлосерый) 15 (белый)

Требования к работе

1. Из лабораторных заданий выбрать задание своего варианта.

2. Составить программу на языке ТР для построения на экране соответствующей фигуры.

3. Получить на экране фигуру и закрасить ее указанными цветами.

4. Сделать соответствующие выводы и подготовить работу к защите.

Оглавление - содержание

Лабораторные задания

               
    Простейшие графические построения - student2.ru
  Простейшие графические построения - student2.ru
      Простейшие графические построения - student2.ru
    Простейшие графические построения - student2.ru
 
 
 

1 2 3 4

           
  Простейшие графические построения - student2.ru
    Простейшие графические построения - student2.ru
      Простейшие графические построения - student2.ru
 
 
Простейшие графические построения - student2.ru

5 6 7 8

           
    Простейшие графические построения - student2.ru
      Простейшие графические построения - student2.ru
  Простейшие графические построения - student2.ru
 
 

9 10 11

           
    Простейшие графические построения - student2.ru
    Простейшие графические построения - student2.ru
  Простейшие графические построения - student2.ru
 
 

12 13 14

           
    Простейшие графические построения - student2.ru
    Простейшие графические построения - student2.ru
  Простейшие графические построения - student2.ru
 
 

15 16 17

                       
  Простейшие графические построения - student2.ru
    Простейшие графические построения - student2.ru
 
    Простейшие графические построения - student2.ru
    Простейшие графические построения - student2.ru
      Простейшие графические построения - student2.ru
 
      Простейшие графические построения - student2.ru
 
 
 

18 19 20

                   
    Простейшие графические построения - student2.ru
      Простейшие графические построения - student2.ru
 
    Простейшие графические построения - student2.ru
  Простейшие графические построения - student2.ru
    Простейшие графические построения - student2.ru
 
 
 
Простейшие графические построения - student2.ru Простейшие графические построения - student2.ru

21 22 23

       
    Простейшие графические построения - student2.ru
  Простейшие графические построения - student2.ru
 




24 25

Оглавление - содержание

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

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

В этой работе мы рассмотрим приемы построения на экране компьютера графиков функций. Пусть, например, требуется построить график функции y = f (x) на отрезке [a, b].

Для этого сначала на экране должны быть построены координатные оси ОХ и ОУ, а затем и кривую изображающую график этой функции. Обычно начало системы координат ОХУ располагают в середине экрана (т.е. в точке, определяемой парой чисел 319, 239). Далее необходимо выбрать подходящий масштабный множитель, т.е. количество точек экрана, соответствующих единице измерения в системе координат ОХУ. Пусть значение масштабного множителя равно 10. В этом случае положение точки графика с координатами (х, у) на экране будет определяться парой значений 319±10*Х, 239±10*у. Можно легко составить программу, позволяющую получать графики функций в любой части экрана. Пусть заданы четыре натуральные числа c, d, l, h, которые определяют положение левого нижнего угла, ширину и высоту прямоугольной области экрана, в которой должен быть построен график данной функции. Кроме того, задан отрезок, на котором строится график, - [a, b] и n – количество частей, на которые нужно разбить отрезок [a,b] при построении графика. Начало системы координат OXY обычно совмещают с центром заданной прямоугольной области экрана.

При построении графика будут использоваться значения функции при х =а, а + S, a + 2S, …. где S = (b-a)/n. Рассмотрим абсолютные величины значений функций в этих точках. Пусть fm – максимальная из этих величин. Тогда график функции не выйдет за верхнюю и нижнюю границы данной прямоугольной области, если масштабный множитель не превосходит [h/2fm]. Cледовательно, если взять в качестве значения масштабного множителя меньшую из величин [h/(2fm)], [l/(2am)], то график функции целиком поместится в данной прямоугольной области экрана.

Требования к работе

1. Из лабораторных заданий выбрать задание своего варианта.

2. Составить программу на языке ТР для построения на экране графика заданной функции.

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

5. Сделать соответствующие выводы и подготовить работу к защите.

Лабораторные задания

Построить графики следующих функций на отрезке [a, b]

1. Простейшие графические построения - student2.ru a = - 4π, в = 4 π; n = 200.

2. Простейшие графические построения - student2.ru a = - 4π, в = 8; n = 150.

3. Простейшие графические построения - student2.ru ; a = - 8, в = 16; n = 200.

4. Простейшие графические построения - student2.ru ; a = - 4, в = 12π; n = 100.

5. Простейшие графические построения - student2.ru a = - 3, в = 3; n = 500.

6. Простейшие графические построения - student2.ru ; a = - 10, в = 10; n = 100.

7. Простейшие графические построения - student2.ru a = - 20, в = 20; n = 200.

8. Простейшие графические построения - student2.ru ; a = - 10, в = 10; n = 150.

9. Простейшие графические построения - student2.ru a = - 2π, в = 8π; n = 200.

10. Простейшие графические построения - student2.ru a = - 20π, в = 20; n = 200.

11. Простейшие графические построения - student2.ru a = - 5π, в = 5π; n = 150.

12. Простейшие графические построения - student2.ru a = -0; в = 2π; n = 50.

13. Простейшие графические построения - student2.ru a = - 5, в = 10; n = 100.

14. Простейшие графические построения - student2.ru a = - 5π, в = 10; n = 100.

15. Простейшие графические построения - student2.ru a = - 5, в = 10; n = 100.

Ниже приведен неполный текст программы, показывающий принцип ее действия :

Program Graphik;

Uses Crt,Graph;

Var Gd, Gm : Integer ;

<...> ;

Const <...> ;

Function F (x:Real) : Real ; { Функция, чей график будет строиться }

begin

<...>

end;

Procedure Koord;

{ Процедура, выводящая на экран оси координат, единичные метки,

стрелки и сами координаты (числа) }

begin

<...>

end;

begin

t:= m1; { m1 - левая граница области определения t }

Gd:=Detect ; { Производится обращение к любому графическому драйверу (*.bgi) }

Write( 'Введите значения a,b через пробел : ');

ReadLn(a,b); { Запрос a и b }

InitGraph (Gr,Gm,''); { Инициализация графики (Gm - графический режим, '' -

путь до драйвера) }

If GraphResult<>GrOK then { Проверка графического режима, где GrOK -

положительный результат }

begin <...> { Вывод на экран сообщения, что графический драйвер не подключен,

и программа заканчивает свою работу }

end

else { Драйвер подключен }

begin Koord; { Вызов процедуры, рисующей оси координат }

MoveTo (Round(k*(a+b*t),Round(n*F(a+b*t)));

{ указатель переходит в начало графика (левую часть) }

While t < m2 do

{ m2 - правая граница области определения t }

begin <...> { если на область определения функции налагаются

какие-либо ограничения (например, arcsin(x)),

то проводится проверка, лежит ли (a+b*t) в этой области.

В случае, если (a+b*t) выходит за область определения

функции, то программа производит повторный запрос }

x:=k*(a+b*t); { определение координат точки, лежащей

на графике}

y:=n*F(a+b*t); (в масштабе - т.к. графики бывают разными, то

приходится подбирать коэффициенты k и n для

большей наглядности) }

LineTo(p+Round(x),q-Round(y));

{ Чертит линию от положения указателя до вычисленной точки, причем указатель

переходит в эту точку ( (p,q) - координаты начала координат на экране }

t:=t+0.005; { Увеличение значения t - чем меньше

шаг, тем точнее будет график) }

end;

ReadKey;

CloseGraph; { Выход из графического режима}

end;

end.

Оглавление - содержание

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

Модули

1. Программа содержит внутреннюю подпрограмму-функцию для вычисления выражения приведенного в таблице с вариантами заданий.

2. Программа заполняет массив со значениями аргумента и функции для заданного шага и диапазона изменения аргумента.

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

4. Для вывода названия группы и фамилии пользователя необходимо разработать модуль с соответствующей процедурой.

№ варианта Выражение для вычисления значения функции Область изменения x Шаг изменения x
Простейшие графические построения - student2.ru [-10,10 ] 0,2
Простейшие графические построения - student2.ru [-10,10 ] 0,2
Простейшие графические построения - student2.ru [-10,10 ] 0,2
Простейшие графические построения - student2.ru [-10,10 ] 0,2
Простейшие графические построения - student2.ru [5,10 ] 0,05
Простейшие графические построения - student2.ru [-10,10 ] 0,2
Простейшие графические построения - student2.ru [-3,10 ] 0,1
Простейшие графические построения - student2.ru [-10,2 ] 0,1
Простейшие графические построения - student2.ru [-0,5;0,5 ] 0,01
Простейшие графические построения - student2.ru [4,10 ] 0,05
Простейшие графические построения - student2.ru [2,10 ] 0,08
Простейшие графические построения - student2.ru [1,10 ] 0,1
Простейшие графические построения - student2.ru [0,7;0,7 ] 0,01
Простейшие графические построения - student2.ru [1,10 ] 0,1
Простейшие графические построения - student2.ru [1,10 ] 0,1
Простейшие графические построения - student2.ru [-10,1 ] 0,1
Простейшие графические построения - student2.ru [-10,-1 ] 0,1
Простейшие графические построения - student2.ru [2,10 ] 0,1
Простейшие графические построения - student2.ru [-10,1 ] 0,1
Простейшие графические построения - student2.ru [-10,-1 ] 0,1
Простейшие графические построения - student2.ru [2,10 ] 0,1
Простейшие графические построения - student2.ru [-20,-4 ] 0,1
Простейшие графические построения - student2.ru [4,20 ] 0,1
Простейшие графические построения - student2.ru [-0,7;0,7 ] 0,01
Простейшие графические построения - student2.ru [8,20 ] 0,1
Простейшие графические построения - student2.ru [-4,4 ] 0,1
Простейшие графические построения - student2.ru [-4,4 ] 0,1
       

Главная задача - разработка модуля с процедурой записи в текстовый файл фамилии и группы пользователя. Ниже приведен текст модуля :

Unit SaveFamGr; { Заголовок модуля ( желательно совпадающий с именем файла модуля ) }

Interface; { Объявление переменных, процедур и т.д., которые становятся

доступными программе, использующей этот модуль }

Procedure Save ( Fam, Gr, Pass : String );

Implementation; { Исполняемая часть - здесь описываются подпрограммы,

объявленные в разделе Interface }

Var Fil : Text ;

Procedure Save ( Fam, Gr, Pass : String ) ;

begin

Assign( Fil, Pass + '.pas' ); { Соответствие логического имени файла с физическим,

указанным пользователем ( К имени физического файла можно добавить

расширение .pas - так его можно просмотреть сразу в оболочке Turbo Pascal ) }

ReWrite (Fil) ; { Создание и открытие файла, имя которого указал пользователь }

WriteLn (Fil, ' Ваша фамилия : ' + Fam ); { Запись в файл фамилии и группы }

WriteLn (Fil, ' Ваша группа : ' + Gr );

Close (Fil); { Закрытие файла }

end;

end. {конец модуля)

В самой программе производится вызов этого модуля наравне с модулем Crt. Затем в теле программы происходит обращение к процедуре, описанной в этом модуле. ( Процедура Save ). Ниже приведен неполный текст программы :

Program Moduli;

Uses Crt, SaveFamGr;

Var

M : Array[<...>] of Real; { Массив, в который будут заноситься значения функции ( размер массива подбирается в зависимости от того, сколько значений функции надо вычислить ) }

Fil : Text ;

<...> ; { Остальные переменные }

Const <...> ;

Function F ( <...> ) : Real ; { Функция из таблицы в задании }

begin <...> ;

end;

begin { тело программы }

While <...> do { цикл записи в массив значений функции }

begin <...> ; end;

Write ( 'Введите фамилию : '); ReadLn( <...> );

Write ( 'Введите группу : ' ); ReadLn( <...> );

Write ( 'Введите имя файла (без расширения) : ' ); ReadLn( NameOfFile );

Save (<...>,<...>,NameOfFile); { Выполняется процедура, описанная в модуле }

Assign ( Fil, NameOfFile + '.pas' ); { Соответствие логического файла с физическим }

Append (Fil); { Т.к. файл с таким именем уже не пустой (содетжит фамилию и группу), то использование процедуры ReWrite() здесь неуместно - удалилась бы информация о пользователе. Поэтому используется процедура Append(), дополняющая файл новой информацией }

For <...> to <...> do { цикл, выводящий из заполненного ранее массива значения функции в текстовый begin файл. Заполнение производится в таблицу } <...>

end;

end. Оглавление - содержание

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

Наши рекомендации