Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
О
Факультет:
ЗІ
Кафедра:
Не вказано

Інформація про роботу

Рік:
2014
Тип роботи:
Лабораторна робота
Предмет:
Програмування комп’ютерної графіки

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти та науки України Національний університет “Львівська політехніка” ПОБУДОВА РУХОМИХ ГРАФІЧНИХ ЗОБРАЖЕНЬ В СЕРЕДОВИЩІ MICROSOFT VISUAL STUDIO C++ 2008 Лабораторна робота №4 з курсу «Програмування комп’ютерної графіки» Варіант №16 Завдання: Затухаючі відскоки кульки від поверхні. Параметри: H=100, d=20. / Блок-схема програми: - + Список індетифікаторів, змінних та функцій: CBrush br; br.CreateSolidBrush(RGB(0,0,0)); dc.SelectObject(&br); - Створення та використання користувацького пера; dc.SelectStockObject(Color); - перо , Color – колір пера; dc.Rectangle() – малює прямокутник. Остаточна версія програми: Файл main.h #include<vector> #include"iostream" #include<math.h> using namespace std; const int n1=3,m1=1; class TMatrix { public: vector<vector<double>> matrix; int n; public: TMatrix(){ n=n1; matrix.resize(n1); for(int i=0;i<n1;i++) matrix[i].resize(n1); } TMatrix(int Dx,int Dy){ n=n1; matrix.resize(3); for(int i=0;i<3;i++) matrix[i].resize(3); for(int i=0;i<3;i++) for(int j=0;j<3;j++) if(i==j)matrix[i][j]=1; else matrix[i][j]=0; matrix[2][0]=Dx; matrix[2][1]=Dy; } TMatrix(int e){ n=n1; matrix.resize(3); for(int i=0;i<3;i++) matrix[i].resize(3); for(int i=0;i<3;i++) for(int j=0;j<3;j++) matrix[i][j]=0; matrix[0][0]=cos(e*3.14/180); matrix[0][1]=sin(e*3.14/180); matrix[1][0]=-sin(e*3.14/180); matrix[1][1]=cos(e*3.14/180); matrix[2][2]=1; } TMatrix(double e){ n=n1; matrix.resize(3); for(int i=0;i<3;i++) matrix[i].resize(3); for(int i=0;i<3;i++) for(int j=0;j<3;j++) matrix[i][j]=0; matrix[0][0]=sin(e*3.14/180); matrix[0][1]=cos(e*3.14/180); matrix[1][0]=-cos(e*3.14/180); matrix[1][1]=sin(e*3.14/180); matrix[2][2]=1; } ~TMatrix(){}; friend void rec(CPaintDC *dcc, TMatrix B); friend void drec(CPaintDC *dcc, TMatrix B); friend ostream &operator<<(ostream &out,TMatrix &L){ for(int i=0;i<3;i++) {out<<endl; for(int j=0;j<3;j++) out<<L.matrix[i][j]<<" "; } out<<endl; return out; } TMatrix operator *(TMatrix Matrix1); TMatrix &TMatrix:: operator=(TMatrix Matrix1) { int n=Matrix1.n; for(int i=0;i<n;i++) for(int j=0;j<n1;j++) matrix[i][j]=Matrix1.matrix[i][j]; return *this; } }; class TPmatrix: public TMatrix { public: vector<vector<double>> matrix; int n; TPmatrix(){ n=m1; matrix.resize(m1); for(int i=0;i<m1;i++) matrix[i].resize(n1); } TPmatrix(int x,int y){ n=m1; matrix.resize(m1); for(int i=0;i<m1;i++) matrix[i].resize(n1); matrix[0][0]=x; matrix[0][1]=y; matrix[0][2]=1; } ~TPmatrix(){}; TPmatrix operator *(TMatrix Matrix1){ TPmatrix Matrix2; for(int i=0;i<m1;i++) for(int j=0;j<n1;j++) for(int k=0;k<n1;k++) Matrix2.matrix[i][j]+=matrix[i][k]*Matrix1.matrix[k][j]; return Matrix2; } TPmatrix &operator=(TPmatrix Matrix1) { int n=Matrix1.n; for(int i=0;i<n;i++) for(int j=0;j<n1;j++) matrix[i][j]=Matrix1.matrix[i][j]; return *this; } friend ostream &operator<<(ostream &out,TPmatrix &L){ for(int i=0;i<m1;i++) {out<<endl; for(int j=0;j<n1;j++) out<<L.matrix[i][j]<<" "; } out<<endl; return out; } }; TMatrix TMatrix:: operator *(TMatrix Matrix1) { int n=Matrix1.n; TMatrix Matrix2; for(int i=0;i<n;i++) for(int j=0;j<n1;j++) for(int k=0;k<n1;k++) Matrix2.matrix[i][j]+=matrix[i][k]*Matrix1.matrix[k][j]; return Matrix2; } Файл ChildView.cpp // ChildView.cpp : реализация класса CChildView // #include "stdafx.h" #include "ChildView.h" #include "main.h" #include <conio.h> using namespace std; const int L=100,d=20; #ifdef _DEBUG #define new DEBUG_NEW #endif // CChildView CChildView::CChildView() { } CChildView::~CChildView() { } BEGIN_MESSAGE_MAP(CChildView, CWnd) ON_WM_PAINT() END_MESSAGE_MAP() // обработчики сообщений CChildView BOOL CChildView::PreCreateWindow(CREATESTRUCT& cs) { if (!CWnd::PreCreateWindow(cs)) return FALSE; cs.dwExStyle |= WS_EX_CLIENTEDGE; cs.style &= ~WS_BORDER; cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS, ::LoadCursor(NULL, IDC_ARROW), reinterpret_cast<HBRUSH>(COLOR_WINDOW+1), NULL); return TRUE; } class m_dc: public CPaintDC { public: m_dc(CWnd* pWnd); int x_c,y_c; void Circle(int x,int y,int r,COLORREF cl); void dCircle(int x,int y,int r,COLORREF cl); int getX(int l,int r); int getY(int l,int r); }; void circle(CPaintDC *dcc,TPmatrix B) { CPen pen(PS_SOLID,1,RGB(0,0,0)); CBrush br(RGB(0,0,0)); dcc->SelectObject(&br); dcc->SelectObject(&pen); dcc->MoveTo(100,100); dcc->LineTo(200,100); dcc->MoveTo(100,200); dcc->LineTo(200,200); dcc->Ellipse(B.matrix[0][0]-10,B.matrix[0][1]-10,B.matrix[0][0]+10,B.matrix[0][1]+10); pen.DeleteObject(); br.DeleteObject(); Sleep(10); br.CreateSolidBrush(RGB(255,255,255)); dcc->SelectObject(&br); pen.CreatePen(PS_SOLID,1,RGB(255,255,255)); dcc->SelectObject(&pen); dcc->Ellipse(B.matrix[0][0]-10,B.matrix[0][1]-10,B.matrix[0][0]+10,B.matrix[0][1]+10); pen.DeleteObject(); br.DeleteObject(); } void CChildView::OnPaint() { CPaintDC dc(this); CBrush br; TPmatrix P(150,110),P1(150,110); TMatrix T2(0,-1),T(0,1); dc.MoveTo(100,100); dc.LineTo(200,100); dc.MoveTo(100,200); dc.LineTo(200,200); circle(&dc,P); int k=0; do { for(int i=90-k*20;i>=10;i--) { P=P*T; circle(&dc,P); }k++; for(int i=10;i<=90-k*20;i++) { P=P*T2; circle(&dc,P); } } while(k<=5); CPen pen(PS_SOLID,1,RGB(0,0,0)); br.CreateSolidBrush(RGB(0,0,0)); dc.SelectObject(&br); dc.SelectObject(&pen); dc.Ellipse(140,180,160,200); pen.DeleteObject(); br.DeleteObject(); } Результати роботи програми: // Висновок: На даній лабораторній роботі я здобув навики в складанні програм для побудови рухомих графічних зображень на екрані комп'ютера за допомогою матричних перетворень.
Антиботан аватар за замовчуванням

12.04.2016 16:04-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!