Обработка графических данных

Автор: Пользователь скрыл имя, 14 Сентября 2011 в 09:28, реферат

Описание работы

Цель: разработать комплекс программ по обработке графических и символьных данных.
Для реализации поставленной цели необходимо решить следующие задачи:
1 Задан список городов. Присвоить переменной Т название города с максимальным числом букв.
2 Дана последовательность, содержащая от 2 до 10 слов, в каждом из которых от 2 до 6 латинских букв; между соседними словами - не менее одного пробела, за последним словом точка. Напечатать все слова, отличные от последнего слова, предварительно преобразовав каждое из них по следующему правилу: перенести первую букву в конец слова.
3 Разработать программу, которая будет выводить на экран график функции y=cos(x).
4 Разработать программу, которая будет отображать движение многоугольника по экрану по принципу угол падения равен углу отражения.

Содержание

Введение ……………………………………………………… 3
1. Обработка символьных данных………………………………… 4
1. 1. Обработка текста …..…………………………………… 4
1. 2. Работа с файлами …………..……………………………11
2. Обработка графических данных ………...………………………21
2. 1. Графические функции …………………………………… 21
2. 2. Движение рисунка ……………………………………… 30
Заключение ……………………………………………………. 34
Список литературы ………………………………………………35
Приложение ……………………………………………….....… 36

Работа содержит 1 файл

курсовая сережи.doc

— 626.00 Кб (Скачать)

     if a[i]<>a[n]

     then

        begin

             sub:='':

             sub:=sub+a[i][length(a[i])];

              for j:=1 to length(a[i])-1 do

                sub:=sub+a[i][j];

                writeln('ўлў®¤ Ї®б«Ґ¤®ў вҐ«м­®бвЁ:');

                readln;

        end; 
 

      Вывод

     Программа работает правильно. Необходимость  этой программы очень велика, так же как и сам компьютер. В моей программе, приводе 10 слов, изменения настигнут только 9 слов. Переноситься последняя буква в начало слова, кроме последнего. Результаты смотрите в приложении.

 

2. Обработка графических данных.

2.1. Графические функция.

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

Следует отметить, что графическое изображение  на экране составляется из точек (например, как фотографии в газетах, журналах и др.). Количество точек (пикселей) на экране зависит от разрешающей способности экрана. Каждая точка задается двумя координатами (x, y). Точка с координатами (0,0) находится в левом верхнем углу экрана. Ось Х направлена вправо, а ось У вниз.

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

1. Переключить  монитор в графический режим  с помощью оператора InitGraph (Driver, mode, <путь к драйверу>). 
2. Установить разрешающую способность экрана по умолчанию режимом Detect или процедурой SetGraphMode. Режим Detect устанавливает разрешающую способность экрана 640*480 пикселей, т.е. координата  Х может принимать значения от 0 по 639, а У от 0 по 479. 
3. Очистить  и инициализировать графический экран процедурой ClearDevice
4. Установить цвет фона  оператором  SetBkColor и цвет изображения  оператором SetColor
5. Вывести на экран точки,  отрезки, прямоугольники, дуги, окружности, эллипсы. 
6. Вывести на экран закрашенные фигуры. 
7. Вывести тексты и подписи на экран. Для использования операторов Write и Writeln в графическом режиме необходимо выполнить следующую операцию присваивания : DirectVideo := FALSE;  Или использовать процедуру Outtextxy (x, y, st), которая выводит строку st,  начиная с позиции  x, y.
 

Цвета  в операторах  задаются с помощью своих кодов:

0 – черный;         4 – красный;           8 – темно-серый;           12 – ярко-красный; 
1 – синий;            5 – пурпурный;      9 – ярко-синий;            13 – ярко-пурпурный; 
2 –зеленый;         6 – коричневый;     10 – ярко-зеленый;       14 – желтый; 
3 – бирюзовый;  7 – светло-серый;    11 – ярко-бирюзовый;  15 – белый.

Цифровое кодирование  цвета соответствует последовательности IRGB для 0-3 битов. Бит 3 – бит интенсивности I, бит 2 – бит красного R, бит 1 – бит зеленого G, бит 0 – бит синего B. Например, 11=8+2+1, т.е. биты 3,1,0 – интенсивный сине-зеленый (бирюзовый).

Основные графические  операторы для построения изображений:

PutPixel (X, Y, цвет) - вывод точки на экран, где X, Y  - координаты точки ; 
Line ( X1, Y1, X2, Y2 ) - проводит линию из точки с координатами (X1, Y1 ) в точку с координатами ( X2, Y2 ); 
Rectangle (X1, Y1, X2, Y2 ) - прямоугольник со сторонами, параллельными осям координат;  (X1, Y1) и (X2, Y2)  - координаты, определяющие одну из диагоналей прямоугольника ; 
Bar ( X1, Y1, X2, Y2 ) - закрашенный прямоугольник (без окантовки); 
Circle ( X, Y, радиус ) – на экран выводится окружность с центром в точке  ( X, Y )(тип integer) ; 
Arc (X, Y
, начальный угол, конечный угол, радиус) - на  экран  выводится  дуга окружности с центром в точке (X, Y ); углы задаются в градусах; дуга рисуется ПРОТИВ часовой стрелки; 
Ellipse ( X, Y, начальный угол, конечный угол,  горизонтальный радиус, вертикальный радиус) -  на экран выводится эллиптическая дуга с центром в точке с координатами       ( X, Y ) (тип integer); 
SetFillStyle (заполнение, цвет) – определение вида и цвета заполнения области; 
FloodFill (x, y, цвет границы) – заливка замкнутой области.

