Вивчення графічних можливостей середовища Turbo C++ 3.0: побудування геометричних фігур з використанням перетворень та проекцій зображень

Автор: Пользователь скрыл имя, 27 Мая 2013 в 13:46, лабораторная работа

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

Мета: Навчитися реалізовувати методи перетворень та проекції зображень з використанням графічних можливостей програмного середовища Turbo C++ 3.0.
Завдання: На мові Turbo Pascal 7.0 скласти програму, що реалізує певні елементарні графічні перетворення та проекції зображень.
Висновок: В результаті виконання лабораторної роботи ми опанували основи роботи в середовищі Turbo C++ 3.0, навчилися масштабу вати графічні об’єкти з допомого теорії афінних перетворень.

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

Laba4.doc

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

Міністерство освіти і науки України

Вінницький національний технічний університет

Інститут автоматики, електроніки та комп’ютерних систем управління

Факультет комп’ютерних систем управління

Кафедра КСУ

 

 

 

 

 

 

 

 

 

 

Лабораторна робота №4

На тему: «Вивчення графічних можливостей середовища Turbo C++ 3.0: побудування геометричних фігур з використанням перетворень та проекцій зображень»

 

 

 

 

 

 

 

 

 

 

 

Виконали:                      ст.гр. 4СІ-07

.  

Перевірив:  викладач

 

 

 

 

 

 

 

 

 

 

 

Вінниця ВНТУ 2010

Мета: Навчитися реалізовувати методи перетворень та проекції зображень з використанням графічних можливостей програмного середовища Turbo C++ 3.0.

 

Завдання:  На мові Turbo Pascal 7.0 скласти програму, що реалізує певні елементарні графічні перетворення та проекції зображень.

Програма має відповідати  вказаним нижче вимогам:

 

  1. Інтерфейс програми має дозволяти користувачеві здійснювати наступні з зазначених елементарних перетворень:

 

Варіант

Завдання

1

Реалізувати масштабування розмірів фігури у  вертикальному та горизонтальному напрямках. В якості фігури задано паралелепіпед. Масштабування має здійснюватись на певну величину (яка задається викладачем) при натисканні  відповідних клавіш із стрілками.

2

Реалізувати масштабування  розмірів фігури у вертикальному  та горизонтальному напрямках. В якості фігури задано піраміду. Масштабування має здійснюватись на певну величину (яка задаєтся викладачем) при натисканні  відповідних клавіш із стрілками.

3

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

4

Реалізувати обертання фігури у вертикальній площині. В якості фігури задано паралелепіпед. Обертання здійснювати навколо  осі, яка проходить через одне з ребер.

5

Реалізувати обертання правильної піраміди навколо  осі, яка проходить через одне з її бокових ребер. Кількість  бокових граней дорівнює трьом.

6

Задано зображення кубу у центральній проекції з фіксованим центром проекції. Реалізувати відображення фігури з використанням цієї ж проекції в різних позиціях. Перехід між позиціями має здійснюватись при натисканні відповідних клавіш із стрілками.

7

Реалізувати перехід  між зображенням кубу у ортогональній  проекції та зображенням кубу у центральній проекції. Центр проектування має задаватися точкою з довільними координатами за допомогою вказівника миші.


 

  1. Керування здійснювати за допомогою клавіатури [1, с. 170-173].
  2. Забезпечувати необхідною інформацією користувача (прізвища розробників, поточне завдання), вказати за допомогою яких клавіш здійснюється перетворення, закінчувати роботу в програмі при натисканні на клавішу Esc.

 

Лістинг програми:

#include <conio.h>

#include <stdio.h>

#include <graphics.h>

#include <stdlib.h>

#include <math.h>

 

struct C3D

{

    int x;

    int y;

    int z;

};

 

void figura(C3D, C3D, C3D, float, float);

 

void main()

{

    int gdriver = DETECT, gmode, errorcode;

    initgraph(&gdriver, &gmode, "");

    errorcode = graphresult();

    if (errorcode != grOk)

    {

printf("Graphics error: %s\n", grapherrormsg(errorcode));

printf("Press any key to halt:");

getch();

exit(1);          

    }

    setbkcolor(15);

    C3D a, b, c;

    a.x = 50;  a.y = 100; a.z = 50;

    b.x = 0;   b.y = a.y; b.z = 0;

    c.x = a.x; c.y = 0;   c.z = a.z;

    int press = 0;

    float kH = 1, kV = 1;

    while(press != 27)

    {

cleardevice();

figura(a,b,c,kH,kV);

 

press = getch();

switch(press)

{

  case 77: kH = kH + 0.1;

    break;

  case 75: kH = kH - 0.1;

    break;

  case 72: kV = kV + 0.1;

    break;

  case 80: kV = kV - 0.1;

    break;

}

    }

    cleardevice();

    outtextxy(getmaxx()/2 - 75, 100, "Laboratoena robota #5");

    outtextxy(getmaxx()/2 - 75, 120, "Vykonaly:");

    outtextxy(getmaxx()/2 - 75, 140, "Ra");

    outtextxy(getmaxx()/2 - 75, 160, "Sk");

    outtextxy(getmaxx()/2 - 75, 180, "Bi");

    getch();

    closegraph();

}

 

void figura(C3D a, C3D b, C3D c, float kH, float kV)

{

    int w = (a.y - c.y) * kH;

    int h = (b.z - a.z) * kV;

    int k = (a.x - b.x) * kH;

 

    a.y = b.y = c.y + w;

    a.z = c.z = b.z + h;

    a.x = c.x = b.x + k;

 

    C3D d, f, g;

 

    d.x = a.x; d.y = a.y; d.z = b.z;

    f.x = b.x; f.y = b.y; f.z = a.z;

    g.x = b.x; g.y = c.y; g.z = c.z;

 

    int Al = -1; //-

    int Bt = 1;

    int xc = getmaxx() / 2;

    int yc = getmaxy() / 2;

    int x0 = xc - w/2, y0 = yc + h/2;

 

    C3D A, B, C, D;

 

    A.x = x0 + g.x * cos(Al) - g.y * sin(Al);

    A.y = y0 + g.x * sin(Al) * cos(Bt) + g.y * cos(Al) * cos(Bt) - g.z * sin(Bt);

 

    B.x = x0 + c.x * cos(Al) - c.y * sin(Al);

    B.y = y0 + c.x * sin(Al) * cos(Bt) + c.y * cos(Al) * cos(Bt) - c.z * sin(Bt);

 

    C.x = x0 + f.x * cos(Al) - f.y * sin(Al);

    C.y = y0 + f.x * sin(Al) * cos(Bt) + f.y * cos(Al) * cos(Bt) - f.z * sin(Bt);

 

    D.x = x0 + d.x * cos(Al) - d.y * sin(Al);

    D.y = y0 + d.x * sin(Al) * cos(Bt) + d.y * cos(Al) * cos(Bt) - d.z * sin(Bt);

 

    setcolor(1);

    line(A.x,A.y,B.x,B.y);

    line(A.x,A.y,C.x,C.y);

    line(C.x,C.y,B.x,B.y);

 

    line(D.x,D.y,B.x,B.y);

    line(D.x,D.y,A.x,A.y);

    line(D.x,D.y,C.x,C.y);

 

}

 

Алгоритм головної програми:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Висновок: В результаті виконання лабораторної роботи ми опанували основи роботи в середовищі Turbo C++ 3.0, навчилися масштабу вати графічні об’єкти з допомого теорії афінних перетворень.




Информация о работе Вивчення графічних можливостей середовища Turbo C++ 3.0: побудування геометричних фігур з використанням перетворень та проекцій зображень