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

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

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

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

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

Міністерство освіти та науки України Національний університет “Львівська політехніка” ПОБУДОВА РУХОМИХ ГРАФІЧНИХ ЗОБРАЖЕНЬ В СЕРЕДОВИЩІ MICROSOFT VISUAL STUDIO C++ 2008 Лабораторна робота №4 з курсу «Програмування комп’ютерної графіки» Варіант №10 Завдання: Незатухаючі коливання маятника. Нитка маятника видима. Кольори кульки і нитки різні. Параметри: R=60, d=18, φ= 90 0 . / Блок-схема програми: 1 2 3 4 11 5 6 7 8 9 10 Список індетифікаторів, змінних та функцій: 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 Dx,int Dy){ n=n1; matrix.resize(3); for(int i=0;i<3;i++) matrix[i].resize(3); matrix[0][0]=1; matrix[0][1]=2; matrix[0][2]=3; matrix[1][0]=4; matrix[1][1]=5; matrix[1][2]=6; matrix[2][0]=Dx; matrix[2][1]=Dy; matrix[2][2]=7; }*/ 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(const TMatrix &matrix1){ for(int i=0; i<3;i++) for(int j=0;j<3;j++) matrix[i][j]=matrix1.matrix[i][j]; for(int i=0;i<3;i++) x_matrix[i]=matrix1.x_matrix[i]; }*/ ~TMatrix(){}; friend void duha(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; } /*TPmatrix operator *(TPmatrix Matrix1);*/ //friend ostream &operator<<(ostream ,TPmatrix); }; 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 : implementation of the CChildView class // #include "stdafx.h" #include "ChildView.h" #include <math.h> #include "main.h" #ifdef _DEBUG #define new DEBUG_NEW #endif const int r=10; // CChildView CChildView::CChildView() { } CChildView::~CChildView() { } BEGIN_MESSAGE_MAP(CChildView, CWnd) ON_WM_PAINT() END_MESSAGE_MAP() // CChildView message handlers 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; } void duha(CPaintDC *dcc, TPmatrix B) { CPen pen; CBrush br; pen.CreatePen(PS_SOLID,1,RGB(0,0,0));// колір дуги br.CreateSolidBrush(RGB(255,0,0)); // колір кульки dcc->SelectObject(&pen); dcc->SelectObject(&br); dcc->Ellipse(B.matrix[0][0]-r,B.matrix[0][1]-r,B.matrix[0][0]+r,B.matrix[0][1]+r); dcc->MoveTo(200,200); dcc->LineTo(B.matrix[0][0],B.matrix[0][1]); //нитка pen.DeleteObject(); br.DeleteObject(); Sleep(10); pen.CreatePen(PS_SOLID,1,RGB(255,255,255)); //затирання руху кульки br.CreateSolidBrush(RGB(255,255,255)); dcc->SelectObject(&pen); dcc->SelectObject(&br); dcc->Ellipse(B.matrix[0][0]-r,B.matrix[0][1]-r,B.matrix[0][0]+r,B.matrix[0][1]+r); pen.DeleteObject(); br.DeleteObject(); pen.CreatePen(PS_SOLID,1,RGB(0,0,0)); dcc->SelectObject(&pen); dcc->Rectangle(-10,-10,1000,1000); pen.DeleteObject(); } void CChildView::OnPaint() { CPaintDC dc(this); for(int k=1;k<=10000;k++) { TPmatrix P(1,1),P1(150,190),B(1,1); TMatrix T1(-200,-200),T2(200,200),M1; duha(&dc,P); for( double i=140;i<=240;i++) { TMatrix R1(i); M1=T1*R1*T2; P=P1*M1; duha(&dc,P); } T1.matrix[2][0]=-200; T1.matrix[2][1]=-200; T2.matrix[2][0]=200; T2.matrix[2][1]=200; for( double i=240;i>=140;i--) { TMatrix R1(i); M1=T1*R1*T2; P=P1*M1; duha(&dc,P); } } } Результати роботи програми: / / / Висновок: На даній лабораторній роботі я здобув навики в складанні програм для побудови рухомих графічних зображень на екрані комп'ютера за допомогою матричних перетворень.
Антиботан аватар за замовчуванням

12.04.2016 16:04-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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