Элементы работы с графикой

Автор: a*******@yandex.ru, 26 Ноября 2011 в 11:27, лабораторная работа

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

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

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

Лабораторное задание 1.doc

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

Лабораторное  задание  1. 

Выполнил:                        .  Вариант 18.

 

Тема: Элементы работы с графикой.

Задание:

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

2.Произвести  сечение фигуры плоскостью, параллельной  её основанию на расстоянии  d от основания, и выделить поверхность сечения заданным цветом и типом штриховки (заливки).

Требования к программе:

-исходные  данные должны вводиться посредством стандартной процедуры READ        (READLN);

-данные  не указанные в варианте выбрать  самостоятельно;

-изображение  должно быть построено в центре  экрана;

-линейные  размеры изображения должны быть выражены в относительных единицах       (пикселях). При это максимальные линейные параметры изображения должны лежать в пределах 1/2.. 3/4 соответствующих линейных размеров экрана монитора;

-видимые  ребра фигуры должны быть изображены  непрерывными линиями, а невидимые штриховыми. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Описание  программы LAB1.

   Программа начинается с построения  изометрической системы осей  координат,  между осями угол  составляет 120 градусов, и относительно горизонта вектор ОХ составляют угол 30 градусов, отсюда приращение по (оу) для ОХ  выполняется  функцией ypr(l) по формуле:

                                                                                                            

где  приращение по (оу) , а длина вектора ОХ, приращение по (ох) выполняется функцией xpr(l)  по теореме Пифагора где это приращение по (ох) по формуле:

рис.2 

Точка Т1 пятиугольника  берется любая и от нее начинаются вычисляться остальные точки пятиугольника. Точки Т2 смещена по (оу) относительно Т1 на длину основания (вводимую вручную), Т6Т4 это высота(vis) пятиугольника и находится по формуле:

 

где  высота, а длина стороны основания.

Приращение  Т4 по (ох) находится функцией xpr(vis), а по (оу) функцией ypr(vis).

Диагональ пятиугольника находится по формуле:

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

Результат работы программы

рис.3                                                                 рис.4 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Текст программы на языке  lab1 Паскаль. 

uses graph,crt;

type point=record

           x,y:word;

                end;

const xs=60;

      ys=50;

      os=50;

      T1x=390;

      T1y=150;

var mas:array[1..6]of pointtype;

    gd,gm:integer;

    l,dop,vop,Diag,Tp,vis,

    T2x,T2y,T3x,T3y,T4x,T4y,T5x,T5y:word;

    ch,s:char;

{----------------------------------------------------------------------------}

function xpr(l:word):word;                                   {приращение по Х}

begin

   xpr:=trunc(sqrt(l*l-sqr(l/2)));

end;

{----------------------------------------------------------------------------}

function ypr(l:word):word;                                   {приращение по У}

begin

   ypr:=trunc(l/2);

end;

{----------------------------------------------------------------------------}

procedure prov(var dan:word;sl:byte);            {процедура проверки вводимых}

var z1:byte;z:boolean;                           {    данных на совместимость}

  begin

    repeat

      window(57,23,59,24);

      textcolor(15);

      {$i-};

      readln(dan);

      {$i+};

      case sl of

       1:z:=(ioresult=0)and(dan<100)and(dan>30);

       2:z:=(ioresult=0)and(dan<200);

      end;

      z1:=0;

      if not z then

        begin

          setviewport(500,365,639,400,true);

          outtextxy(5,5,'неверно');

          z1:=1;

        end

        else begin

              SetViewPort(500,365,639,400,true);

              ClearViewPort;

             end;

    until z;

    Graphdefaults;

  end;

{----------------------------------------------------------------------------}

procedure lin(dl:word);                     {процедура выведение ребер призмы}

begin

  line(T2x,T2y,T2x-xpr(dl),T2y+ypr(dl));

  line(T3x,T3y,T3x-xpr(dl),T3y+ypr(dl));

  line(T4x,T4y,T4x-xpr(dl),T4y+ypr(dl));

  line(T5x,T5y,T5x-xpr(dl),T5y+ypr(dl));

  SetLineStyle(3,0,1);

  line(T1x,T1y,T1x-xpr(dl),T1y+ypr(dl));

  SetLineStyle(0,0,1);

end;

{----------------------------------------------------------------------------}

procedure pent(dl:word;linia:byte);        {процедура выведения пятиугольника}