Задание 3

     Напишите  процедуру рисования графика  функции в соответствии с вариантом, указанным в таблице. Предусмотреть вывод оцифрованных координатных осей соответственно области построения, подписей к графику. Рационально расположить элементы рисунка (график и оси) на экране,   

Блок-схемы для выполнения программы (Рисунок 2.1.):

 

 

 
 

 
 
 
 
 
 
 

   Тест  к программе

  1. Если  значение CoordYBeg >0, то программа работает не правильно.
  1. Если значение X и Y ,равно нулю программа не работает.
  1. Если убрать у значения Xend, то программа не строит график, только оси.
  1. Если изменить промежуток, то программа будет строить  такой, какой зададите.

Минус, в том что если в программе изменить промежутки, то получаем другой график 

Код программы:

uses graph;

type fun = function(X:real):real;

procedure graphic (f:fun; XBeg,XEnd:real);

var

   max, min,    {экстремальные точки функции в пределах диапозона}

   I,                                           {переменная цикла}

   step,                                      {рассчитываемый шаг}

   gradX,                    {приращение функции на один шаг по X}

   gradY: real;              {приращение функции на один шаг по Y}

   graphicX,                                     {координата по X}

   grapicY:                                      {координата по Y}

   flag:BooLean;                  {флаг - перемещена первая точка} 

procedure Coord (CoordYBeg, CoordYEnd, CoordHmin, CoordHMax: real);

var GradX, GradYX: real;

    X, Y; integer;

    color: word;

begin

     color:= GetColor;

     SetColor (2);

     GradX := GetMaxX/(CoordYEnd-CoordYBeg);

     GradYX:=GetMaxY/(CoordHMax-CoordHMin);

     if (CoordYEnd>0) and (CoordYBeg<0)

     then

         Y:=Round(GradX*(0-CoordYBeg));

     if CoordYEnd<0 then Y:=GetMaxY;

     if CoordYBeg>0 then Y:=1;

     if (CoordHMin<0) and (CoordHMax>0)

     then X:=Round(GradYX*(CoordHMax));

     if CoordHMin>0 then X:=GetMaxY;

     if CoordHMax<0 then X:=1;

     Line (1,X,GetMaxX,X);         {горизонтальная  линия}

     Line (GetMaxX-4,X+5,GetMaxX,X);          {стрелочка}

     Line (GetMaxX-4,X-5,GetMaxX,X);          {стрелочка}

     Line (Y,1,Y,GetMaxY);           {вертикальная линия}

     Line (Y-5,5,Y,1);               {стрелочка}

     Line (Y+5,5,Y,1);               {стрелочка}

     SetColor (Color);

end;

begin

     Step:=(XEnd-XBeg)/(GetMaxY-40);

     I:=XBeg;

     Max:=F(XBeg);

     Min:=F(XBeg);

     While I<=(XEnd+Step) do

     begin

          if Max<F(I) then Max:=F(I);

          if Min>F(I) then Min:=F(I);

          I:=I+Step;

     end;

     GradX:=GetMaxX/(XEnd-XBeg);

     GradY:=GetMaxY/(Max-Min);

     Coord (XBeg, XEnd, Min, Max); 

     Flag:=True;

     I:=XBeg;

     While I<=(XEnd+Step) do

     begin

          GraphicX:=Round(GradX*(I-XBeg));

          GraphicY:=Round(GradY*(Max-F(I)));

          if Flag then

          MoveTo (GraphicX, GraphicY);

          PutPixel(GraphicX, GraphicY, 15);

          I:=I+Step;

          Flag:=False;

     end;

end;

    function F1(X:real):real;

    begin

         F1:=-x*x/2+2*x;

    end;

procedure grafici;

var

   Mode, DriverDet: Integer;

begin

     Mode:=0;

     DriverDet:=Detect;

     InitGraph(Mode, DriverDet,'c:\BP\BGI');

     SetColor(15);

end;

begin

     grafici;

     Graphic(F1,-10,10);

     ReadLn;

     CloseGraph; 

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

      Руководство программиста: в программе используются модули graph и crt. Для построения используется стандартные операция вычислении. Граыик строится поточечном ввиде. 

Результат смотрите в приложении.

 

2.2 Движение рисунка

Движение  объекта осуществляется по кадрам! Для этого необходимо в первом кадре показать первоначальное положение фигуры. На следующем кадре объект в другом месте положении и так далее повторять несколько раз сколько угодно.

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

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

 

Блок-схема к  программе: (смотрите рисунок 2.2.)

 
Код программы:

uses graph,crt;

const color:array[1..10] of byte=(1,3,4,5,7,9,11,13,14,15);

 var x,y,dx,dy:integer;

i:byte;

grDriver,grMode,ErrCode:integer;

begin

grDriver:=Detect; 

 initGraph(grDriver, grMode,'');

ErrCode:=GraphResult;

if ErrCode<>grOk then

writeln(GraphErrorMsg(ErrCode))

else

begin

x:=320; y:=240; dx:=7; dy:=4; i:=1;

repeat

Setcolor(i);

  line(x-170,y-40,x-120,y+10);

   line(x-120,y+10,x-20,y+10);

    line(x-20,y+10,x+30,y-40);

     line(x+30,y-40,x-170,y-40);

      line(x-140,y-40,x-140,y-100);

       line(x-140,y-100,x-70,y-100);

        line(x-70,y-100,x-70,y-40);

       line(x-70,y-100,x-70,y-40);

      circle(x-110,y-20,10);

     circle(x-80,y-20,10);

    circle(x-50,y-20,10);

   line(x-120,y-100,x-120,y-150);

bar(x-120,y-150,x-90,y-130);

Информация о работе Обработка графических данных