begin

  line(T2x-xpr(dl),T2y+ypr(dl),T3x-xpr(dl),T3y+ypr(dl));

  line(T3x-xpr(dl),T3y+ypr(dl),T4x-xpr(dl),T4y+ypr(dl));

  line(T4x-xpr(dl),T4y+ypr(dl),T5x-xpr(dl),T5y+ypr(dl));

  if linia=1 then SetLineStyle(3,0,1);

  line(T5x-xpr(dl),T5y+ypr(dl),T1x-xpr(dl),T1y+ypr(dl));

  line(T1x-xpr(dl),T1y+ypr(dl),T2x-xpr(dl),T2y+ypr(dl));

  SetLineStyle(0,0,1);

end;

{----------------------------------------------------------------------------}

procedure pentag(dl:word);                      {         процедура выведения}

begin                                           {заштрихованого пятиугольника}

  mas[1].x:=T1x-xpr(dl);mas[1].y:=T1y+ypr(dl);

  mas[2].x:=T2x-xpr(dl);mas[2].y:=T2y+ypr(dl);

  mas[3].x:=T3x-xpr(dl);mas[3].y:=T3y+ypr(dl);

  mas[4].x:=T4x-xpr(dl);mas[4].y:=T4y+ypr(dl);

  mas[5].x:=T5x-xpr(dl);mas[5].y:=T5y+ypr(dl);

  mas[6].x:=T1x-xpr(dl);mas[1].y:=T1y+ypr(dl);

  SetFillStyle(11,15);

  FillPoly(5,mas);

end; 

{----------------------------------------------------------------------------}

begin                                                            {приветствие}

  gd:=detect;

  initgraph(gd,gm,'');

  setfillstyle(1,9);

  bar(100,100,540,380);

  setfillstyle(1,14);

  bar(110,110,530,370);

  setcolor(9);

  settextstyle(defaultfont,horizdir,2);

  settextjustify(centertext,centertext);

  outtextxy(320,250,'программа');

  settextstyle(defaultfont,horizdir,1);

  outtextxy(320,260,'выведения призмы с заданными параметрами');

  readkey;

{----------------------------------------------------------------------------}

repeat

  clearviewport;

  setcolor(15);                                  {выведение системы координат}

  line(xs,5,xs,ys);

  line(xs,5,xs+3,10);

  line(xs,5,xs-3,10);

  outtextxy(xs+10,5,'z');

  line(xs,ys,xs-xpr(os),ys+ypr(os));

  line(xs-xpr(os),ys+ypr(os),xs-xpr(os)+3,ys+ypr(os)-5);

  line(xs-xpr(os),ys+ypr(os),xs-xpr(os)+6,ys+ypr(os));

  outtextxy(xs-xpr(os),ys+ypr(os)-20,'x');

  line(xs,ys,xs+xpr(os),ys+ypr(os));

  line(xs+xpr(os),ys+ypr(os),xs+xpr(os)-3,ys+ypr(os)-5);

  line(xs+xpr(os),ys+ypr(os),xs+xpr(os)-6,ys+ypr(os));

  outtextxy(xs+xpr(os),ys+ypr(os)-20,'y');

  outtextxy(xs+10,ys-5,'o');

{----------------------------------------------------------------------------}

  settextjustify(lefttext,toptext);

  outtextxy(5,345,'введите длину стороны основания призмы');

  outtextxy(5,355,'в  пикселях от 30 до 100');

  prov(dop,1);

  T2x:=T1x;

  T2y:=T1y-dop;

  vis:=trunc((sqrt(5+2*sqrt(5)))/2*dop);                {высота пятиугольника}

  T4x:=T1x+xpr(vis);

  T4y:=T1y+ypr(vis)-trunc(dop/2);

  Diag:=trunc(((1+sqrt(5))*dop)/4);         {половина диагонали пятиугольника}

  Tp:=trunc(sqrt(sqr(dop)-sqr(Diag)));      {длина высоты треугольника Т3Т4Т5}

  T3x:=T4x-xpr(tp);

  T3y:=T4y-ypr(tp)-Diag;

  T5x:=T3x;

  T5y:=T3y+2*Diag;

  pent(0,1);

  lin(200);

  pent(200,0);

  OutTextXY(5,375,'введите  длину отсекаемой призмы');

  OutTextXY(5,385,'в  пикселях от 10 до 200');

  prov(vop,2);

  pent(vop,1);

  OutTextXY(5,405,'заштриховать  нажмите У');

  s:=readkey;

  if s='y' then pentag(vop);

  lin(200);

  pent(0,1);

  pent(200,0);

  OutTextXY(5,425,'выбрать новые параметры нажмите любую кнопку');

  OutTextXy(5,435,'выйти нажмите У');

  ch:=readkey;

until ch='y';

  closegraph;

end. 

Информация о работе Элементы работы с графикой